\documentclass[12pt,fleqn,a4paper]{book}
% 
% Packages used:
%
\usepackage[koi8-r]{inputenc}
\usepackage[russian,english]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsthm}
%
% Common customization:
%
\input defs
%
% The document
%
\begin{document}
\selectlanguage{russian}
%
% Lecture title
%
\lecture{8}{Теорема Тод\'а (первая часть)}{О. Сергеева}
\section{Класс $\PP$}
\begin{definition}
Язык $L$ принадлежит классу языков $\PP$, если существует
полиномиальная по времени НМТ $M$ такая, что 
$$x \in L \Leftrightarrow P\{M(x)=1\} >\frac{1}{2}.$$
(Т.е. в дереве её вычислений более половины листьев
соответствуют принимающим вычислениям.)
\end{definition}

Заметим, что $\NP \subseteq \PP$. Действительно, пусть $L \in \NP$, 
$M$ --- полиномиальная по времени НМТ, которая его принимает.
Построим по ней НМТ $N$, которая принимает слово из $L$ с вероятностью 
$>1/2$, слово не из $L$ --- с вероятностью $1/2$. 
Пусть $x$ --- какое-то слово. Из корня дерева вычислений $N$ 
будут исходить две ветви; в одну из них мы подставим дерево вычислений $M$,
во вторую --- его же, но сделав в нём все вычисления принимающими 
(во все листья поставим единички). Если слово $x$ принадлежало $L$,
в $M$ было хотя бы одно принимающее вычисление 
(хотя бы одна единичка в листьях) --- т.е. в $N$ единичек больше половины.
Если $x$ не лежало в $L$, в $N$ ровно половина вычислений --- принимающие. 

%Пока что мы не знаем, есть ли полные задачи в классе, который описан
%нами в качестве оракула. 
\begin{definition}
Задача $\MAJSAT$: дана булева формула (не обязательно в КНФ);
требуется выяснить, верно ли, что количество наборов значений
переменных, делающих её истинной, составляет $>\frac{1}{2}$ 
от общего количества наборов.
\end{definition}

\begin{proposition}
$\MAJSAT$ --- $\PP$-полная задача. 
\end{proposition}
\begin{proof}
$\MAJSAT \subseteq \PP$. 
Действительно, возьмём НМТ, проверяющую, что на ленте подсказки --- 
выполняющий набор нашей формулы. Среди всех возможных подсказок <<хороших>> ---
больше половины как раз если выполняющих наборов больше половины.

С другой стороны, свести к $\MAJSAT$ любую задачу из $\PP$
можно, записав соответствующую НМТ при помощи булевой формулы
как это делалось в теореме Кука-Левина.
\end{proof}

\section{Теорема Тод\'а, первая часть: $\PH\subseteq\BPP^\OP$}
\begin{theorem}[S. Toda]
$\PH \subseteq \P^\PP$.
\end{theorem}

Эта теорема будет доказана в два этапа.
Для начала нам потребуется ещё одно определение.

\begin{definition}
Язык $L$ принадлежит $\OP$ (parity P) $\Leftrightarrow$ существует 
полиномиальная по времени НМТ $M$, такая, что 
$$x\in L \Leftrightarrow 
\textrm{количество принимающих вычислений $M$ на $x$ нечётно}.$$ 
(Или, что эквивалентно, существует полиномиально проверяемое отношение $R$,
такое, что $\#\{y: R(x,y)=1\} \mathrel{\not\vdots} 2$.)
\end{definition}
Легко доказать, что полным языком для $\OP$ является задача
$\lang{\oplus SAT}$: верно ли, что у данной булевой формулы
нечётное число выполняющих наборов.

Первым этапом доказательства теоремы Тод\'а будет доказательство 
того, что $\PH\subseteq\BPP^\OP$.

Заметим, что $\NP \subseteq  \BPP^\OP$. 
Это --- ослабление утверждения $\NP \subseteq  \RP^\OP$,
которое сразу получается из леммы Вэлианта-Вазирани:
в качестве оракульного языка возьмём $\lang{\oplus SAT}$.
Нам важно различить случаи, когда у формулы ни одного 
и когда --- один выполняющий набор, 
остальное не важно, и с этим наш оракул справляется. 

Релятивизуем это утверждение.

\begin{lemma}\label{lem:vvrel}
Для любого оракула $A$ справедливо $\NP^A \subseteq  \BPP^{\OP^A}$.
\end{lemma}
\begin{proof}
Пусть $L \in \NP^A$, $M$ --- НМТ, принимающая $L$ с оракулом $A$. 
Построим по $M$ машину $M'$, получающую на вход
тройку чисел $(x,r,p)$, такую, что если ей подать 
случайные $r$ и $p$, то для любого $x$ с вероятностью $>1/\poly(n)$ у неё 
на $(x,r,p)$ будет нечётное количество (точнее, ровно одно) 
принимающих вычислений, а если $x$ будет не из $L$, то
ни одного.

Распределение $r$ и $p$ будет как в лемме Вэлианта-Вазирани:
выберем случайное $i\in[0\texttt{..}n]$, где
$n$ --- длина ветви $M$ 
(здесь мы пользуемся тем, что все ветви можно сделать одинаковыми по длине).
Далее выберем
$r \in [0\texttt{..}4\cdot 2^i\cdot n^2]$ и
$p \in [1\texttt{..}4\cdot 2^i\cdot n^2]$
также в соответствии с равномерным распределением.

Машина $M'$ читает $x$ и работает на этом входе так же, как $M$, но в тех случаях,
когда $M$ попадает в принимающее состояние, $M'$ проверяет, что $a\!\mod p = r$ 
($a$ --- строка подсказки), и выдаёт результат этой проверки. 
Велика вероятность того, что из всех принимающих вычислений останется ровно одно.
Доказательство --- такое же, как в лемме Вэлианта-Вазирани.
\end{proof}

Для доказательства того, что
$\PH \subseteq \BPP^\OP$, достаточно доказать, что 
$\forall i \in \mathbb{N}\ \ \SigmaP{i} \subseteq \BPP^\OP$.
Докажем это по индукции по $i$. 
База у нас уже доказана (лемма Вэлианта-Вазирани или лемма~\ref{lem:vvrel}).
%$NP^{\sigma_{0}}=NP \subseteq BPP^{\OP^{P}}=BPP^\OP$.

Для доказательства перехода нам потребуются три леммы.

\begin{lemma}\label{lem:opbpp} $\OP^{\BPP^A} \subseteq \BPP^{\OP^A}$.\end{lemma}
\begin{lemma}\label{lem:opop}  $\OP^\OP \subseteq \OP$.\end{lemma}
\begin{lemma}\label{lem:bppbpp}$\BPP^{\BPP^A}\subseteq \BPP^A$.\end{lemma}

Доказав их, получим:
\begin{eqnarray*}
\SigmaP{k+1}&=&\\
\NP^{\SigmaP{k}} &\subseteq& 
\mbox{\hfill(по предположению индукции)}\\
\NP^{\BPP^\OP} &\subseteq& 
\mbox{\hfill(по лемме~\ref{lem:vvrel})}\\
\BPP^{\OP^{\BPP^{\OP}}} &\subseteq& 
\mbox{\hfill(по лемме~\ref{lem:opbpp})}\\
\BPP^{\BPP^{\OP^{\OP}}} &\subseteq& 
\mbox{\hfill(по лемме~\ref{lem:opop})}\\
\BPP^{\BPP^{\OP}} &\subseteq& 
\mbox{\hfill(по лемме~\ref{lem:bppbpp})}\\
\BPP^{\OP}.
\end{eqnarray*}
что и завершит доказательство первой части теоремы Тод\'а.

\begin{proof}[Доказательство леммы~\ref{lem:bppbpp}.]
\begin{remark}
Было доказано, что для любого языка из $\BPP$ можно выбрать
вероятностную машину, принимающую этот язык, 
со сколь угодно малой вероятностью ошибки 
$2^{-\poly(n)}$.
Поэтому можно считать, что в деревьях вычислений, которые мы будем
рассматривать, все листья, кроме экспоненциально малой части 
$2^{-p_i}$ ($p_i$ --- некоторый полином от длины входа) 
соответствуют принимающим вычислениям; 
полиномы подберем, когда нам будет удобно. 
\end{remark}
\medskip

Пусть $L\in \BPP^A$, и вероятностная машина $M$ (с двусторонней
ограниченной вероятностью ошибки $2^{-e(n)}$) обращается к $L$ 
как к оракулу --- можно добиться того, чтобы длина всех её веток
была одинаковой %(обозначим ее $t(n)$) 
и во всех ветках было одно и то же число $l(n)$ обращений к $L$ 
(просто добавим <<пустые вычисления>> и <<бессмысленные обращения>> к $L$ 
там, где их <<не хватает>>). 

Вместо каждого обращения к оракулу, подставим в (дерево вычислений) $M$
дерево вычислений соответствующей вероятностной машины $N$ (вероятность
ошибки которой --- $2^{-i(n)}$). 
После этого в полученном дереве вычислений 
останутся только обращения к оракулу $A$. 

Принимающие (соответственно --- отвергающие) ветви, 
в которых оракул каждый раз отвечал так же,
как и соответствующее (ветви) вычисление $N$, 
останутся принимающими (соответственно --- отвергающими).
Среди них доля ошибочных вычислений составляет не более $2^{-e(n)}$.

Сколько имеется ветвей, которые могли изменить свой статус
по сравнению со статусом ветви машины $M$, из которой они получились?
Очевидно, для каждой ветви машины $M$ их доля составляет
не более $1-(1-2^{-i(n)})^{l(n)}$.

Итого доля ошибочных ветвей --- не более 
$2^{-e(n)} + 1-(1-2^{-i(n)})^{l(n)}$. 
Ясно, что можно подобрать $e(n)$ и $i(n)$ так,
чтобы эта доля была больше~$\frac{3}{4}$:
например, $e(n)=n$, $i(n)=nl(n)$ (заметим, что тем самым $i$ зависит
от $e$, т.е. $i$ надо выбирать после $e$).
%величина была больше $\frac{3}{4} 2^{t(n)}$. 
%Если $M$ с оракулом $L$ принимала некое слово $x$,
%принимающих вычислений в ней было <<много>>:  $> a*(1-2^p(n))$ 
%($a$ --- число ветвей). Если принимающих вычислений в оракуле $> b*(1- 2^q(n))$,
%то всего принимающих вычислений $> a(1-2^p(n))b^m(1-2^q(n))^m \ge 
%ab^m(1-2^p(n))(-m2^q(n))$ ---  ясно, что можно подобрать $p(n)$ и $q(n)$ так,
%чтобы эта величина была больше $\frac{3}{4}ab^m$. 
\end{proof}

\begin{proof}[Доказательство леммы~\ref{lem:opbpp}.]
$L$ принадлежит левой части --- значит, есть полиномиальная по времени НМТ $M$
с оракулом $B^A \in \BPP^A$, принимающая каждое слово $x\in\{0,1\}^n$ из $L$ 
для нечётного числа подсказок $y\in\{0,1\}^{\gamma(n)}$. Можно рассмотреть 
соответствующее полиномиально
проверяемое с оракулом $B^A$ отношение $R$:
$$R(x,y)=1 \Leftrightarrow
\textrm{$M$ принимает $x$ с подсказкой $y$}.$$
Тогда 
$$x \in L \Leftrightarrow \#\{y:(x,y) \in R\}\mathop{\not\vdots}2.$$
Заметим, что
$R \in \P^{B^{A}} \subseteq \P^{\BPP^A} \subseteq \BPP^{\BPP^{A}} \subseteq \BPP^A$
(по лемме~\ref{lem:bppbpp}),
т.е. существует полиномиальная по времени оракульная НМТ $\Pi$,
которая с оракулом $A$ на
доле $\ge 1-2^{-\pi(n)}$ (полином $\pi$ выберем позднее)
допустимых подсказкок $z\in \{0,1\}^{\zeta(n)}$
правильно вычисляет $R(x,y)$. 
%(введём по ней отношение $L(\Pi^{A})$ так же, как по $M$ ввели $R$). 
Имеем:
\begin{equation}\label{eq:opbpp1}
L = \left\{x\,\left|\,\#\left\{y:
\#\{z:(x,y,z)\in L(\Pi^A)\}
\ge(1-2^{-\pi(n)})2^{\zeta(n)}\right\}\mathop{\not\vdots}2\right.\right\}
\end{equation}

Остается доказать, что
\begin{equation}\label{eq:opbpp2}
L = \left\{x\,\left|\,\#\left\{z:
\#\{y: (x,y,z) \in L(\Pi^A)\}\mathop{\not\vdots}2\right\}
\ge\frac{3}{4}2^{\zeta(n)}\right.\right\} 
\end{equation}
(тогда этот язык, очевидно, можно распознать в $\BPP^{\OP^{A}}$).

При фиксированном $x$ построим таблицу (строчки занумерованы $y$-ми, 
столбцы --- $z$-ми), в клетке $(y,z)$ отметим результат работы $\Pi^A$
для данных $y,z$. 

Строчек, в которых много (более $(1-2^{-\pi(n)})2^{\zeta(n)}$)
единиц --- нечётное число для $x\in L$
и чётное для $x\notin L$; столбцов, каждый из которых содержит единицу
на пересечении с каждой этих строчек (и есть надежда, что тем самым
количество единиц в нём будет нужной четности), --- по крайней мере 
$2^{\zeta(n)}-2^{-\pi(n)}2^{\zeta(n)}2^{\gamma(n)}$. 

В остальных строчках единиц очень мало (менее $2^{-\pi(n)}2^{\zeta(n)}$),
поэтому они все вместе влияют на чётность не более 
$2^{-\pi(n)}2^{\zeta(n)}2^{\gamma(n)}$ столбцов.
Итого, нужной чётностью обладают по крайней мере
$2^{\zeta(n)}-2^{-\pi(n)}2^{\zeta(n)}2^{\gamma(n)}-
 2^{-\pi(n)}2^{\zeta(n)}2^{\gamma(n)}\ge\frac{3}{4}2^{\zeta(n)}$ столбцов
(достаточно выбрать $\pi(n)\ge\gamma(n)\mathop{+}3$).
%в которых нечётное число единиц --- много.
%Заметим, что столбцы, в которых все ответы --- правильные --- хорошие:
%в них единицы стоят как раз на пересечении с теми строчками,
%в которых <<много единиц>>. 
%Сколько может быть столбцов, содержащих неправильные ответы? 
%$q(n): \#y <= 2^q(n)$. 
%Выберем машину $\Pi$: вероятность её ошибки $< 2^{-q^{2}(n)}$. 
%Столбцов с неправильными ответами 
%$<= 2^q(n)*2^{-q^{2}(n)}*\#{z} = 2^{-q(n)}*\#{z}$. 
\end{proof}

\begin{proof}[Доказательство леммы~\ref{lem:opop}.]
Пусть язык $L$ принадлежит левой части, т.е. $x\in L \Leftrightarrow$ 
количество принимающих вычислений некоторой полиномиальной по времени
НМТ $N$ с оракулом $V\in\OP$ --- нечётно. 
Сконструируем по $N$ и $V$ НМТ $M$ (без оракула),
количество принимающих ветвей которой --- той же чётности, что и у $N^V$.

Для этого в тех вершинах дерева вычислений $N$,
где есть обращение к оракулу, вставим разветвление:
одна ветвь будет соответствовать положительному ответу оракула $V$, 
и мы подставим в неё дерево вычислений\footnote{Сейчас мы сконструируем
другую ветвь по лемме~\ref{lem:coop}; после этого следует искусственно
удлинить вычисления $V$, чтобы они были такой же длины, как и у машины,
сконструированной по лемме.} $V$, а вторая --- отрицательному,
мы подставим в неё дерево вычислений машины $\overline{V}$ 
(принимающей те и только те слова, которые $V$ отвергает).

{\small

\begin{lemma}\label{lem:coop}
\leftskip 1cm
Такая $\overline{V}$ существует, т.е. $\OP = \co\OP$. \end{lemma}
\begin{proof}
\leftskip 1cm
Вставим дополнительное разветвление (недетерминированный выбор)
на первом шаге, и в левом поддереве проделаем те же вычисления,
что и $V$, а в правом --- фиктивные вычисления той же длины,
из которых принимающим будет только первое. Таким образом,
чётность количества принимающих вычислений сменилась на
противоположную относительно $V$.
\end{proof}
}

%Вернёмся к доказательству леммы. 
Разветвление соответствует тому, что вместо того, чтобы обратиться
к оракулу $V$, мы недетерминированно угадываем его ответ и продолжаем
работу с этим ответом. Т.е. листья подставленных вычислений $V$ или
$\overline{V}$, в которых у $V$ и $\overline{V}$ были нули,
мы оставляем листьями с нулями, а в единичных листьях этих деревьев
продолжаем вычисления, используя соответствующий бит в качестве
ответа оракула.
% (эти деревья получились двух сортов, пусть количество единиц
%в листьях дерева одного сорта --- $a$, второго --- $b$).

Покажем, что чётность числа единиц в листьях поддерева,
следующего за обращением к оракулу, после такого преобразования дерева
не меняется. Ветвь, в которой мы не угадали ответ
оракула, на чётность числа единиц в листьях не влияет: подставленное в эту
ветвь дерево $V$ или $\overline{V}$ 
%(в отличие от дерева во второй ветви,
%с правильным ответом) 
имеет чётное число единиц в листьях.
% ($2m$) =>
%всего единиц в поддереве $2ma$ или $2mb$. 
Теперь рассмотрим ветвь, в которой мы дали верный ответ. 
Поддерево, которое мы здесь подставили
в листья-единицы, совпадает с тем поддеревом вычислений,
которое было в исходной машине после обращения к оракулу;
повторено оно нечётное количество раз, поскольку именно столько
вычислений $V$ или $\overline{V}$ закончилось листом-единицей.
\end{proof}

\end{document}

