<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%91%D0%B0%D0%B9%D0%B4%D0%B0%D1%80%D0%BE%D0%B2+%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%91%D0%B0%D0%B9%D0%B4%D0%B0%D1%80%D0%BE%D0%B2+%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%91%D0%B0%D0%B9%D0%B4%D0%B0%D1%80%D0%BE%D0%B2_%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9"/>
		<updated>2026-08-02T01:54:00Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=24058</id>
		<title>Теорема о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=24058"/>
				<updated>2012-06-05T13:40:22Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;'а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; 'а прислать &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; 'а прислать &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим программу &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; прислать &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \mathrm{\#SAT} \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \mathrm{\#SAT} \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; вернул '''true''', &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может посылать правильные &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; сверяет полученное от &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;'а значение с непосредственно вычисленным, слово будет допущено только в том случае, когда &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:Вычислим вероятность того, что хотя бы раз корень был угадан.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:В последнем переходе мы воспользовались [http://ru.wikipedia.org/wiki/Ряд_Тейлора формулой Тейлора] для логарифма и экспоненты, а также тем, что &amp;lt;tex&amp;gt;m&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=24052</id>
		<title>Теорема Махэни</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=24052"/>
				<updated>2012-06-05T12:02:48Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Введём вспомогательный язык &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{LSAT}=\{\langle\phi,y\rangle \bigm| \exists x: x\le_{lex}y, \phi(x) = 1\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
#Очевидно, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt; (в качестве сертификата можно запросить &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;).&lt;br /&gt;
#Сведём &amp;lt;tex&amp;gt;\mathrm{SAT}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt;. Для этого рассмотрим отображение &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 1^{|\phi|}\rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|\phi|&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное. &lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\phi \in \mathrm{SAT}&amp;lt;/tex&amp;gt;, то формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, а значит &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, и &amp;lt;tex&amp;gt;\phi \in \mathrm{SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Таким образом, &amp;lt;tex&amp;gt;\mathrm{SAT} \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;\mathrm{SAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le \mathrm{SAT}&amp;lt;/tex&amp;gt;. Тогда в силу транзитивности &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Итого мы доказали, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;. Тогда по определению &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}, y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\exists x: x\le_{lex}y, \phi(x) = 1&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x&amp;lt;_{lex}z, \phi(x) = 1&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Махэни&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Пусть &amp;lt;tex&amp;gt;S \in \mathrm{NPC} \cap \mathrm{SPARSE}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;S\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует полиномиальная функция сведения &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;\langle \phi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \phi, y \rangle) \in S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; работает полиномиальное время, и &amp;lt;tex&amp;gt;|\phi|=|y|&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;|y|&amp;lt;/tex&amp;gt; — длина вектора &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;), то &amp;lt;tex&amp;gt;f(\langle\phi,y\rangle) \le q(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&amp;lt;tex&amp;gt;S\in \mathrm{SPARSE}&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\forall n \; |S \cap \Sigma^n|\le p(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;|\{x\in S \bigm| |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — также полином.&lt;br /&gt;
&lt;br /&gt;
Опишем алгоритм для нахождения лексикографически минимальной строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, удовлетворяющей формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;n=|\phi|, r=r(|\phi|)&amp;lt;/tex&amp;gt;. Изначально область поиска для &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; — все строки длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Опишем одну итерацию поиска.&lt;br /&gt;
&lt;br /&gt;
Разобьём текущее множество строк на &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; подотрезок примерно равной длины. Обозначим концы полученных подотрезков &amp;lt;tex&amp;gt;w_0,...,w_{r+1}&amp;lt;/tex&amp;gt;. Пусть теперь &amp;lt;tex&amp;gt;z_i=f(\langle\phi,w_i\rangle)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Из леммы (2) мы знаем, что, начиная с некоторого &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;, все пары &amp;lt;tex&amp;gt;\langle\phi, w_l\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда по сведению &amp;lt;tex&amp;gt;z_j \in S&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j\ge l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;\exists i \ne j : z_i=z_j&amp;lt;/tex&amp;gt;. Строки &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt; либо обе лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, либо обе не лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда по вышеуказанной причине &amp;lt;tex&amp;gt;x\notin (w_i, w_j]&amp;lt;/tex&amp;gt;. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; часть множества подстановок.&lt;br /&gt;
# &amp;lt;tex&amp;gt;z_i \ne z_j \, \forall i \ne j&amp;lt;/tex&amp;gt;. Как было показано выше, если &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;z_1&amp;lt;/tex&amp;gt; лежит в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то все последующие &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; тоже лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, но тогда &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; содержит &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строку длины не более, чем &amp;lt;tex&amp;gt;q(|\phi|)&amp;lt;/tex&amp;gt;, что противоречит условию &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le r(|\phi|)&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x\notin[w_0,w_1]&amp;lt;/tex&amp;gt;, то есть его можно убрать из рассмотрения.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях мы сузили область поиска как минимум на &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; её размера. &lt;br /&gt;
&lt;br /&gt;
Будем повторять эту процедуру до тех пор, пока не останется не более &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;x=min(w_i), w_i&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Иначе, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
&lt;br /&gt;
Оценим время работы нашего алгоритма. После &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; итераций у нас останется не более &amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k&amp;lt;/tex&amp;gt; строк. Оценим &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k \simeq 1&amp;lt;/tex&amp;gt;. Отсюда &amp;lt;tex&amp;gt;k=O(rn)&amp;lt;/tex&amp;gt; (это можно получить, выразив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма). &lt;br /&gt;
&lt;br /&gt;
Таким образом, мы можем разрешить язык &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt; за полиномиальное время, найдя лексикографически минимальную строку, удовлетворяющую формуле, и сравнив её с нашим аргументом. Так как &amp;lt;tex&amp;gt;\mathrm{LSAT}\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, то мы можем решить любую задачу из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; за полиномиальное время, а значит &amp;lt;tex&amp;gt;\mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
*[[Теорема Бермана — Форчуна]]&lt;br /&gt;
&lt;br /&gt;
== Литература и источники информации ==&lt;br /&gt;
* [http://blog.computationalcomplexity.org/2011/09/mahaneys-theorem.html Блог Computational Complexity]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23992</id>
		<title>Интерактивные протоколы. Класс IP. Класс AM</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23992"/>
				<updated>2012-06-04T22:19:05Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Язык GNI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;b&amp;gt;Интерактивным протоколом&amp;lt;/b&amp;gt;, разрешающим язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, называется абстрактная машина (см. рисунок), моделирующая вычисления как обмен сообщениями между двумя программами (&amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;), такими, что&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; решил, что слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; заинтересован установить, действительно ли слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; — [[Вероятностные вычисления. Вероятностная машина Тьюринга|вероятностная машина Тьюринга]];&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; ограничен полиномиальным временем работы.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:IPS.png|250px|thumb|right|Схема интерактивного протокола.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;, обменивающийся сообщениями с &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;, будем обозначать &amp;lt;tex&amp;gt;\mathit{Verifier^{Prover}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Интерактивные протоколы делятся на два типа в зависимости от доступа &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;b&amp;gt; public coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;b&amp;gt; private coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; &amp;lt;b&amp;gt;не&amp;lt;/b&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{IP}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не имеет доступа к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (private coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{IP}=\bigcup\limits_{p(n) \in poly} \mathrm{IP} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;\mathrm{AM}&amp;lt;/tex&amp;gt; (&amp;lt;i&amp;gt;Arthur–Merlin games&amp;lt;/i&amp;gt;) отличается от &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt; лишь тем, что &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AM}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может читать вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (public coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\} &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{AM}=\bigcup\limits_{p(n) \in poly} \mathrm{AM} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 1 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; completeness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 0 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; soundness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}} &lt;br /&gt;
Свойство completeness можно достичь, а soundness достичь нельзя.&lt;br /&gt;
&lt;br /&gt;
== Соотношения с другими классами теории сложности ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{IP}[0]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; сам по себе является вероятностной машиной Тьюринга и поэтому может разрешить язык из &amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; не прибегая к общению с &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NP} \subset \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для разрешения языка из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; будем использовать следующий протокол:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; будет проверять на принадлежность слова &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; используя сертификат, который он запросит у &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности, он может подобрать подходящий сертификат и именно его и сообщит, так как он заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; принял слово. Для этого требуется лишь один раунд интерактивного протокола.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Язык GNI ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}&amp;lt;/tex&amp;gt; расшифровывается как Graph Non Isomorphism. Это язык пар неизоморфных друг другу графов.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}=\{ \langle G, H \rangle, &amp;lt;/tex&amp;gt; графы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; не изоморфны &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{GNI} \in \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Будем использовать следующий алгоритм для &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# Возьмём случайное число &amp;lt;tex&amp;gt;i \in \{0, 1\}&amp;lt;/tex&amp;gt; и случайную перестановку &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; с вероятностной ленты; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Создадим новый граф, перемешав вершины графа c номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; перестановкой &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Перешлём &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; полученный граф с просьбой определить, из какого из исходных графов он был получен; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Получив ответ, сравним его с правильным ответом — числом &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если полученный ответ не совпадёт с &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Иначе повторим первые пять шагов ещё раз и перейдём к последнему шагу; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если мы ещё не вернули &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Покажем, что это удовлетворяет ограничениям на &amp;lt;tex&amp;gt;\mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Во-первых, очевидно, что число раундов не превосходит двух. &amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим теперь случаи&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \in \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; неизоморфны и &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; сможет два раза подряд вернуть правильный ответ и в итоге &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; вернёт 1.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \notin \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изоморфны и &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; принял слово, ему необходимо угадать правильный ответ (иначе &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; просто вернёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;). Вероятность того, что &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; примет слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, когда оно не принадлежит языку (то есть &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; два раза подряд верно угадает номер графа), равна &amp;lt;tex&amp;gt;\frac{1}{4}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, построенный протокол удовлетворяет условию теоремы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23985</id>
		<title>Интерактивные протоколы. Класс IP. Класс AM</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23985"/>
				<updated>2012-06-04T22:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Соотношения с другими классами теории сложности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;b&amp;gt;Интерактивным протоколом&amp;lt;/b&amp;gt;, разрешающим язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, называется абстрактная машина (см. рисунок), моделирующая вычисления как обмен сообщениями между двумя программами (&amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;), такими, что&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; решил, что слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; заинтересован установить, действительно ли слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; — [[Вероятностные вычисления. Вероятностная машина Тьюринга|вероятностная машина Тьюринга]];&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; ограничен полиномиальным временем работы.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:IPS.png|250px|thumb|right|Схема интерактивного протокола.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;, обменивающийся сообщениями с &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;, будем обозначать &amp;lt;tex&amp;gt;\mathit{Verifier^{Prover}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Интерактивные протоколы делятся на два типа в зависимости от доступа &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;b&amp;gt; public coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;b&amp;gt; private coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; &amp;lt;b&amp;gt;не&amp;lt;/b&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{IP}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не имеет доступа к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (private coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{IP}=\bigcup\limits_{p(n) \in poly} \mathrm{IP} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;\mathrm{AM}&amp;lt;/tex&amp;gt; (&amp;lt;i&amp;gt;Arthur–Merlin games&amp;lt;/i&amp;gt;) отличается от &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt; лишь тем, что &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AM}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может читать вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (public coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\} &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{AM}=\bigcup\limits_{p(n) \in poly} \mathrm{AM} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 1 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; completeness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 0 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; soundness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}} &lt;br /&gt;
Свойство completeness можно достичь, а soundness достичь нельзя.&lt;br /&gt;
&lt;br /&gt;
== Соотношения с другими классами теории сложности ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{IP}[0]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; сам по себе является вероятностной машиной Тьюринга и поэтому может разрешить язык из &amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; не прибегая к общению с &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NP} \subset \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для разрешения языка из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; будем использовать следующий протокол:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; будет проверять на принадлежность слова &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; используя сертификат, который он запросит у &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности, он может подобрать подходящий сертификат и именно его и сообщит, так как он заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; принял слово. Для этого требуется лишь один раунд интерактивного протокола.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Язык GNI ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}&amp;lt;/tex&amp;gt; расшифровывается как Graph Non Isomorphism. Это язык пар неизоморфных друг другу графов.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}=\{ \langle G, H \rangle, &amp;lt;/tex&amp;gt; графы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; не изоморфны &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{GNI} \in \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Будем использовать следующий алгоритм для &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# Возьмём случайное число &amp;lt;tex&amp;gt;i \in \{0, 1\}&amp;lt;/tex&amp;gt; и случайную перестановку &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; с вероятностной ленты; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Создадим новый граф, перемешав вершины графа c номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; перестановкой &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Перешлём &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; полученный граф с просьбой определить, из какого из исходных графов он был получен; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Получив ответ, сравним его с правильным ответом — числом &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если полученный ответ не совпадёт с &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Иначе повторим первые пять шагов ещё раз и перейдём к последнему шагу; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если мы ещё не вернули &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Покажем, что это удовлетворяет ограничениям на &amp;lt;tex&amp;gt;\mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Во-первых, очевидно, что число раундов не превосходит двух. &amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим теперь случаи&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \in \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; неизоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет два раза подряд вернуть правильный ответ и в итоге &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; вернёт 1.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \notin \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово, ему необходимо угадать правильный ответ (иначе &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; просто вернёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;). Вероятность того, что &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; примет слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, когда оно не принадлежит языку (то есть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; два раза подряд верно угадает номер графа), равна &amp;lt;tex&amp;gt;\frac{1}{4}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, построенный протокол удовлетворяет условию теоремы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23982</id>
		<title>Интерактивные протоколы. Класс IP. Класс AM</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23982"/>
				<updated>2012-06-04T22:08:35Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Определения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;b&amp;gt;Интерактивным протоколом&amp;lt;/b&amp;gt;, разрешающим язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, называется абстрактная машина (см. рисунок), моделирующая вычисления как обмен сообщениями между двумя программами (&amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;), такими, что&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; решил, что слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; заинтересован установить, действительно ли слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; — [[Вероятностные вычисления. Вероятностная машина Тьюринга|вероятностная машина Тьюринга]];&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; ограничен полиномиальным временем работы.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:IPS.png|250px|thumb|right|Схема интерактивного протокола.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;, обменивающийся сообщениями с &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;, будем обозначать &amp;lt;tex&amp;gt;\mathit{Verifier^{Prover}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Интерактивные протоколы делятся на два типа в зависимости от доступа &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;b&amp;gt; public coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;b&amp;gt; private coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; &amp;lt;b&amp;gt;не&amp;lt;/b&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{IP}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не имеет доступа к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (private coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{IP}=\bigcup\limits_{p(n) \in poly} \mathrm{IP} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;\mathrm{AM}&amp;lt;/tex&amp;gt; (&amp;lt;i&amp;gt;Arthur–Merlin games&amp;lt;/i&amp;gt;) отличается от &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt; лишь тем, что &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AM}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может читать вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (public coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\} &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{AM}=\bigcup\limits_{p(n) \in poly} \mathrm{AM} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 1 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; completeness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 0 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; soundness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}} &lt;br /&gt;
Свойство completeness можно достичь, а soundness достичь нельзя.&lt;br /&gt;
&lt;br /&gt;
== Соотношения с другими классами теории сложности ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{IP}[0]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; сам по себе является вероятностной машиной Тьюринга и поэтому может разрешить язык из &amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; не прибегая к общению с &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NP} \subset \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для разрешения языка из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; будем использовать следующий протокол:&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; будет проверять на принадлежность слова &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; используя сертификат, который он запросит у &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности, он может подобрать подходящий сертификат и именно его и сообщит, так как он заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово. Для этого требуется лишь один раунд интерактивного протокола.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Язык GNI ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}&amp;lt;/tex&amp;gt; расшифровывается как Graph Non Isomorphism. Это язык пар неизоморфных друг другу графов.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}=\{ \langle G, H \rangle, &amp;lt;/tex&amp;gt; графы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; не изоморфны &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{GNI} \in \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Будем использовать следующий алгоритм для &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# Возьмём случайное число &amp;lt;tex&amp;gt;i \in \{0, 1\}&amp;lt;/tex&amp;gt; и случайную перестановку &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; с вероятностной ленты; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Создадим новый граф, перемешав вершины графа c номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; перестановкой &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Перешлём &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; полученный граф с просьбой определить, из какого из исходных графов он был получен; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Получив ответ, сравним его с правильным ответом — числом &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если полученный ответ не совпадёт с &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Иначе повторим первые пять шагов ещё раз и перейдём к последнему шагу; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если мы ещё не вернули &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Покажем, что это удовлетворяет ограничениям на &amp;lt;tex&amp;gt;\mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Во-первых, очевидно, что число раундов не превосходит двух. &amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим теперь случаи&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \in \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; неизоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет два раза подряд вернуть правильный ответ и в итоге &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; вернёт 1.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \notin \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово, ему необходимо угадать правильный ответ (иначе &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; просто вернёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;). Вероятность того, что &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; примет слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, когда оно не принадлежит языку (то есть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; два раза подряд верно угадает номер графа), равна &amp;lt;tex&amp;gt;\frac{1}{4}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, построенный протокол удовлетворяет условию теоремы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23981</id>
		<title>Интерактивные протоколы. Класс IP. Класс AM</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23981"/>
				<updated>2012-06-04T22:08:19Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: Отмена правки 23980 участника Байдаров Андрей (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;b&amp;gt;Интерактивным протоколом&amp;lt;/b&amp;gt;, разрешающим язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, называется абстрактная машина (см. рисунок), моделирующая вычисления как обмен сообщениями между двумя программами (Prover и Verifier, далее &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; соответственно), такими, что&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; решил, что слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности;&lt;br /&gt;
# &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; заинтересован установить, действительно ли слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; — [[Вероятностные вычисления. Вероятностная машина Тьюринга|вероятностная машина Тьюринга]];&lt;br /&gt;
# &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; ограничен полиномиальным временем работы.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:IPS.png|250px|thumb|right|Схема интерактивного протокола.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;, обменивающийся сообщениями с &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, будем обозначать &amp;lt;tex&amp;gt;V^{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Интерактивные протоколы делятся на два типа в зависимости от доступа &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; к вероятностной ленте &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;b&amp;gt; public coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;b&amp;gt; private coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; &amp;lt;b&amp;gt;не&amp;lt;/b&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{IP}[f] = \{L\bigm|\exists \langle V, P \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не имеет доступа к вероятностной ленте &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; (private coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(V^{P}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(V^{P}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{IP}=\bigcup\limits_{p(n) \in poly} \mathrm{IP} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;\mathrm{AM}&amp;lt;/tex&amp;gt; (&amp;lt;i&amp;gt;Arthur–Merlin games&amp;lt;/i&amp;gt;) отличается от &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt; лишь тем, что &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AM}[f] = \{L\bigm|\exists \langle V, P \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; может читать вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; (public coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(V^{P}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(V^{P}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\} &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{AM}=\bigcup\limits_{p(n) \in poly} \mathrm{AM} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(V^{P}(x) = 1) = 1 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; completeness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(V^{P}(x) = 1) = 0 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; soundness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}} &lt;br /&gt;
Свойство completeness можно достичь, а soundness достичь нельзя.&lt;br /&gt;
&lt;br /&gt;
== Соотношения с другими классами теории сложности ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{IP}[0]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; сам по себе является вероятностной машиной Тьюринга и поэтому может разрешить язык из &amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; не прибегая к общению с &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NP} \subset \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для разрешения языка из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; будем использовать следующий протокол:&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; будет проверять на принадлежность слова &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; используя сертификат, который он запросит у &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности, он может подобрать подходящий сертификат и именно его и сообщит, так как он заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово. Для этого требуется лишь один раунд интерактивного протокола.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Язык GNI ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}&amp;lt;/tex&amp;gt; расшифровывается как Graph Non Isomorphism. Это язык пар неизоморфных друг другу графов.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{GNI}=\{ \langle G, H \rangle, &amp;lt;/tex&amp;gt; графы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; не изоморфны &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{GNI} \in \mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Будем использовать следующий алгоритм для &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# Возьмём случайное число &amp;lt;tex&amp;gt;i \in \{0, 1\}&amp;lt;/tex&amp;gt; и случайную перестановку &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; с вероятностной ленты; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Создадим новый граф, перемешав вершины графа c номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; перестановкой &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Перешлём &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; полученный граф с просьбой определить, из какого из исходных графов он был получен; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Получив ответ, сравним его с правильным ответом — числом &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если полученный ответ не совпадёт с &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Иначе повторим первые пять шагов ещё раз и перейдём к последнему шагу; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если мы ещё не вернули &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Покажем, что это удовлетворяет ограничениям на &amp;lt;tex&amp;gt;\mathrm{IP}[1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Во-первых, очевидно, что число раундов не превосходит двух. &amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим теперь случаи&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \in \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; неизоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет два раза подряд вернуть правильный ответ и в итоге &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; вернёт 1.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \notin \mathrm{GNI}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово, ему необходимо угадать правильный ответ (иначе &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; просто вернёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;). Вероятность того, что &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; примет слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, когда оно не принадлежит языку (то есть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; два раза подряд верно угадает номер графа), равна &amp;lt;tex&amp;gt;\frac{1}{4}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, построенный протокол удовлетворяет условию теоремы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23980</id>
		<title>Интерактивные протоколы. Класс IP. Класс AM</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23980"/>
				<updated>2012-06-04T22:07:11Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;b&amp;gt;Интерактивным протоколом&amp;lt;/b&amp;gt;, разрешающим язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, называется абстрактная машина (см. рисунок), моделирующая вычисления как обмен сообщениями между двумя программами (&amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;), такими, что&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; решил, что слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; заинтересован установить, действительно ли слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; — [[Вероятностные вычисления. Вероятностная машина Тьюринга|вероятностная машина Тьюринга]];&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; ограничен полиномиальным временем работы.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:IPS.png|250px|thumb|right|Схема интерактивного протокола.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;, обменивающийся сообщениями с &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;, будем обозначать &amp;lt;tex&amp;gt;\mathit{Verifier^{Prover}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Интерактивные протоколы делятся на два типа в зависимости от доступа &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;b&amp;gt; public coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;b&amp;gt; private coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; &amp;lt;b&amp;gt;не&amp;lt;/b&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{IP}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не имеет доступа к вероятностной ленте &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (private coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{IP}=\bigcup\limits_{p(n) \in poly} \mathrm{IP} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;\mathrm{AM}&amp;lt;/tex&amp;gt; (&amp;lt;i&amp;gt;Arthur–Merlin games&amp;lt;/i&amp;gt;) отличается от &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt; лишь тем, что &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AM}[f] = \{L\bigm|\exists \langle \mathit{Verifier}, \mathit{Prover} \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может читать вероятностную ленту &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; (public coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x|\} &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &amp;lt;tex&amp;gt;\mathrm{AM}=\bigcup\limits_{p(n) \in poly} \mathrm{AM} [p(n)] &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 1 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; completeness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(\mathit{Verifier^{Prover}}(x) = 1) = 0 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; soundness &amp;lt;/b&amp;gt;.&lt;br /&gt;
}} &lt;br /&gt;
Свойство completeness можно достичь, а soundness достичь нельзя.&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23979</id>
		<title>Теорема о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23979"/>
				<updated>2012-06-04T21:48:24Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;'а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; 'а прислать &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; 'а прислать &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим программу &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; прислать &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt;'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \mathrm{\#SAT} \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \mathrm{\#SAT} \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; вернул '''true''', &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; может посылать правильные &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; полученным от &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; значение с непосредственно вычисленным, слово будет допущено только в том случае, когда &amp;lt;tex&amp;gt;\mathit{Prover}&amp;lt;/tex&amp;gt; смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:Вычислим вероятность того, что хотя бы раз корень был угадан.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:В последнем переходе мы воспользовались [http://ru.wikipedia.org/wiki/Ряд_Тейлора формулой Тейлора] для логарифма и экспоненты, а также тем, что &amp;lt;tex&amp;gt;m&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами &amp;lt;tex&amp;gt;\mathit{Verifier}&amp;lt;/tex&amp;gt; корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23966</id>
		<title>Теорема о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23966"/>
				<updated>2012-06-04T21:23:47Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: Новая страница: «{{Определение |definition= &amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетво...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \mathrm{\#SAT} \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \mathrm{\#SAT} \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать правильные &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге ''Verifier'' полученным от ''Prover'' значение с непосредственно вычисленным, слово будет допущено только в том случае, когда ''Prover'' смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:Вычислим вероятность того, что хотя бы раз корень был угадан.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:В последнем переходе мы воспользовались [http://ru.wikipedia.org/wiki/Ряд_Тейлора формулой Тейлора] для логарифма и экспоненты, а также тем, что &amp;lt;tex&amp;gt;m&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23963</id>
		<title>Теория сложности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23963"/>
				<updated>2012-06-04T21:21:15Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Интерактивные протоколы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;br /&gt;
&lt;br /&gt;
== Детерминированные и недетерминированные вычисления, сложность по времени и по памяти ==&lt;br /&gt;
*[[Сложностные классы. Вычисления с оракулом]]&lt;br /&gt;
&lt;br /&gt;
=== Классы P и NP, NP-полнота ===&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Недетерминированные вычисления]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
*[[Примеры NP-полных языков. Теорема Кука]]&lt;br /&gt;
*[[Теоремы о временной и емкостной иерархиях]]&lt;br /&gt;
*[[Теорема Бейкера — Гилла — Соловэя]]&lt;br /&gt;
*[[Теорема Ладнера]]&lt;br /&gt;
*[[Теорема Левина]]&lt;br /&gt;
*[[Теорема Бермана — Форчуна]]&lt;br /&gt;
*[[Теорема Махэни]]&lt;br /&gt;
&lt;br /&gt;
=== Сложность по памяти, классы PS, L, NL, coNL ===&lt;br /&gt;
*[[Класс PS. Связь класса PS с другими классами теории сложности]]&lt;br /&gt;
*[[Теорема Сэвича. Совпадение классов NPS и PS]]&lt;br /&gt;
*[[PS-полнота языка верных булевых формул с кванторами (TQBF)]]&lt;br /&gt;
*[[Классы L, NL, coNL]]&lt;br /&gt;
*[[NL-полнота задачи о достижимости]]&lt;br /&gt;
*[[Теорема Иммермана]]&lt;br /&gt;
&lt;br /&gt;
=== Полиномиальная иерархия ===&lt;br /&gt;
*[[Классы PH, Σ и Π]]&lt;br /&gt;
*[[Теоремы о коллапсе полиномиальной иерархии]]&lt;br /&gt;
&lt;br /&gt;
== Схемная сложность ==&lt;br /&gt;
*[[Схемная сложность и класс P/poly]]&lt;br /&gt;
*[[Теорема Карпа — Липтона]]&lt;br /&gt;
*[[Классы NC и AC]]&lt;br /&gt;
*[[Теорема о непринадлежности XOR классу AC⁰]]&lt;br /&gt;
&lt;br /&gt;
== Вероятностные сложностные классы ==&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы RP и coRP]]&lt;br /&gt;
*[[Класс ZPP]]&lt;br /&gt;
*[[Классы BPP и PP]]&lt;br /&gt;
*[[Соотношение вероятностных классов]]&lt;br /&gt;
*[[Теорема Лаутемана]]&lt;br /&gt;
&lt;br /&gt;
=== Интерактивные протоколы ===&lt;br /&gt;
*[[Интерактивные протоколы. Класс IP. Класс AM]]&lt;br /&gt;
*[[Связь классов IP и AM друг с другом и с другими классами языков]]&lt;br /&gt;
*[[Арифметизация булевых формул с кванторами]]&lt;br /&gt;
*[[Теорема о соотношении coNP и IP]]&lt;br /&gt;
*[[Теорема Шамира]]&lt;br /&gt;
*[[Семейство универсальных попарно независимых хеш-функций]]&lt;br /&gt;
*[[Протокол Голдвассера-Сипсера для оценки размера множества]]&lt;br /&gt;
&lt;br /&gt;
=== Probabilistically checkable proofs ===&lt;br /&gt;
*[[PCP-система]]&lt;br /&gt;
*[[PCP-теорема]]&lt;br /&gt;
*[[PCP-теорема, альтернативное доказательство | PCP-теорема, альтернативная формулировка]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Теория сложности (старая трешовая версия)|Вот сюда]] можно подсматривать, но злоупотреблять не рекомендуется.&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=23817</id>
		<title>Теорема Махэни</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=23817"/>
				<updated>2012-06-04T16:30:20Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{LSAT}=\{\langle\phi,y\rangle \bigm| \exists x: x\le_{lex}y, \phi(x) = 1\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
#Очевидно, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt; (в качестве сертификата можно запросить &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;).&lt;br /&gt;
#Сведём &amp;lt;tex&amp;gt;\mathrm{SAT}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt;. Для этого рассмотрим отображение &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 1^{|\phi|}\rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|\phi|&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное. &lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\phi \in \mathrm{SAT}&amp;lt;/tex&amp;gt;, то формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, а значит &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, и &amp;lt;tex&amp;gt;\phi \in \mathrm{SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Таким образом, &amp;lt;tex&amp;gt;\mathrm{SAT} \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;\mathrm{SAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le \mathrm{SAT}&amp;lt;/tex&amp;gt;. Тогда в силу транзитивности &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Итого мы доказали, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;. Тогда по определению &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}, y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\exists x: x\le_{lex}y, \phi(x) = 1&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x&amp;lt;_{lex}z, \phi(x) = 1&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Махэни&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Пусть &amp;lt;tex&amp;gt;S \in \mathrm{NPC} \cap \mathrm{SPARSE}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;S\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует полиномиальная функция сведения &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;\langle \phi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \phi, y \rangle) \in S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; работает полиномиальное время, и &amp;lt;tex&amp;gt;|\phi|=|y|&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;|y|&amp;lt;/tex&amp;gt; — длина вектора &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;), то &amp;lt;tex&amp;gt;f(\langle\phi,y\rangle) \le q(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&amp;lt;tex&amp;gt;S\in \mathrm{SPARSE}&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\forall n \; |S \cap \Sigma^n|\le p(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;|\{x\in S \bigm| |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — также полином.&lt;br /&gt;
&lt;br /&gt;
Опишем алгоритм для нахождения лексикографически минимальной строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, удовлетворяющей формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;n=|\phi|, r=r(|\phi|)&amp;lt;/tex&amp;gt;. Изначально область поиска для &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; — все строки длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Опишем одну итерацию поиска.&lt;br /&gt;
&lt;br /&gt;
Разобьём текущее множество строк на &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; подотрезок примерно равной длины. Обозначим концы полученных подотрезков &amp;lt;tex&amp;gt;w_0,...,w_{r+1}&amp;lt;/tex&amp;gt;. Пусть теперь &amp;lt;tex&amp;gt;z_i=f(\langle\phi,w_i\rangle)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Из леммы (2) мы знаем, что, начиная с некоторого &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;, все пары &amp;lt;tex&amp;gt;\langle\phi, w_l\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда по сведению &amp;lt;tex&amp;gt;z_j \in S&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j\ge l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;\exists i \ne j : z_i=z_j&amp;lt;/tex&amp;gt;. Строки &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt; либо обе лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, либо обе не лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда по вышеуказанной причине &amp;lt;tex&amp;gt;x\notin (w_i, w_j]&amp;lt;/tex&amp;gt;. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; часть множества подстановок.&lt;br /&gt;
# &amp;lt;tex&amp;gt;z_i \ne z_j \, \forall i \ne j&amp;lt;/tex&amp;gt;. Как было показано выше, если &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;z_1&amp;lt;/tex&amp;gt; лежит в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то все последующие &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; тоже лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, но тогда &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; содержит &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строку длины не более, чем &amp;lt;tex&amp;gt;q(|\phi|)&amp;lt;/tex&amp;gt;, что противоречит условию &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le r(|\phi|)&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x\notin[w_0,w_1]&amp;lt;/tex&amp;gt;, то есть его можно убрать из рассмотрения.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях мы сузили область поиска как минимум на &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; её размера. &lt;br /&gt;
&lt;br /&gt;
Будем повторять эту процедуру до тех пор, пока не останется не более &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;x=min(w_i), w_i&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Иначе, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
&lt;br /&gt;
Оценим время работы нашего алгоритма. После &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; итераций у нас останется не более &amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k&amp;lt;/tex&amp;gt; строк. Оценим &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k \simeq 1&amp;lt;/tex&amp;gt;. Отсюда &amp;lt;tex&amp;gt;k=O(rn)&amp;lt;/tex&amp;gt; (это можно получить, выразив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма). &lt;br /&gt;
&lt;br /&gt;
Таким образом, мы можем разрешить язык &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt; за полиномиальное время, найдя лексикографически минимальную строку, удовлетворяющую формуле, и сравнив её с нашим аргументом. Так как &amp;lt;tex&amp;gt;\mathrm{LSAT}\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, то мы можем решить любую задачу из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; за полиномиальное время, а значит &amp;lt;tex&amp;gt;\mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Классы NP и Σ₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
*[[Теорема Бермана — Форчуна]]&lt;br /&gt;
&lt;br /&gt;
== Литература и источники информации ==&lt;br /&gt;
* [http://blog.computationalcomplexity.org/2011/09/mahaneys-theorem.html Блог Computational Complexity]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23752</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23752"/>
				<updated>2012-06-04T13:55:42Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \mathrm{\#SAT} \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \mathrm{\#SAT} \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать правильные &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге ''Verifier'' полученным от ''Prover'' значение с непосредственно вычисленным, слово будет допущено только в том случае, когда ''Prover'' смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:Вычислим вероятность того, что хотя бы раз корень был угадан.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:В последнем переходе мы воспользовались [http://ru.wikipedia.org/wiki/Ряд_Тейлора формулой Тейлора] для логарифма и экспоненты, а также тем, что &amp;lt;tex&amp;gt;m&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23739</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23739"/>
				<updated>2012-06-04T13:46:36Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \mathrm{\#SAT} \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \mathrm{\#SAT} \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать правильные &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге ''Verifier'' полученным от ''Prover'' значение с непосредственно вычисленным, слово будет допущено только в том случае, когда ''Prover'' смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:Вычислим вероятность того, что хотя бы раз корень был угадан.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
В последнем переходе мы воспользовались [http://ru.wikipedia.org/wiki/Ряд_Тейлора формулой Тейлора] для логарифма и экспоненты, а также тем, что &amp;lt;tex&amp;gt;m&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23722</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23722"/>
				<updated>2012-06-04T13:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге ''Verifier'' сверяет истинное значение с полученным от ''Prover'', слово будет допущено только в том случае, когда ''Prover'' смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:Посчитаем вероятность того, что ''Verifier'' хотя бы раз угадал корень.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23719</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23719"/>
				<updated>2012-06-04T13:23:47Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге ''Verifier'' сверяет истинное значение с полученным от ''Prover'', слово будет допущено только в том случае, когда ''Prover'' смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23716</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23716"/>
				<updated>2012-06-04T13:23:05Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Так как на последнем шаге ''Verifier'' сверяет истинное значение с полученным от ''Prover'', слово будет допущено только в том случае, когда ''Prover'' смог прислать верное значение, что в свою очередь возможно лишь если на одном из предыдущих шагов был верно угадан корень полинома.&lt;br /&gt;
:&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m = 1 - (1 - \frac 1 {3m})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23708</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23708"/>
				<updated>2012-06-04T13:09:37Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(0..p-1)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Допустим до шага &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; мы ни разу не угадали корень &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;, то есть ''Prover'' каждый обманывал ''Verifier''. Так как на последнем шаге сверяем истинное значение с присланным ''Prover'' 'ом, то ''Verifier'' не допустит слово. Значит ''Verifier'' могу допустить слово только если на каком-то шаге был угадан корень.&lt;br /&gt;
:&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le \frac d p \sum \limits_{i=0}^{m-1} (1 - \frac d p)^i = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m = 1 - (1 - \frac 1 {3m})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23707</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23707"/>
				<updated>2012-06-04T13:07:09Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;\mathrm{Primes} \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; — полином степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, от одной переменной, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall \mathit{Prover} : P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, поскольку в этом случае не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг i'''&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вероятность того, что &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; — корень полинома &amp;lt;tex&amp;gt;(A_{i-1} - \tilde{A}_{i-1})(r_i)&amp;lt;/tex&amp;gt;, имеющего степень не больше &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, не превосходит &amp;lt;tex&amp;gt;\frac{d}{p}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
:Допустим до шага &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; мы ни разу не угадали корень &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;, то есть ''Prover'' каждый обманывал ''Verifier''. Так как на последнем шаге сверяем истинное значение с присланным ''Prover'' 'ом, то ''Verifier'' не допустит слово. Значит ''Verifier'' могу допустить слово только если на каком-то шаге был угадан корень.&lt;br /&gt;
:&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\mathit{Verifier^{Prover}}(\langle \varphi, k \rangle)=1) \le \frac d p \sum \limits_{i=0}^{m-1} (1 - \frac d p)^i = 1 - (1 - \frac d p)^m \le 1 - (1 - \frac d {3dm})^m = 1 - (1 - \frac 1 {3m})^m \le \frac 1 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23677</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23677"/>
				<updated>2012-06-04T11:42:13Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \mathrm{\#SAT} \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \mathrm{\#SAT} \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PCP-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0&amp;diff=23671</id>
		<title>PCP-система</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PCP-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0&amp;diff=23671"/>
				<updated>2012-06-04T11:03:25Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Определения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Теория сложности]]&lt;br /&gt;
'''PCP(probabilistically checkable proof)''' - вид доказательства, проверяемого рандомизированным алгоритмом, использующим ограниченное число случайных бит и читающим ограниченное число бит доказательства. Такой алгоритм должен с достаточно высокими вероятностями принимать корректные доказательства и отвергать ошибочные.&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{PCP}&amp;lt;/tex&amp;gt;'''-системой''' (системой вероятностно проверяемых доказательств) с полнотой &amp;lt;tex&amp;gt;c(n)&amp;lt;/tex&amp;gt; и обоснованностью &amp;lt;tex&amp;gt;s(n)&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;0 \le s(n) \le c(n) \le 1&amp;lt;/tex&amp;gt;, называется &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; {{---}} [[Вероятностные вычисления. Вероятностная машина Тьюринга#Основные определения|вероятностная машина Тьюринга]], имеющая доступ к доказательству &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; {{---}} цепочке из &amp;lt;tex&amp;gt;\Sigma^{*}&amp;lt;/tex&amp;gt;, удовлетворяющая следующим свойствам:&lt;br /&gt;
* '''Полнота''': если &amp;lt;tex&amp;gt;x \in L&amp;lt;/tex&amp;gt;, то вероятность того, что &amp;lt;tex&amp;gt;V^{\pi}&amp;lt;/tex&amp;gt; допустит &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, не меньше &amp;lt;tex&amp;gt;c(n)&amp;lt;/tex&amp;gt; для некоторого &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* '''Обоснованность''': если &amp;lt;tex&amp;gt;x \notin L&amp;lt;/tex&amp;gt;, то вероятность того, что &amp;lt;tex&amp;gt;V^{\pi}&amp;lt;/tex&amp;gt; допустит &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, не больше &amp;lt;tex&amp;gt;s(n)&amp;lt;/tex&amp;gt; для любого &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Randomness complexity''' (вероятностной сложностью) &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; верификатора &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется число случайных битов, используемых за всё время работы со входом длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Query complexity''' (запросной сложностью) &amp;lt;tex&amp;gt;q(n)&amp;lt;/tex&amp;gt; верификатора &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется число запросов битов из &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;, отсылаемых за всё время работы со входом длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Верификатор &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''non-adaptive''' (неадаптивным), если при отправке запроса не использует ответы на предыдущие. Иными словами, его работа не изменится, если все запросы отправить одновременно.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Сложностный класс &amp;lt;tex&amp;gt;\mathrm{PCP}_{c(n), s(n)}[r(n), q(n)]&amp;lt;/tex&amp;gt; {{---}} это объединение всех языков, для которых существует &amp;lt;tex&amp;gt;\mathrm{PCP}&amp;lt;/tex&amp;gt;-система над бинарным алфавитом с полнотой &amp;lt;tex&amp;gt;c(n)&amp;lt;/tex&amp;gt; и обоснованностью &amp;lt;tex&amp;gt;s(n)&amp;lt;/tex&amp;gt;, в которой неадаптивный верификатор &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; работает за полиномиальное время и имеет вероятностную и запросную сложности соответственно &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q(n)&amp;lt;/tex&amp;gt;, а доказательства имеют экспоненциальную длину.&amp;lt;br/&amp;gt;&lt;br /&gt;
Часто &amp;lt;tex&amp;gt;\mathrm{PCP}_{1, {}^1/{}_2}[r(n), q(n)]&amp;lt;/tex&amp;gt; обозначают как &amp;lt;tex&amp;gt;\mathrm{PCP}[r(n), q(n)]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;\mathrm{PCP}[0, 0]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{PCP}[O(log(n)), 0]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{PCP}[0, O(log(n))]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{PCP}[0, 0]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;: вероятностная МТ не использует случайные биты и не обращается к доказательству, то есть работает как детерминированная МТ, работающая за полиномиальное время.&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{PCP}[O(log(n)), 0]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;: доступ к &amp;lt;tex&amp;gt;O(log(n))&amp;lt;/tex&amp;gt; случайных бит не меняет ситуации, так как все возможные битовые цепочки логарифмической длины детерминированная МТ может сгенерировать и проверить за полиномиальное время.&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{PCP}[0, O(log(n))]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;: так как доступа к случайным битам нет, &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; можно рассматривать как битовую цепочку логарифмической длины. Все возможные такие цепочки детерминированная МТ может сгенерировать и проверить за полиномиальное время.&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;\mathrm{PCP}[poly(n), 0]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{coRP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Очевидно следует из [[Вероятностные вычисления. Вероятностная машина Тьюринга#Вероятностные сложностные классы|определения coRP]].&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;\mathrm{PCP}[0, poly(n)]&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Очевидно следует из [[Недетерминированные вычисления. Классы NP и Σ₁#Классы NP и Σ₁|определения Σ₁]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = '''Graph Nonisomorphism(GNI)''' &amp;lt;tex&amp;gt;\in \mathrm{PCP}[poly(n), O(1)]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} графы на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинах. Требуется проверить, неизоморфны ли они друг другу. &amp;lt;br/&amp;gt;&lt;br /&gt;
Сперва пронумеруем все возможные графы на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинах. Не умаляя общности, будем считать, что &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; над троичным алфавитом. &amp;lt;br/&amp;gt;&lt;br /&gt;
Будем считать корректной &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;:&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\pi[k] = 0&amp;lt;/tex&amp;gt; тогда и только тогда, когда граф номер &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; изоморфен &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\pi[k] = 1&amp;lt;/tex&amp;gt; тогда и только тогда, когда граф номер &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; изоморфен &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и неизоморфен &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\pi[k] = 2&amp;lt;/tex&amp;gt; тогда и только тогда, когда граф номер &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; неизоморфен &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и изоморфен &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Верификатором &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; будет вероятностная МТ, работающая эквивалентно следующему псевдокоду:&amp;lt;br/&amp;gt;&lt;br /&gt;
  p(&amp;lt;tex&amp;gt;\langle G_1, G_2 \rangle&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
    i = random{1, 2};&lt;br /&gt;
    &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; = random permutation{1..n};&lt;br /&gt;
    &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\phi(G_i)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
    if (&amp;lt;tex&amp;gt;\pi[\#H]&amp;lt;/tex&amp;gt; == 0) or (&amp;lt;tex&amp;gt;\pi[\#H]&amp;lt;/tex&amp;gt; == 3-i) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;lt;tex&amp;gt;\pi[\#H]&amp;lt;/tex&amp;gt; == i) {&lt;br /&gt;
      return 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
Проверим полноту и обоснованность:&lt;br /&gt;
* '''Полнота''': если графы неизоморфны, то существует &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; такая, что всякий её символ равен 1 или 2 и задан корректно. Тогда на этой &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; верификатор всегда вернёт 1;&lt;br /&gt;
* '''Обоснованность''': если графы изоморфны, то фиксируем &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt; {{---}} это множество всех конфигураций случайной ленты, с которой работает &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Заметим, что все конфигурации из &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt; будут переданы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; с равными вероятностями. Теперь рассмотрим произвольную конфигурацию типа &amp;lt;tex&amp;gt;\psi&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt;, то есть конфигурацию, на которой &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; допускает &amp;lt;tex&amp;gt;\langle G_1, G_2 \rangle&amp;lt;/tex&amp;gt;. Заметим, что для каждой такой конфигурации существует однозначно определяемая конфигурация типа &amp;lt;tex&amp;gt;\overline \psi&amp;lt;/tex&amp;gt;, отличающаяся от &amp;lt;tex&amp;gt;\psi&amp;lt;/tex&amp;gt; только первым битом и также принадлежащая &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt;. Запустившись на &amp;lt;tex&amp;gt;\overline \psi&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;, очевидно, отвергнет &amp;lt;tex&amp;gt;\langle G_1, G_2 \rangle&amp;lt;/tex&amp;gt;. Таким образом, конфигураций типа &amp;lt;tex&amp;gt;\psi&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt; не больше половины. Как уже отмечалось, конфигурации из &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt; подаются &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; с равными вероятностями, а конфигураций не из &amp;lt;tex&amp;gt;\Omega&amp;lt;/tex&amp;gt;, по определению, &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; не подаётся. Таким образом, вероятность ошибки не превышает &amp;lt;tex&amp;gt;{}^1/{}_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23668</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23668"/>
				<updated>2012-06-04T09:35:26Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;\mathrm{TQBF}&amp;lt;/tex&amp;gt; расшифровывается как '''True Quantified Boolean Formula'''. Это язык верных булевых формул с кванторами.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{TQBF} \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{TQBF} \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in \mathrm{TQBF}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Будем считать, что длина ленты машины &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — полином, а &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Конфигурация однозначно задаётся позицией и содержанием рабочей ленты. Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;. Тогда размер конфигурации равен &amp;lt;tex&amp;gt;\Omega r(n)&amp;lt;/tex&amp;gt;. Следовательно всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Под выражением &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; будем понимать &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, [\phi(A, R, t-1) \land \phi(R, B, t-1)]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega r(n)})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, r(n) , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, r(n), \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;\mathrm{TQBF} \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{TQBF} \in \mathrm{PSC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Доказательство непосредственно следует из лемм. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23642</id>
		<title>Классы L, NL, coNL. NL-полнота задачи о достижимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23642"/>
				<updated>2012-06-04T00:34:50Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Теорема Иммермана */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на детерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{L} = \mathrm{DSPACE}(\log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на недетерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NL} = \mathrm{NSPACE}(\log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{NL} \subset \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
#Детерминированная машина Тьюринга есть частный случай недетерминированной, поэтому &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Число конфигураций машины, использующей &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти не превышает &amp;lt;tex&amp;gt;2^{O(\log n)} = n^{O(1)} = poly(n)&amp;lt;/tex&amp;gt;, а, следовательно, машина завершает свою работу за &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; времени. Следовательно, &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==NL-полнота==&lt;br /&gt;
{{ Определение&lt;br /&gt;
|definition=Задача &amp;lt;tex&amp;gt;\mathrm{CONN} = \{\langle G, s, t \rangle \bigm|&amp;lt;/tex&amp;gt; в графе G есть путь из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt; {{---}} задача существования пути между двумя заданными вершинами в данном графе.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Задача существования пути между двумя заданными вершинами в данном графе NL-[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|полна относительно &amp;lt;tex&amp;gt;\mathrm{\widetilde{L}}&amp;lt;/tex&amp;gt;-сведения]].&lt;br /&gt;
| proof = &lt;br /&gt;
Докажем, что &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти, где &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; — размер входа, и за время порядка &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt; решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
&lt;br /&gt;
#Начиная с вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; недетерминированно переходим в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных).&lt;br /&gt;
#Проверяем, правда ли, что текущая вершина совпадает с &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Если это так, возвращает TRUE.&lt;br /&gt;
#Отдельно считаем количество пройденных вершин. Как только это число превышает количество вершин в графе, возвращаем FALSE, так как посетили некоторую вершину дважды.&lt;br /&gt;
&lt;br /&gt;
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Теперь докажем, что любая задача из класса &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; сводится к задаче &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; с использованием не более чем логарифмической памяти.&lt;br /&gt;
&lt;br /&gt;
Необходимо по данной задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; построить тройку &amp;lt;tex&amp;gt; \langle G, s, t \rangle &amp;lt;/tex&amp;gt;, решение задачи &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; для которой будет эквивалентно решению данной задачи.&lt;br /&gt;
&lt;br /&gt;
Любая машина Тьюринга, которая принимает некоторый язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, использует не более чем логарифмическое количество ячеек на рабочей ленте, и таким образом возможных мгновенных описаний этой машины Тьюринга &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга конечное число) {{---}} ребро в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. За вершину &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любого слова из языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то есть принимаемого данной машиной Тьюринга, будет существовать путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; в построенном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. А если для некоторого слова не из &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;, то он соответствует некоторой корректной последовательности переходов в изначальной машине, таким образом слово должно было приниматься этой недетерминированной машиной.&lt;br /&gt;
&lt;br /&gt;
Такое построение графа &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;, потому переменная, перебирающая его занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти), переходов из него и проверки возможности перехода.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Теорема Иммермана==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Задача несуществования пути между двумя заданными вершинами в данном графе &amp;lt;tex&amp;gt;\mathrm{NCONN} = \{\langle G, s, t \rangle \bigm|&amp;lt;/tex&amp;gt; в графе G нет пути из s в t&amp;lt;tex&amp;gt;\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
Очевидно, что язык &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; является дополнением языка &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Чтобы показать, что &amp;lt;tex&amp;gt;\mathrm{NCONN}\in \mathrm{NL}&amp;lt;/tex&amp;gt;, придумаем недетерминированый алгоритм, использующий &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, который проверяет, достижима ли вершина  &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; из  &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Определим &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; = {&amp;lt;tex&amp;gt;v \bigm|&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;\leq i&amp;lt;/tex&amp;gt;}.&lt;br /&gt;
Другими словами это множество всех вершин, достижимых из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; не более чем за &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
Введем обозначение &amp;lt;tex&amp;gt;r_i=|R_i|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;t \notin R_{n-1}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |V|&amp;lt;/tex&amp;gt;, то не существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\langle G, s, t \rangle \in \mathrm{NCONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; (то есть определять, существует ли путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; такой длины) и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти (это будет доказано ниже).&lt;br /&gt;
&lt;br /&gt;
Таким образом показано, что &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NLC}&amp;lt;/tex&amp;gt;, то аналогичным образом &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{coNLC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем, что любую задачу из &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt; можно свести к задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\mathrm{coNL} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из соображений симметрии  &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{coNL}&amp;lt;/tex&amp;gt;, а значит  &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
| statement = Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
| proof = &lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
  '''Enum'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; 0                 //количество уже найденных и выведенных элементов&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt; '''do'''               //перебираем все вершины графа&lt;br /&gt;
      '''continue''' or find path      //недетерминированно угадываем путь из s до v или переходим к следующей вершине&lt;br /&gt;
      &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt;++&lt;br /&gt;
      '''return''' &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;                   //выдаем вершину, до которой угадали путь&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;counter \geq r_i&amp;lt;/tex&amp;gt;)             //нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, допускаем, завершаем работу&lt;br /&gt;
      '''accept'''&lt;br /&gt;
    '''reject'''                       //не нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, не допускаем&lt;br /&gt;
    &lt;br /&gt;
'''Enum''' перебирает все вершины на логарифмической памяти и пытается угадать путь до этой вершины из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Под угадыванием пути подразумевается последовательность недетерминированных выборов следующей вершины пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для угадывания пути необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как необходимо лишь хранить текущую и следующую угадываемую вершины угадываемого пути. &lt;br /&gt;
'''Enum''' является недетерминированым алгоритмом, и если существует порядок его исполнения достигающий '''accept''', то происходит допуск.&lt;br /&gt;
&lt;br /&gt;
Теперь, имея '''Enum''', можно по индукции находить &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.               &lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt; содержит единственную вершину — &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть известно значение &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Напишем программу, которая на логарифмической памяти будет находить &amp;lt;tex&amp;gt;r_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''Next'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r = 1&amp;lt;/tex&amp;gt;                           //&amp;lt;tex&amp;gt;r_{i+1}&amp;lt;/tex&amp;gt; хотя бы один, так как &amp;lt;tex&amp;gt;s \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;v \ne s&amp;lt;/tex&amp;gt; '''do'''           //перебираем все вершины графа, кроме &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — это кандидаты на попадание в &amp;lt;tex&amp;gt;R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''for''' &amp;lt;tex&amp;gt;u : (u, v) \in E&amp;lt;/tex&amp;gt; '''do'''           //перебираем все ребра, входящие в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;&lt;br /&gt;
        '''if''' (&amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;))    //перечисляем все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; одна из них, то &amp;lt;tex&amp;gt;v \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;++                       //увеличиваем количество найденных вершин и переходим к рассмотрению следующего кандидата&lt;br /&gt;
          '''break''' &lt;br /&gt;
    '''return''' &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм изначально учитывает &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, а затем перебирает всех возможных кандидатов &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; на попадание в &amp;lt;tex&amp;gt;R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для каждого из них перебираются все ребра, в него входящие.&lt;br /&gt;
Затем перечисляются все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и, если начало нашего ребра было перечислено, то &amp;lt;tex&amp;gt;v \in R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так необходимо хранить лишь &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и еще поочередно значения полученные в результате вызова '''Enum'''.&lt;br /&gt;
&lt;br /&gt;
Теперь напишем алгоритм, который будет недетерминированно решать задачу &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; на логарифмической памяти.&lt;br /&gt;
Он будет состоять из двух частей: вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; и перечисление всех вершин из &amp;lt;tex&amp;gt;R_{n - 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; происходит путем вызова '''Next''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; раз, при этом каждый раз в качестве &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; подставляется новое полученное значение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''NCONN'''(&amp;lt;tex&amp;gt;G, s, t&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r_n = 1&amp;lt;/tex&amp;gt;                          //&amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;i = 0..n - 2&amp;lt;/tex&amp;gt; '''do'''               //вычисляем &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;r_n = &amp;lt;/tex&amp;gt; '''Next'''(&amp;lt;tex&amp;gt;s, i, r_n, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;t1&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, n - 1, r_n, G&amp;lt;/tex&amp;gt;))   //перечисляем вершины из &amp;lt;tex&amp;gt;R_{n-1}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; была перечислена, то &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; достижима и выдаем '''reject''', иначе '''accept'''&lt;br /&gt;
      '''reject'''&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''accept'''&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как для хранения &amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt;, и для вызываемых '''Next''' и '''Enum''' необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23628</id>
		<title>Классы L, NL, coNL. NL-полнота задачи о достижимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23628"/>
				<updated>2012-06-03T23:02:16Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* NL-полнота */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на детерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{L} = \mathrm{DSPACE}(\log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на недетерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NL} = \mathrm{NSPACE}(\log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{NL} \subset \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
#Детерминированная машина Тьюринга есть частный случай недетерминированной, поэтому &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Число конфигураций машины, использующей &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти не превышает &amp;lt;tex&amp;gt;2^{O(\log n)} = n^{O(1)} = poly(n)&amp;lt;/tex&amp;gt;, а, следовательно, машина завершает свою работу за &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; времени. Следовательно, &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==NL-полнота==&lt;br /&gt;
{{ Определение&lt;br /&gt;
|definition=Задача &amp;lt;tex&amp;gt;\mathrm{CONN} = \{\langle G, s, t \rangle \bigm|&amp;lt;/tex&amp;gt; в графе G есть путь из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt; {{---}} задача существования пути между двумя заданными вершинами в данном графе.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Задача существования пути между двумя заданными вершинами в данном графе NL-[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|полна относительно &amp;lt;tex&amp;gt;\mathrm{\widetilde{L}}&amp;lt;/tex&amp;gt;-сведения]].&lt;br /&gt;
| proof = &lt;br /&gt;
Докажем, что &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти, где &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; — размер входа, и за время порядка &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt; решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
&lt;br /&gt;
#Начиная с вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; недетерминированно переходим в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных).&lt;br /&gt;
#Проверяем, правда ли, что текущая вершина совпадает с &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Если это так, возвращает TRUE.&lt;br /&gt;
#Отдельно считаем количество пройденных вершин. Как только это число превышает количество вершин в графе, возвращаем FALSE, так как посетили некоторую вершину дважды.&lt;br /&gt;
&lt;br /&gt;
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Теперь докажем, что любая задача из класса &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; сводится к задаче &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; с использованием не более чем логарифмической памяти.&lt;br /&gt;
&lt;br /&gt;
Необходимо по данной задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; построить тройку &amp;lt;tex&amp;gt; \langle G, s, t \rangle &amp;lt;/tex&amp;gt;, решение задачи &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; для которой будет эквивалентно решению данной задачи.&lt;br /&gt;
&lt;br /&gt;
Любая машина Тьюринга, которая принимает некоторый язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, использует не более чем логарифмическое количество ячеек на рабочей ленте, и таким образом возможных мгновенных описаний этой машины Тьюринга &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга конечное число) {{---}} ребро в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. За вершину &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любого слова из языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то есть принимаемого данной машиной Тьюринга, будет существовать путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; в построенном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. А если для некоторого слова не из &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;, то он соответствует некоторой корректной последовательности переходов в изначальной машине, таким образом слово должно было приниматься этой недетерминированной машиной.&lt;br /&gt;
&lt;br /&gt;
Такое построение графа &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;, потому переменная, перебирающая его занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти), переходов из него и проверки возможности перехода.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Теорема Иммермана==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Задача несуществования пути между двумя заданными вершинами в данном графе &amp;lt;tex&amp;gt;\mathrm{NCONN} = \{\langle G, s, t \rangle \bigm|&amp;lt;/tex&amp;gt; в графе G нет пути из s в t&amp;lt;tex&amp;gt;\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
Очевидно, что язык &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; является дополнением языка &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Чтобы показать, что &amp;lt;tex&amp;gt;\mathrm{NCONN}\in \mathrm{NL}&amp;lt;/tex&amp;gt;, придумаем недетерминированый алгоритм, использующий &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, который проверяет, достижима ли вершина  &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; из  &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Определим &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; = {&amp;lt;tex&amp;gt;v \bigm|&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;\leq i&amp;lt;/tex&amp;gt;}.&lt;br /&gt;
Другими словами это множество всех вершин, достижимых из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; не более чем за &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
Введем обозначение &amp;lt;tex&amp;gt;r_i=|R_i|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;t \notin R_{n-1}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |V|&amp;lt;/tex&amp;gt;, то не существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\langle G, s, t \rangle \in \mathrm{NCONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; (то есть определять, существует ли путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; такой длины) и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти (это будет доказано ниже).&lt;br /&gt;
&lt;br /&gt;
Таким образом показано, что &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NLC}&amp;lt;/tex&amp;gt;, то аналогичным образом &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{coNLC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем, что любую задачу из &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt; можно свести к задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\mathrm{coNL} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из соображений симметрии  &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{coNL}&amp;lt;/tex&amp;gt;, а значит  &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
| statement = Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
| proof = &lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
  '''Enum'''(&amp;lt;tex&amp;gt;s, i, ri, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; 0                 //количество уже найденных и выведенных элементов&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt; '''do'''               //перебираем все вершины графа&lt;br /&gt;
      '''continue''' or find path      //недетерминированно угадываем путь из s до v или переходим к следующей вершине&lt;br /&gt;
      &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt;++&lt;br /&gt;
      '''return''' &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;                   //выдаем вершину, до которой угадали путь&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;counter \geq r_i&amp;lt;/tex&amp;gt;)             //нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, допускаем, завершаем работу&lt;br /&gt;
      '''accept'''&lt;br /&gt;
    '''reject'''                       //не нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, не допускаем&lt;br /&gt;
    &lt;br /&gt;
'''Enum''' перебирает все вершины на логарифмической памяти и пытается угадать путь до этой вершины из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Под угадыванием пути подразумевается последовательность недетерминированных выборов следующей вершины пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для угадывания пути необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как необходимо лишь хранить текущую и следующую угадываемую вершины угадываемого пути. &lt;br /&gt;
'''Enum''' является недетерминированым алгоритмом, и если существует порядок его исполнения достигающий '''accept''', то происходит допуск.&lt;br /&gt;
&lt;br /&gt;
Теперь, имея '''Enum''', можно по индукции находить &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.               &lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt; содержит единственную вершину — &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть известно значение &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Напишем программу, которая на логарифмической памяти будет находить &amp;lt;tex&amp;gt;r_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''Next'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r = 1&amp;lt;/tex&amp;gt;                           //&amp;lt;tex&amp;gt;r_{i+1}&amp;lt;/tex&amp;gt; хотя бы один, так как &amp;lt;tex&amp;gt;r \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;v \ne s&amp;lt;/tex&amp;gt; '''do'''           //перебираем все вершины графа, кроме &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — это кандидаты на попадание в &amp;lt;tex&amp;gt;R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''for''' &amp;lt;tex&amp;gt;u : (u, v) \in E&amp;lt;/tex&amp;gt; '''do'''           //перебираем все ребра, входящие в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;&lt;br /&gt;
        '''if''' (&amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;))    //перечисляем все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; одна из них, то &amp;lt;tex&amp;gt;v \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;++                       //увеличиваем количество найденных вершин и переходим к рассмотрению следующего кандидата&lt;br /&gt;
          '''break''' &lt;br /&gt;
    '''return''' &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм изначально учитывает &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, а затем перебирает всех возможных кандидатов &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; на попадание в &amp;lt;tex&amp;gt;R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для каждого из них перебираются все ребра, в него входящие.&lt;br /&gt;
Затем перечисляются все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и, если начало нашего ребра было перечислено, то &amp;lt;tex&amp;gt;v \in R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так необходимо хранить лишь &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и еще поочередно значения полученные в результате вызова '''Enum'''.&lt;br /&gt;
&lt;br /&gt;
Теперь напишем алгоритм, который будет недетерминированно решать задачу &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; на логарифмической памяти.&lt;br /&gt;
Он будет состоять из двух частей: вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; и перечисление всех вершин из &amp;lt;tex&amp;gt;R_{n - 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; происходит путем вызова '''Next''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; раз, при этом каждый раз в качестве &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; подставляется новое полученное значение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''NCONN'''(&amp;lt;tex&amp;gt;G, s, t&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r_n = 1&amp;lt;/tex&amp;gt;                          //&amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;i = 0..n - 2&amp;lt;/tex&amp;gt; '''do'''               //вычисляем &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;r_n = &amp;lt;/tex&amp;gt; '''Next'''(&amp;lt;tex&amp;gt;s, i, r_n, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;t1&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, n - 1, r_n, G&amp;lt;/tex&amp;gt;))   //перечисляем вершины из &amp;lt;tex&amp;gt;R_{n-1}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; была перечислена, то &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; достижима и выдаем '''reject''', иначе '''accept'''&lt;br /&gt;
      '''reject'''&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''accept'''&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как для хранения &amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt;, и для вызываемых '''Next''' и '''Enum''' необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23617</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23617"/>
				<updated>2012-06-03T22:38:18Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как '''True Quantified Boolean Formula'''. Это язык верных булевых формул с кванторами.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Будем считать, что длина ленты машины &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — полином, а &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Конфигурация однозначно задаётся позицией и содержанием рабочей ленты. Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;. Тогда размер конфигурации равен &amp;lt;tex&amp;gt;\Omega r(n)&amp;lt;/tex&amp;gt;. Следовательно всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Под выражением &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; будем понимать &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, [\phi(A, R, t-1) \land \phi(R, B, t-1)]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega r(n)})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, r(n) , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, r(n), \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Доказательство непосредственно следует из лемм. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23615</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23615"/>
				<updated>2012-06-03T22:36:28Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как '''True Quantified Boolean Formula'''. Это язык верных булевых формул с кванторами.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Будем считать, что длина ленты машины &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; есть &amp;lt;tex&amp;gt;r(|x|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — полином, а &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа. Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Конфигурация однозначно задаётся позицией и содержанием рабочей ленты. Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;. Тогда размер конфигурации равен &amp;lt;tex&amp;gt;\Omega r(n)&amp;lt;/tex&amp;gt;. Следовательно всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Под выражением &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; будем понимать &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, [\phi(A, R, t-1) \land \phi(R, B, t-1)]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega r(n)})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, r(n) , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, r(n), \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega r(n)}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Доказательство непосредственно следует из лемм. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23607</id>
		<title>Интерактивные протоколы. Класс IP. Класс AM</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_IP._%D0%9A%D0%BB%D0%B0%D1%81%D1%81_AM&amp;diff=23607"/>
				<updated>2012-06-03T22:22:48Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Класс IP==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;b&amp;gt;Интерактивным протоколом&amp;lt;/b&amp;gt;, разрешающим язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, называется абстрактная машина (см. рис. 1), моделирующая вычисления как обмен сообщениями между двумя программами (Prover и Verifier, далее &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; соответственно), такими, что&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; решил, что слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности;&lt;br /&gt;
# &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; заинтересован установить, действительно ли слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит языку;&lt;br /&gt;
# &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; — вероятностная машина Тьюринга;&lt;br /&gt;
# &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; ограничен полиномиальным временем работы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:IPS.png|250px|thumb|right|Рис. 1. Схема интерактивного протокола.]] &lt;br /&gt;
&lt;br /&gt;
Интерактивные протоколы делятся на два типа в зависимости от доступа &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; к вероятностной ленте &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;b&amp;gt; public coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;b&amp;gt; private coins &amp;lt;/b&amp;gt; — &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; &amp;lt;b&amp;gt;не&amp;lt;/b&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;IP[f] = \{L|\exists \langle V, P \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не имеет доступа к вероятностной ленте &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; (private coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(V(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(V(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x| &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Язык AM (&amp;lt;i&amp;gt;Arthur–Merlin games&amp;lt;/i&amp;gt;) отличается от IP лишь тем, что &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; может видеть вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;AM[f] = \{L|\exists \langle V, P \rangle : &amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; может читать вероятностную ленту &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; (public coins);&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(V(x) = 1) \ge \frac{2}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(V(x) = 1) \le \frac{1}{3} &amp;lt;/tex&amp;gt;;&amp;lt;br/&amp;gt;&lt;br /&gt;
# число раундов интерактивного протокола &amp;lt;tex&amp;gt; O(f(n)), n = |x| &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \in L \Rightarrow P(V(x) = 1) = 1 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; completeness &amp;lt;/b&amp;gt; (его можно достичь).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Если для интерактивного протокола выполняется &amp;lt;tex&amp;gt; \forall x \notin L \Rightarrow P(V(x) = 1) = 0 &amp;lt;/tex&amp;gt;, то говорят, что он обладает свойством &amp;lt;b&amp;gt; soundness &amp;lt;/b&amp;gt; (его нельзя достичь).&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{IP[0]}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; сам по себе является вероятностной машиной Тьюринга и поэтому может разрешить язык из &amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; не прибегая к общению с &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NP} \subset \mathrm{IP[1]}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Для разрешения языка из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; будем использовать следующий протокол:&lt;br /&gt;
&amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; будет проверять на принадлежность слова &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; используя сертификат, который он запросит у &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не ограничен в вычислительной мощности, он может подобрать подходящий сертификат и именно его и сообщит, так как он заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово. Для этого требуется лишь один раунд интерактивного протокола.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;GNI&amp;lt;/tex&amp;gt; расшифровывается как Graph Non Isomorphism. Это язык пар неизоморфных друг другу графов.&lt;br /&gt;
&amp;lt;tex&amp;gt;GNI=\{ \langle G, H \rangle, &amp;lt;/tex&amp;gt; графы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; не изоморфны &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;GNI \in \mathrm{IP[1]}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Будем использовать следующий алгоритм для &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# Возьмём случайное число &amp;lt;tex&amp;gt;i \in \{0, 1\}&amp;lt;/tex&amp;gt; и случайную перестановку &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; с вероятностной ленты; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Создадим новый граф, перемешав вершины графа c номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; перестановкой &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Перешлём &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; полученный граф с просьбой определить, из какого из исходных графов он был получен; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Получив ответ, сравним его с правильным ответом — числом &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если полученный ответ не совпадёт с &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Иначе повторим первые пять шагов ещё раз и перейдём к последнему шагу; &amp;lt;br/&amp;gt;&lt;br /&gt;
# Если мы ещё не вернули &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, то вернём &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Покажем, что это удовлетворяет ограничениям на &amp;lt;tex&amp;gt;\mathrm{IP[1]}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Во-первых, очевидно, что число раундов не превосходит двух. &amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим теперь случаи&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \in GNI&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; неизоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; сможет два раза подряд вернуть правильный ответ и в итоге &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; вернёт 1.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \langle G, H \rangle \notin GNI&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изоморфны и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; не сможет определить какой граф был перемешан &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; заинтересован в том, чтобы &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; принял слово, ему необходимо угадать правильный ответ (иначе &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; просто вернёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;). Вероятность того, что &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; примет слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, когда оно не принадлежит языку (то есть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; два раза подряд верно угадает номер графа), равна &amp;lt;tex&amp;gt;\frac{1}{4}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, построенный протокол удовлетворяет условию теоремы.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23602</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23602"/>
				<updated>2012-06-03T22:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем эти утверждения.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23600</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23600"/>
				<updated>2012-06-03T22:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{\#SAT}=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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 \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;\mathrm{TAUT}&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\mathrm{\#SAT}&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in \mathrm{TAUT} \Leftrightarrow \langle \phi, 2^k \rangle \in \mathrm{\#SAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\mathrm{\#SAT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\mathrm{TAUT} \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23548</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23548"/>
				<updated>2012-06-03T18:01:20Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как '''True Quantified Boolean Formula'''. Это язык верных булевых формул с кванторами.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации равен &amp;lt;tex&amp;gt;\Omega n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; длина входа. Тогда всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, [\phi(A, R, t-1) \land \phi(R, B, t-1)]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega n})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, \Omega , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, \Omega, \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Доказательство непосредственно следует из лемм. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23547</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23547"/>
				<updated>2012-06-03T17:59:36Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как '''True Quantified Boolean Formula'''. Это язык верных булевых формул с кванторами.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации равен &amp;lt;tex&amp;gt;\Omega n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; длина входа. Тогда всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, (\phi(A, R, t-1) \land \phi(R, B, t-1))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega n})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, \Omega , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, \Omega, \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Доказательство непосредственно следует из лемм. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23545</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23545"/>
				<updated>2012-06-03T17:56:48Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как '''True Quantified Boolean Formula'''. Это язык верных булевых формул с кванторами.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации равен &amp;lt;tex&amp;gt;\Omega n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; длина входа. Тогда всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega n})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, \Omega , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, \Omega, \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Доказательство непосредственно следует из лемм. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23531</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23531"/>
				<updated>2012-06-03T16:28:35Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это '''язык верных булевых формул с кванторами'''.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \ldots Q_n x_n \phi(x_1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \land solve(Q_2 x_2 \ldots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \ldots Q_n x_n \phi(0, x_2, \ldots, x_n)) \lor solve(Q_2 x_2 \dots Q_n x_n \phi(1, x_2, \ldots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера. Пусть &amp;lt;tex&amp;gt;\Omega = |\Sigma \cup Q|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации равен &amp;lt;tex&amp;gt;\Omega n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; длина входа. Тогда всего конфигураций &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём обозначение &amp;lt;tex&amp;gt;x_{I,i,c}&amp;lt;/tex&amp;gt; — в конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-том месте стоит символ &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_{I,1,c_1} \, \exists x_{I,1,c_2} \ldots \exists x_{I,1,c_\Omega}  \, \exists x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt; Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_{I,1,c_1} \, \forall x_{I,1,c_2} \ldots \forall x_{I,1,c_\Omega}  \, \forall x_{I,2,c_1} \ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = \exists S \, \exists F \, (S - start) \land (F - accept) \land \phi(S, F, log_2(2^{\Omega n})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выражения &amp;lt;tex&amp;gt;S - start&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F - accept&amp;lt;/tex&amp;gt; можно записать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S - start = x_{S, 1, w[1]} \land x_{S, 2, w[2]} \land \ldots \land x_{S, |w|, w[|w|]} \land x_{S, |w| + 1, B} \ldots \land x_{S, \Omega , B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F - accept = x_{S, |w| + 1, \#_y} \lor \ldots \lor x_{S, \Omega, \#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{\Omega n}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23508</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23508"/>
				<updated>2012-06-03T14:39:05Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;p(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_0^I \, \exists x_1^I \dots \exists x_{r(n)}^I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_0^I \, \forall x_1^I \dots \forall x_{r(n)}^I&amp;lt;/tex&amp;gt;. Всего конфигураций у ДМТ &amp;lt;tex&amp;gt;M \, 2^{O(p(n))}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_{|w|}^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23507</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23507"/>
				<updated>2012-06-03T14:28:36Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_0^I \, \exists x_1^I \dots \exists x_{r(n)}^I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_0^I \, \forall x_1^I \dots \forall x_{r(n)}^I&amp;lt;/tex&amp;gt;. Всего конфигураций у ДМТ &amp;lt;tex&amp;gt;M \, 2^{O(p(n))}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_{|w|}^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; корректно.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23460</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23460"/>
				<updated>2012-06-03T13:01:38Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_0^I \, \exists x_1^I \dots \exists x_{r(n)}^I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_0^I \, \forall x_1^I \dots \forall x_{r(n)}^I&amp;lt;/tex&amp;gt;. Всего конфигураций у ДМТ &amp;lt;tex&amp;gt;M \, 2^{O(p(n))}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер длины, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_{|w|}^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; верное.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23452</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23452"/>
				<updated>2012-06-03T12:45:02Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_0^I \, \exists x_1^I \dots \exists x_{r(n)}^I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_0^I \, \forall x_1^I \dots \forall x_{r(n)}^I&amp;lt;/tex&amp;gt;. Всего конфигураций у ДМТ &amp;lt;tex&amp;gt;M \, 2^{O(p(n))}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер длины, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_{|w|}^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; верное.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23446</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23446"/>
				<updated>2012-06-03T12:37:43Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \exists x_0^I \, \exists x_1^I \dots \exists x_{r(n)}^I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; \forall x_0^I \, \forall x_1^I \dots \forall x_{r(n)}^I&amp;lt;/tex&amp;gt;. Всего конфигураций у ДМТ &amp;lt;tex&amp;gt;M \, 2^{O(p(n))}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер длины, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_|w|^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; верное.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23440</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23440"/>
				<updated>2012-06-03T12:29:37Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\exists x_0^I) (\exists x_1^I)\dots(\exists x_{r(n)}^I)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\forall x_0^I) (\forall x_1^I)\dots(\forall x_{r(n)}^I)&amp;lt;/tex&amp;gt;. Всего конфигурации у ДМТ &amp;lt;tex&amp;gt;M \, O(p(n))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер длины, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_|w|^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; верное.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную не более, чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23438</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23438"/>
				<updated>2012-06-03T12:27:28Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфигурации есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\exists x_0^I) (\exists x_1^I)\dots(\exists x_{r(n)}^I)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\forall x_0^I) (\forall x_1^I)\dots(\forall x_{r(n)}^I)&amp;lt;/tex&amp;gt;. Всего конфигурации у ДМТ &amp;lt;tex&amp;gt;M \, O(p(n))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер длины, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_|w|^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; верное.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную не более чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23433</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23433"/>
				<updated>2012-06-03T12:23:09Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 = \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим такую функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T(f, x) \le p(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, распознающая его с использованием памяти полиномиального размера.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — конфигурация &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Размер конфиграции есть &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — некоторый полином. Тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\exists x_0^I) (\exists x_1^I)\dots(\exists x_{r(n)}^I)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i^I\}&amp;lt;/tex&amp;gt; — все переменные конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\forall x_0^I) (\forall x_1^I)\dots(\forall x_{r(n)}^I)&amp;lt;/tex&amp;gt;. Всего конфигурации у ДМТ &amp;lt;tex&amp;gt;M \, O(p(n))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, проверяющую следующее условие: конфигурация &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; достижима из конфигурации &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не более, чем за &amp;lt;tex&amp;gt;2^t&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, 0) = (A = B) \lor (A \vdash B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \exists R \, \phi(A, R, t-1) \land \phi(R, B, t-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что данная формула имеет экспоненциальный размер длины, поэтому воспользуемся квантором &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; и перепишем её следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) =  \exists R \,\forall U \,\forall V \, \{\phi(U, V, t-1) \lor [\neg(U = A \land V = R) \land \neg(U = R \land V = B)]\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Размер полученной функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; полиномиален относительно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в формулу из &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_{st}) (\exists I_{fin}) (x_0^{I_{st}} = start \land x_1^{I_{st}} = w[1] \land \dots \land x_|w|^{I_{st}} = w[|w|]) \land (\exists i \, x_i^{I_{fin}} = finish) \land \phi(I_{st}, I_{fin}, log_2(2^{O(p(n))})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что сведение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; верное.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то существует путь из стартовой конфигурации в финишную, причём длины не более чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;, а значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; верна.&lt;br /&gt;
&lt;br /&gt;
Если формула &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt; оказалась верна, то существует путь из стартовой конфигурации в финишную не более чем &amp;lt;tex&amp;gt;2^{O(p(n))}&amp;lt;/tex&amp;gt;. Значит, ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; допускает слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23366</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=23366"/>
				<updated>2012-06-03T10:15:03Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSC}&amp;lt;/tex&amp;gt;, необходимо показать, что &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 == \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 == \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим функцию &amp;lt;tex&amp;gt;f \colon \forall x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;, то существует какая-то детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которая его распознаёт за полиномиальное от размера входа время.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — мгновенное описание &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\exists x_1) (\exists x_2)\cdots(\exists x_n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i\}&amp;lt;/tex&amp;gt; — все переменные мгновенного описания &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\forall x_1) (\forall x_2)\dots(\forall x_n)&amp;lt;/tex&amp;gt;. Теперь рассмотрим два мгновенных описания &amp;lt;tex&amp;gt;M: A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Напишем рекурсивную функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, которая будет переводить утверждение &amp;lt;tex&amp;gt;A\vdash^tB&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; за полиномиальное относительно длины входа время. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \\ (\exists R) (\forall U) (\forall V) \ \{\phi(U, V, t/2) \lor [\neg(A = U \land R = V) \land \neg(R = U \land B = V)]\}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Переменые &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; важно рассмотреть только в двух случаях: когда первое из них стартовое, второе — промежуточное, или первое — промежуточное, а второе — финишное. Поэтому для всех остальных вариантов выражение &amp;lt;tex&amp;gt;[\neg(A = U \land R = V) \land \neg(R = U \land B = V)]&amp;lt;/tex&amp;gt; будет истинно. Если &amp;lt;tex&amp;gt;A = U \land R = V&amp;lt;/tex&amp;gt; то, чтобы &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; было истинно, необходимо наличие такого мгновенного описания &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, чтобы было выполненно утверждение: &amp;lt;tex&amp;gt;A\vdash^{t/2}R&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;R = U \land B = V&amp;lt;/tex&amp;gt; то, нас интересует мгновенное описание &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;R\vdash^{t/2}B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Заметим, что размер функции &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; равен размеру &amp;lt;tex&amp;gt;\phi(A, B, t/2)&amp;lt;/tex&amp;gt; с константной добавкой &amp;lt;tex&amp;gt;(\exists R) (\forall U) (\forall V) \ \{\ * \lor [\neg(A = U \land B = R) \land \neg(A = R \land B = V)]\}&amp;lt;/tex&amp;gt; .&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_s) (\exists I_f) (x_{I_s, 0} = start \land x_{I_s, 1} = w[1] \land \dots \land x_{I_s, |w|} = w[|w|]) \land ((\exists i) x_{I_f, i} = finish) \land \phi(Start, Finish, 2^{log_2(c^{1+p(n)}})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Докажем, что получившаяся булева формула с кванторами удовлетворима тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то стартовое и финишное состояние заданы корректно. Также из стартового состояния можно попасть в финишное за полиномиальное время. &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \not\in L&amp;lt;/tex&amp;gt;, то если мы зададим корректное стартовое состояние, то пути до корректного финишного состояния существовать не может.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;TQBF \in \mathrm{PSH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23343</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23343"/>
				<updated>2012-06-03T09:12:27Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\#SAT=\{\langle \varphi, k \rangle \bigm| \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \#SAT&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\#SAT&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in TAUT \Leftrightarrow \langle \phi, 2^k \rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;TAUT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;TAUT \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=23311</id>
		<title>Теорема Махэни</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=23311"/>
				<updated>2012-06-02T22:26:00Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{LSAT}=\{\langle\phi,y\rangle | \exists x: x\le_{lex}y, \phi(x) = 1\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
#Очевидно, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt; (в качестве сертификата можно запросить &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;).&lt;br /&gt;
#Сведём &amp;lt;tex&amp;gt;SAT&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt;. Для этого рассмотрим отображение &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 1^{|\phi|}\rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|\phi|&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное. &lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;, то формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, а значит &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, и &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Таким образом, &amp;lt;tex&amp;gt;SAT \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;SAT \in \mathrm{NPC}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le SAT&amp;lt;/tex&amp;gt;. Тогда в силу транзитивности &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Итого мы доказали, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;. Тогда по определению &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}, y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\exists x: x\le_{lex}y, \phi(x) = 1&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x&amp;lt;_{lex}z, \phi(x) = 1&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Махэни&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Пусть &amp;lt;tex&amp;gt;S \in \mathrm{NPC} \cap \mathrm{SPARSE}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;S\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует полиномиальная функция сведения &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;\langle \phi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \phi, y \rangle) \in S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; работает полиномиальное время, и &amp;lt;tex&amp;gt;|\phi|=|y|&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;|y|&amp;lt;/tex&amp;gt; — длина вектора &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;), то &amp;lt;tex&amp;gt;f(\langle\phi,y\rangle) \le q(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&amp;lt;tex&amp;gt;S\in \mathrm{SPARSE}&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\forall n \; |S \cap \Sigma^n|\le p(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — также полином.&lt;br /&gt;
&lt;br /&gt;
Опишем алгоритм для нахождения лексикографически минимальной строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, удовлетворяющей формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;n=|\phi|, r=r(|\phi|)&amp;lt;/tex&amp;gt;. Изначально область поиска для &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; — все строки длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Опишем одну итерацию поиска.&lt;br /&gt;
&lt;br /&gt;
Разобьём текущее множество строк на &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; подотрезок примерно равной длины. Обозначим концы полученных подотрезков &amp;lt;tex&amp;gt;w_0,...,w_{r+1}&amp;lt;/tex&amp;gt;. Пусть теперь &amp;lt;tex&amp;gt;z_i=f(\langle\phi,w_i\rangle)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Из леммы (2) мы знаем, что, начиная с некоторого &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;, все пары &amp;lt;tex&amp;gt;\langle\phi, w_l\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда по сведению &amp;lt;tex&amp;gt;z_j \in S&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j\ge l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;\exists i \ne j \, z_i=z_j&amp;lt;/tex&amp;gt;. Строки &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt; либо обе лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, либо обе не лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда по вышеуказанной причине &amp;lt;tex&amp;gt;x\notin (w_i, w_j]&amp;lt;/tex&amp;gt;. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; часть множества подстановок.&lt;br /&gt;
# &amp;lt;tex&amp;gt;z_i \ne z_j \, \forall i \ne j&amp;lt;/tex&amp;gt;. Как было показано выше, если &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;z_1&amp;lt;/tex&amp;gt; лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то все последующие &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; тоже лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, но тогда &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; содержит &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строку длины не более, чем &amp;lt;tex&amp;gt;q(|\phi|)&amp;lt;/tex&amp;gt;, что противоречит условию &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le r(|\phi|)&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x\notin[w_0,w_1]&amp;lt;/tex&amp;gt;, то есть его можно убрать из рассмотрения.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях мы сузили область поиска как минимум на &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; её размера. &lt;br /&gt;
&lt;br /&gt;
Будем повторять эту процедуру до тех пор, пока не останется не более &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;x=min(w_i), w_i&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Иначе, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
&lt;br /&gt;
Оценим время работы нашего алгоритма. После &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; итераций у нас останется не более &amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k&amp;lt;/tex&amp;gt; строк. Оценим &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k \simeq 1&amp;lt;/tex&amp;gt;. Отсюда &amp;lt;tex&amp;gt;k=O(rn)&amp;lt;/tex&amp;gt; (это можно получить, выразив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма). &lt;br /&gt;
&lt;br /&gt;
Таким образом, мы можем разрешить язык &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt; за полиномиальное время, найдя лексикографически минимальную строку, удовлетворяющую формулу, и сравнив её с нашим аргументом. Так как &amp;lt;tex&amp;gt;\mathrm{LSAT}\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, то мы можем решить любую задачу из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; за полиномиальное время, а значит &amp;lt;tex&amp;gt;\mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Недетерминированные вычисления. Классы NP и Σ₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
*[[Теорема Бермана — Форчуна]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=23310</id>
		<title>Теорема Махэни</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=23310"/>
				<updated>2012-06-02T22:25:27Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{LSAT}=\{\langle\phi,y\rangle | \exists x: x\le_{lex}y, \phi(x) = 1\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
#Очевидно, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt; (в качестве сертификата можно запросить &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;).&lt;br /&gt;
#Сведём &amp;lt;tex&amp;gt;SAT&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt;. Для этого рассмотрим отображение &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 1^{|\phi|}\rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|\phi|&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное. &lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;, то формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, а значит &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, и &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Таким образом, &amp;lt;tex&amp;gt;SAT \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;SAT \in \mathrm{NPC}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le SAT&amp;lt;/tex&amp;gt;. Тогда в силу транзитивности &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le \mathrm{LSAT}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Итого мы доказали, что &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;. Тогда по определению &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}, y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\exists x: x\le_{lex}y, \phi(x) = 1&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x&amp;lt;_{lex}z, \phi(x) = 1&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Махэни&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Пусть &amp;lt;tex&amp;gt;S \in \mathrm{NPC} \cap \mathrm{SPARSE}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;S\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;\mathrm{LSAT} \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует полиномиальная функция сведения &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;\langle \phi, y \rangle \in \mathrm{LSAT} \Leftrightarrow f(\langle \phi, y \rangle) \in S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; работает полиномиальное время, и &amp;lt;tex&amp;gt;|\phi|=|y|&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;|y|&amp;lt;/tex&amp;gt; — длина вектора &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;), то &amp;lt;tex&amp;gt;f(\langle\phi,y\rangle) \le q(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&amp;lt;tex&amp;gt;S\in \mathrm{SPARSE}&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\forall n \; |S \cap \Sigma^n|\le p(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — также полином.&lt;br /&gt;
&lt;br /&gt;
Опишем алгоритм для нахождения лексикографически минимальной строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, удовлетворяющей формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;n=|\phi|, r=r(|\phi|)&amp;lt;/tex&amp;gt;. Изначально область поиска для &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; — все строки длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Опишем одну итерацию поиска.&lt;br /&gt;
&lt;br /&gt;
Разобьём текущее множество строк на &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; подотрезок примерно равной длины. Обозначим концы полученных подотрезков &amp;lt;tex&amp;gt;w_0,...,w_{r+1}&amp;lt;/tex&amp;gt;. Пусть теперь &amp;lt;tex&amp;gt;z_i=f(\langle\phi,w_i\rangle)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Из леммы (2) мы знаем, что, начиная с некоторого &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;, все пары &amp;lt;tex&amp;gt;\langle\phi, w_l\rangle \in \mathrm{LSAT}&amp;lt;/tex&amp;gt;. Тогда по сведению &amp;lt;tex&amp;gt;z_j \in S&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j\ge l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;\exists i \ne j \, z_i=z_j&amp;lt;/tex&amp;gt;. Строки &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt; либо обе лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, либо обе не лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда по вышеуказанной причине &amp;lt;tex&amp;gt;x\notin (w_i, w_j]&amp;lt;/tex&amp;gt;. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; часть множества подстановок.&lt;br /&gt;
# &amp;lt;tex&amp;gt;z_i \ne z_j \, \forall i \ne j&amp;lt;/tex&amp;gt;. Как было показано выше, если &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;z_1&amp;lt;/tex&amp;gt; лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то все последующие &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; тоже лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, но тогда &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; содержит &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строку длины не более, чем &amp;lt;tex&amp;gt;q(|\phi|)&amp;lt;/tex&amp;gt;, что противоречит условию &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le r(|\phi|)&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x\notin[w_0,w_1]&amp;lt;/tex&amp;gt;, то есть его можно убрать из рассмотрения.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях мы сузили область поиска как минимум на &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; её размера. &lt;br /&gt;
&lt;br /&gt;
Будем повторять эту процедуру до тех пор, пока не останется не более &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;x=min(w_i), w_i&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Иначе, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
&lt;br /&gt;
Оценим время работы нашего алгоритма. После &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; итераций у нас останется не более &amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k&amp;lt;/tex&amp;gt; строк. Оценим &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k \simeq 1&amp;lt;/tex&amp;gt;. Отсюда &amp;lt;tex&amp;gt;k=O(rn)&amp;lt;/tex&amp;gt; (это можно получить, выразив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма). &lt;br /&gt;
&lt;br /&gt;
Таким образом, мы можем разрешить язык &amp;lt;tex&amp;gt;\mathrm{LSAT}&amp;lt;/tex&amp;gt; за полиномиальное время, найдя лексиграфически минимальную строку, удовлетворяющую формулу, и сравнив её с нашим аргументом. Так как &amp;lt;tex&amp;gt;\mathrm{LSAT}\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, то мы можем решить любую задачу из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; за полиномиальное время, а значит &amp;lt;tex&amp;gt;\mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Недетерминированные вычисления. Классы NP и Σ₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
*[[Теорема Бермана — Форчуна]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23301</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23301"/>
				<updated>2012-06-02T22:03:22Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\#SAT=\{\langle \varphi, k \rangle | \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \#SAT&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\#SAT&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in TAUT \Leftrightarrow \langle \phi, 2^k \rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;TAUT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;TAUT \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8&amp;diff=23287</id>
		<title>Арифметизация булевых формул с кванторами</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8&amp;diff=23287"/>
				<updated>2012-06-02T20:41:52Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Введём понятие арифметизации булевых формул. Пусть нам дана формула &amp;lt;tex&amp;gt;\phi(x_1 \ldots x_m)&amp;lt;/tex&amp;gt;. Сделаем следующие преобразования и получим формулу &amp;lt;tex&amp;gt;A_\phi(x_1, x_2, \ldots, x_m)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
* &amp;lt;tex&amp;gt;x_i \to x_i&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\lnot x \to 1 - x&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\varphi \land \psi \to A_\varphi \cdot A_\psi&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\varphi \lor \psi \to 1 - (1 - A_\varphi) \cdot (1 - A_\psi)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;|A_\phi| \le C |\phi|&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} некоторая константа.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\phi(x_1 \ldots x_m) = A_\phi(x_1, \ldots, x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Непосредственно следует из построения.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Для арифметизации булевых формул с кванторами добавим еще два правила преобразования:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\exists x \varphi(x) \to \sum\limits_{x=0}^{1} A_\varphi(x)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\forall x \varphi(x) \to \prod\limits_{x=0}^{1} A_\varphi(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Будем обозначать через &amp;lt;tex&amp;gt;Q_i&amp;lt;/tex&amp;gt; квантор, связывающий переменную &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;. Через &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; будем обозначать операцию, в которую преобразуется квантор &amp;lt;tex&amp;gt;Q_i&amp;lt;/tex&amp;gt; в процессе арифметизации.&lt;br /&gt;
&lt;br /&gt;
Заметим, что любую булеву формулу можно привести к виду &amp;lt;tex&amp;gt;Q_1 \ldots Q_m \phi(x_1, \ldots, x_m)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; {{---}} формула, не содержащая кванторов. Кроме того, в процессе арифметизации &amp;lt;tex&amp;gt;Q_1 \ldots Q_m \phi(x_1, \ldots, x_m)&amp;lt;/tex&amp;gt; переходит в &amp;lt;tex&amp;gt;R_1 \ldots R_m A_\phi(x_1, \ldots, x_m)&amp;lt;/tex&amp;gt;. Поэтому далее будем рассматривать только формулы, которые имеют вид, указанный выше.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Q_1 \ldots Q_m \phi(x_1, \ldots, x_m)&amp;lt;/tex&amp;gt; {{---}} булева формула с кванторами, переходящая в процессе арифметизации в &amp;lt;tex&amp;gt;s = R_1 \ldots R_m A_\phi(x_1, \ldots, x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;c_1, \ldots, c_m&amp;lt;/tex&amp;gt; {{---}} двоичные константы.&lt;br /&gt;
&lt;br /&gt;
Обозначим через &amp;lt;tex&amp;gt;A_i(x_{i+1}) = R_{i+2} \ldots R_m A_\phi(c_1, \ldots, c_i, x_{i+1}, \ldots, x_m)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;0 \le i \le m - 1&amp;lt;/tex&amp;gt;. Тогда:&lt;br /&gt;
#&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;R_1 = \sum&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = s&amp;lt;/tex&amp;gt;;&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;R_1 = \prod&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A_0(0) \cdot A_0(1) = s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\forall i : 1 \le i \le m - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;R_{i+1} = \sum&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; A_i(0) + A_i(1) = A_{i-1}(c_i)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;R_{i+1} = \prod&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A_i(0) \cdot A_i(1) = A_{i-1}(c_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Докажем пункты 1.1 и 2.1. Для остальных пунктов доказательство аналогично.&lt;br /&gt;
&lt;br /&gt;
1.1. &amp;lt;tex&amp;gt;s=\sum\limits_{x_1 = 0}^{1}R_2\ldots R_m(x_1, x_2, \ldots, x_m)=R_2 \ldots R_m&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;(0, x_2, \ldots, x_m) + R_2 \ldots R_m(1, x_2, \ldots, x_m)=A_0(0) + A_0(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2.1. &amp;lt;tex&amp;gt;A_{i-1}(c_i)=\sum\limits_{x_{i+1} = 0}^{1}R_{i+2}\ldots R_m&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;(c_1, \ldots, c_{i-1}, c_i, x_{i+1}, \ldots x_m)=R_{i+2} \ldots R_m&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;(c_1, \ldots, c_i, 0, x_{i+2}, \ldots, x_m) + R_{i+2} \ldots R_m&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;(c_1, \ldots, c_i, 1, x_{i+2}, \ldots, x_m)=A_i(0) + A_i(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23284</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23284"/>
				<updated>2012-06-02T20:20:40Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\#SAT=\{\langle \varphi, k \rangle | \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \#SAT&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i)&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\#SAT&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in TAUT \iff \langle \phi, 2^k \rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;TAUT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;TAUT \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23283</id>
		<title>Лемма о соотношении coNP и IP</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D1%81%D0%BE%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B8_coNP_%D0%B8_IP&amp;diff=23283"/>
				<updated>2012-06-02T19:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\#SAT=\{\langle \varphi, k \rangle | \varphi&amp;lt;/tex&amp;gt; имеет ровно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; удовлетворяющих наборов &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\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&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Следует из [[Арифметизация булевых формул с кванторами | леммы (1)]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства леммы построим программы ''Verifier'' и ''Prover'' из [[Интерактивные протоколы. Класс IP. Класс AM#Класс IP|определения]] класса &amp;lt;tex&amp;gt;\mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сперва арифметизуем формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Пусть полученный полином &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; имеет степень &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (1) вместо условия &amp;lt;tex&amp;gt;\langle \phi, k \rangle \in \#SAT&amp;lt;/tex&amp;gt;, можно проверять условие &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приступим к описанию ''Verifier'''а.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 0''' &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;d=0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;m=0&amp;lt;/tex&amp;gt;, то ''Verifier'' может проверить указанное выше условие сам и вернуть соответствующий результат.&lt;br /&gt;
Иначе запросим у ''Prover'''а такое простое число &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;3dm \le p \le 6dm&amp;lt;/tex&amp;gt; (такое &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; существует в силу [http://ru.wikipedia.org/wiki/Постулат_Бертрана постулата Бертрана]). &lt;br /&gt;
Проверим &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; на простоту и на принадлежность заданному промежутку. Как мы [[Класс P#Примеры задач и языков из P|знаем]], &amp;lt;tex&amp;gt;Primes \in \mathrm{P}&amp;lt;/tex&amp;gt;, следовательно на эти операции у ''Verifier'''а уйдёт полиномиальное от размера входа время.&lt;br /&gt;
&lt;br /&gt;
Далее будем проводить все вычисления модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;A_0(x_1)= \sum\limits_{x_2 = 0}^{1}\ldots\sum\limits_{x_m = 0}^{1} A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Заметим, что размер формулы &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; будет полином от длины входа ''Verifier'' 'а, так как &amp;lt;tex&amp;gt;A_0(x_1)&amp;lt;/tex&amp;gt; полином от одной переменной степени не выше, чем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, а значит его можно представить в виде &amp;lt;tex&amp;gt;A_0(x) = \sum\limits_{i = 0}^{d} C_i \cdot x ^ i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt; (*) (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, ''Verifier'' продолжает свою работу, иначе он прекращает свою работу и возвращет '''false''').&lt;br /&gt;
&lt;br /&gt;
'''Шаг i'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_i = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим ''Prover'' 'а прислать ''Verifier'' 'у формулу &amp;lt;tex&amp;gt;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}, ..., x_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_i(0) + A_i(1) = A_{i-1}(r_i)&amp;lt;/tex&amp;gt; (*). &lt;br /&gt;
&lt;br /&gt;
'''Шаг m'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;r_m = random(p)&amp;lt;/tex&amp;gt;. Отправим &amp;lt;tex&amp;gt;r_m&amp;lt;/tex&amp;gt; программе ''Prover''.&lt;br /&gt;
&lt;br /&gt;
Попросим программу ''Prover'' прислать ''Verifier'' 'у значение &amp;lt;tex&amp;gt;A_m()= A(r_1, r_2, ..., r_m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим следующее утверждение: &amp;lt;tex&amp;gt;A_m() = A_{m-1}(r_m)&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
А также сами подставим &amp;lt;tex&amp;gt;r_1, r_2, ..., r_m&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A(x_1, x_2, ..., x_m)&amp;lt;/tex&amp;gt; и проверим правильность присланного значения &amp;lt;tex&amp;gt;A_m()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Возвращаем '''true'''.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что построенный таким образом ''Verifier'' — корректный. Для этого нужно доказать следующие утверждения:&lt;br /&gt;
# Построенный ''Verifier'' - вероятностная машина Тьюринга, совершающая не более полинома от длины входа действий.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \in \#SAT \Rightarrow \exists Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \ge 2/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;\langle \varphi, k \rangle \notin \#SAT \Rightarrow \forall Prover : P(Verifier^{Prover}(\langle \varphi, k \rangle)) \le 1/3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Первый факт следует из построения ''Verifier'' 'а.&lt;br /&gt;
#По [[Арифметизация булевых формул с кванторами | лемме (2)]], если &amp;lt;tex&amp;gt;\sum\limits_{x_1 = 0}^1 \ldots \sum\limits_{x_m = 0}^1  A_\phi(x_1, \ldots, x_m)=k&amp;lt;/tex&amp;gt;, то условия (*) выполнятются, следовательно существует такой ''Prover'', что &amp;lt;tex&amp;gt;P(Verifier^{Prover}(\langle\phi,k\rangle)) = 1&amp;lt;/tex&amp;gt;, для любой пары &amp;lt;tex&amp;gt;\langle\phi,k\rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Пусть количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Для того, что бы ''Verifier'' вернул '''true''', ''Prover'' 'у необходимо посылать такие &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:&lt;br /&gt;
:'''Шаг 0'''&lt;br /&gt;
:Так как количество наборов, удовлетворяющих &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, не равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то ''Prover'' не может послать правильное &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt; – не выполнится условие &amp;lt;tex&amp;gt;A_0(0) + A_0(1) = k&amp;lt;/tex&amp;gt;. Поэтому он посылает не &amp;lt;tex&amp;gt;A_0&amp;lt;/tex&amp;gt;, а некое &amp;lt;tex&amp;gt;\tilde{A}_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''Шаг 1'''&lt;br /&gt;
:По [[Лемма Шварца-Зиппеля|лемме Шварца-Зиппеля]] &amp;lt;tex&amp;gt;P(A_0(r_1) = \tilde{A}_0(r_1)) \le \frac d p&amp;lt;/tex&amp;gt; для некоторого случайно выбранного &amp;lt;tex&amp;gt;r_1&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;P(A_0(r_1) \ne \tilde{A}_0(r_1)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;, при этом должно выполняться равенство &amp;lt;tex&amp;gt;A_1(0) + A_1(1) = A_0(r_1)&amp;lt;/tex&amp;gt;. Значит с вероятностью не меньше, чем &amp;lt;tex&amp;gt;1 - \frac d p&amp;lt;/tex&amp;gt;, ''Prover'' отправит ''Verifier'' 'у  &amp;lt;tex&amp;gt;\tilde{A}_1&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
:'''Шаг m'''&lt;br /&gt;
: &amp;lt;tex&amp;gt;P(A_{m-1}(r_m) \ne \tilde{A}_{m-1}(r_m)) \ge 1 - \frac d p&amp;lt;/tex&amp;gt;. Значит с такой вероятностью ''Verifier'' получит  &amp;lt;tex&amp;gt;\tilde{A}_m&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt;. Но так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_m&amp;lt;/tex&amp;gt; и сравнивает его с полученным от ''Prover'' 'а, то в этом случае ''Verifier'' вернет ''false''. &lt;br /&gt;
:&lt;br /&gt;
:Заметим, что если на каком-то шаге &amp;lt;tex&amp;gt;P(A_{i-1}(r_i) = \tilde{A}_{i-1}(r_i))&amp;lt;/tex&amp;gt;, то начиная со следующего шага ''Prover'' может посылать истинные значения &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; и в итоге ''Verifier'' вернёт '''true'''.&lt;br /&gt;
:Из описанного процесса видно, что с вероятностью большей либо равной &amp;lt;tex&amp;gt;(1 - \frac d p) ^ m&amp;lt;/tex&amp;gt; мы дойдем до последнего шага и будем имееть &amp;lt;tex&amp;gt;\tilde{A}_n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;. Так как на шаге &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ''Verifier'' вычисляет &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; и проверяет значение, то ''Verifier'' вернет ''false''. &lt;br /&gt;
:Оценим вероятность возврата ''Verifier'' 'ом ответа '''false'''.&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(!Verifier^{Prover}(\langle \varphi, k \rangle)) \ge (1 - \frac d p) ^ m \ge (1 - \frac d {3dm})^m = (1 - \frac 1 {3m})^m = 1 - \frac 1 3 + \frac{m(m - 1)}{2 (3m)^2}  - \frac{m(m-1)(m-2)}{6 (3m)^3} + \ldots \ge \frac 2 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, построенный нами ''Verifier'' корректен, а значит лемма доказана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=3&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сведём язык &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt; к языку &amp;lt;tex&amp;gt;\#SAT&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 2^k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;\phi \in TAUT \iff \langle \phi, 2^k \rangle \in \#SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По лемме (2) &amp;lt;tex&amp;gt;\#SAT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;TAUT \in \mathrm{IP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;TAUT \in \mathrm{coNPC}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{coNP} \subset \mathrm{IP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%BF%D1%80%D0%B8%D0%BD%D0%B0%D0%B4%D0%BB%D0%B5%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_XOR_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%83_AC%E2%81%B0&amp;diff=23266</id>
		<title>Теорема о непринадлежности XOR классу AC⁰</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%BF%D1%80%D0%B8%D0%BD%D0%B0%D0%B4%D0%BB%D0%B5%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_XOR_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%83_AC%E2%81%B0&amp;diff=23266"/>
				<updated>2012-06-02T16:56:00Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Теорема */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Hastad’s switching lemma===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; представима в виде &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-[[ДНФ]], а &amp;lt;tex&amp;gt;p~-&amp;lt;/tex&amp;gt; случайная выборка &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; случайных бит входа. Тогда при &amp;lt;tex&amp;gt;s \ge 2&amp;lt;/tex&amp;gt; верно, что &amp;lt;tex&amp;gt;Pr[f|_p&amp;lt;/tex&amp;gt; не представима в виде &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;-[[КНФ]]&amp;lt;tex&amp;gt;]\le\left(\frac{(n - t)k^{10}}{n}\right) ^ {s/2}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
Заметим, что для функции &amp;lt;tex&amp;gt;\overline{f}&amp;lt;/tex&amp;gt; можно получить такой же результат, изменив КНФ на ДНФ и наоборот.&lt;br /&gt;
&lt;br /&gt;
===Теорема===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\oplus~-&amp;lt;/tex&amp;gt; [[Основные определения: алфавит, слово, язык, конкатенация, свободный моноид слов; операции над языками|язык]] над [[Основные определения: алфавит, слово, язык, конкатенация, свободный моноид слов; операции над языками|алфавитом]] &amp;lt;tex&amp;gt;\left\{0, 1\right\}&amp;lt;/tex&amp;gt;, состоящий из [[Основные определения: алфавит, слово, язык, конкатенация, свободный моноид слов; операции над языками|слов]], содержащих нечетное число &amp;lt;tex&amp;gt;1.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\oplus \notin \mathrm{AC^0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим произвольную схему из &amp;lt;tex&amp;gt;\mathrm{AC^0}&amp;lt;/tex&amp;gt;. Не умаляя общности, будем считать, что:&lt;br /&gt;
# Выходная степень каждого элемента равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Схема имеет &amp;lt;tex&amp;gt;2n&amp;lt;/tex&amp;gt; входных провода, причем последние &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; из них являются отрицанием первых &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; входов.&lt;br /&gt;
# Элементы &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; чередуются. Значит, схему можно разбить на уровни так, что на каждом уровне все элементы будут одинаковыми.&lt;br /&gt;
# Нижний уровень схемы состоит из &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; элементов с единичной степенью входа.&lt;br /&gt;
&lt;br /&gt;
Построим итеративный процесс, на каждом шаге которого можно с высокой вероятностью уменьшить глубину схемы на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, сохранив при этом число входов. Пусть &amp;lt;tex&amp;gt;n~-&amp;lt;/tex&amp;gt; длина входной цепочки, а &amp;lt;tex&amp;gt;d~-&amp;lt;/tex&amp;gt; глубина схемы. Выберем минимальное целое &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; так, чтобы &amp;lt;tex&amp;gt;n^b&amp;lt;/tex&amp;gt; было не меньше, чем число элементов в схеме. На каждом шаге случайным образом будем назначать все большее число переменных. Обозначим &amp;lt;tex&amp;gt;n_i~-&amp;lt;/tex&amp;gt; число неназначенных переменных на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ом шаге. Тогда на &amp;lt;tex&amp;gt;i + 1&amp;lt;/tex&amp;gt;-ом шаге число назначенных переменных будет &amp;lt;tex&amp;gt;n_i - \sqrt{n_i}&amp;lt;/tex&amp;gt;. Возьмем &amp;lt;tex&amp;gt;k_i=10b\cdot2^i.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:beforeHastadSwitchingTransformation.png|600px|thumb|center|Схема на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ом шаге.]]&lt;br /&gt;
&lt;br /&gt;
Покажем, что после &amp;lt;tex&amp;gt;i+1&amp;lt;/tex&amp;gt;-ого шага глубина схемы будет &amp;lt;tex&amp;gt;d - i&amp;lt;/tex&amp;gt;, причем наибольшая степень входа элемента на нижнем уровне будет &amp;lt;tex&amp;gt;k_i&amp;lt;/tex&amp;gt;. В самом деле, пусть нижний уровень схемы состоит из &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; элементов, тогда уровень выше &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; из элементов &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt;. Каждый &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt; элемент можно считать &amp;lt;tex&amp;gt;k_i&amp;lt;/tex&amp;gt;-ДНФ. Отсюда по лемме получаем, что с вероятностью &amp;lt;tex&amp;gt;1-\left(\frac{k_i^{10}}{n^{1/2^{i+1}}}\right) ^ {k_{i+1}/2}&amp;lt;/tex&amp;gt; функцию можно записать в виде &amp;lt;tex&amp;gt;k_{i+1}&amp;lt;/tex&amp;gt;-КНФ. При достаточно больших &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; это можно сделать с вероятность хотя бы &amp;lt;tex&amp;gt;1-\frac{1}{10n^b}&amp;lt;/tex&amp;gt;. Поскольку верхний уровень КНФ состоит из &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; элементов, также как и уровень над КНФ, то их можно объединить, уменьшив при этом глубину схемы на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Аналогично рассматриваем случай, когда нижний уровень схемы состоит из &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt; элементов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:afterHastadSwitchingTransformation.png|600px|thumb|center|Схема на &amp;lt;tex&amp;gt;i+1&amp;lt;/tex&amp;gt;-ом шаге.]]&lt;br /&gt;
&lt;br /&gt;
Заметим, что лемма применяется не более, чем к &amp;lt;tex&amp;gt;n^b&amp;lt;/tex&amp;gt; элементам исходной схемы. Тогда с вероятностью не менее &amp;lt;tex&amp;gt;9/10&amp;lt;/tex&amp;gt; после &amp;lt;tex&amp;gt;d-2&amp;lt;/tex&amp;gt;-ого шага получаем схему глубины &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;, у которой максимальная степень входа на нижнем уровне не больше &amp;lt;tex&amp;gt;k_{d-2}&amp;lt;/tex&amp;gt;. По построению эта формула либо КНФ, либо ДНФ. Такую схему можно сделать постоянной, если правильно зафиксировать &amp;lt;tex&amp;gt;k_{d-2}&amp;lt;/tex&amp;gt; переменных. Однако функцию, распознающую &amp;lt;tex&amp;gt;\oplus,&amp;lt;/tex&amp;gt; невозможно сделать постоянной, зафиксировав менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; переменных. Получили противоречие. Поскольку рассматривали произвольную схему из класса &amp;lt;tex&amp;gt;\mathrm{AC^0}&amp;lt;/tex&amp;gt;, верно что &amp;lt;tex&amp;gt;\oplus \notin \mathrm{AC^0}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Источники===&lt;br /&gt;
* ''Sanjeev Arora, Boaz Barak''. [http://www.cs.princeton.edu/theory/complexity Computational Complexity: A Modern Approach]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_NC_%D0%B8_AC&amp;diff=23251</id>
		<title>Классы NC и AC</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_NC_%D0%B8_AC&amp;diff=23251"/>
				<updated>2012-06-02T15:01:37Z</updated>
		
		<summary type="html">&lt;p&gt;Байдаров Андрей: /* Теоремы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NC^i}&amp;lt;/tex&amp;gt; — множество языков, распознаваемых семейством логических схем полиномиального от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; размера, глубиной &amp;lt;tex&amp;gt;O(log^i (n))&amp;lt;/tex&amp;gt; и со степенью входа каждого элемента не более 2, причем существует детерминированная машина Тьюринга, принимающая на вход &amp;lt;tex&amp;gt;1^n&amp;lt;/tex&amp;gt; и строящая соответствующую схему используя &amp;lt;tex&amp;gt;O(log(n))&amp;lt;/tex&amp;gt; ячеек памяти, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AC^i}&amp;lt;/tex&amp;gt; определяется аналогично &amp;lt;tex&amp;gt;\mathrm{NC^i}&amp;lt;/tex&amp;gt;, за исключением того, что степень входа элемента неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NC} = \bigcup \limits_{i = 0}^{\infty} \mathrm{NC^i}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AC} = \bigcup \limits_{i = 0}^{\infty} \mathrm{AC^i}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Теоремы==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NC^i} \subset \mathrm{AC^i} \subset \mathrm{NC^{i+1}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathrm{NC^i} \subset \mathrm{AC^i}&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Это понятно из определения &amp;lt;tex&amp;gt;\mathrm{NC^i}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{AC^i}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathrm{AC^i} \subset \mathrm{NC^{i+1}}&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{AC^i}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается семейством схем &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; полиномиального размера. Степень входа каждого элемента схемы &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; не превосходит полинома от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поскольку степень входа не может превосходить число элементов в схеме. Заменим элементы схемы &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; элементами со степенью входа не более 2 следующим образом:&lt;br /&gt;
&lt;br /&gt;
[[Файл:AndCircuit.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
При такой замене глубина схемы увеличится не более чем в &amp;lt;tex&amp;gt;log_2 r(n) = O(log(n))&amp;lt;/tex&amp;gt; раз, а так как изначально глубина схемы была &amp;lt;tex&amp;gt;O(log^i(n))&amp;lt;/tex&amp;gt;, то после замены всех элементов она станет &amp;lt;tex&amp;gt;O(log^i(n)) \cdot O(log(n)) = O(log^{i+1}(n))&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
При замене одного элемента будет добавлено не более &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; элементов, потому, поскольку изначальный размер схемы был полиномиальным и каждый элемент мы заменили полиномиальным числом элементов, после всех замен размер схемы останется полиномиальным.  &lt;br /&gt;
}}&lt;br /&gt;
'''Следствие:'''  &amp;lt;tex&amp;gt;\mathrm{NC} = \mathrm{AC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NC} \subseteq \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{NC}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается некоторым семейством схем &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; таких, что существует детерминированная машина Тьюринга, строящая схему по &amp;lt;tex&amp;gt;1^n&amp;lt;/tex&amp;gt;, используя &amp;lt;tex&amp;gt;O(log(n))&amp;lt;/tex&amp;gt; ячеек памяти. Конфигурация МТ задается положением головки и состоянием ячеек памяти, то есть у МТ может быть &amp;lt;tex&amp;gt;n \cdot 2^{O(log(n))} = O(n^2)&amp;lt;/tex&amp;gt; конфигураций. При построении схемы конфигурации не могут повторяться, иначе МТ зациклится, следовательно схема будет построена за полиномиальное от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; время. Построим для данного входа схему и вычислим её. На вычисление схемы будет затрачено полиномиальное время, так как размер схемы полиномиален.}}&lt;br /&gt;
Равенство &amp;lt;tex&amp;gt;\mathrm{NC}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; — неразрешенная на данный момент задача.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|about=тезис о связи &amp;lt;tex&amp;gt;\mathbf{NC}&amp;lt;/tex&amp;gt; с параллельными алгоритмами&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается параллельным компьютером с &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; процессоров за время &amp;lt;tex&amp;gt;O(poly(log(n))&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;L \in \mathrm{NC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
''(набросок доказательства)''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{NC}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается семейством схем &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;N=O(poly(n))&amp;lt;/tex&amp;gt; и имеет глубину &amp;lt;tex&amp;gt;O(log^d n)&amp;lt;/tex&amp;gt;. Возьмем параллельный компьютер с &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; процессорами, где каждый из них будет играть роль одного элемента схемы. Так как компьютер параллельный, то вычисления на каждом уровне схемы будут выполняться параллельно. Тогда получаем, что всего потребуется &amp;lt;tex&amp;gt;O(log^d(n))&amp;lt;/tex&amp;gt; времени.  &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается параллельным компьютером с &amp;lt;tex&amp;gt;N=O(poly(n))&amp;lt;/tex&amp;gt; процессоров за время &amp;lt;tex&amp;gt;D=O(log^d n)&amp;lt;/tex&amp;gt;. Построим схему глубины &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, на каждом уровне которой будет по &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; элементов, таких, что &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент на уровне &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; выполняет вычисления, производимые &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-м процессором в момент времени &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Всего в схеме будет &amp;lt;tex&amp;gt;N \cdot D = O(poly(n)) \cdot O(log^d n) = O(poly(n))&amp;lt;/tex&amp;gt; элементов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>Байдаров Андрей</name></author>	</entry>

	</feed>