Соотношение вероятностных классов — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «{{Теорема |statement = <tex>\mathrm{RP} \subset \mathrm{NP} \subset \mathrm{PP} \subset \mathrm{PS}</tex>. |proof = 1. <tex>\mathrm{RP} \subset \mathrm{NP}...»)
(нет различий)

Версия 23:40, 4 июня 2012

Теорема:
[math]\mathrm{RP} \subset \mathrm{NP} \subset \mathrm{PP} \subset \mathrm{PS}[/math].
Доказательство:
[math]\triangleright[/math]

1. [math]\mathrm{RP} \subset \mathrm{NP}[/math]. Если в программе для [math]L \in \mathrm{RP}[/math] заменить все вызовы random() на недетерминированный выбор, то получим программу для [math]L[/math] с ограничениями [math]\mathrm{NP}[/math].

2. [math]\mathrm{NP} \subset \mathrm{PP}[/math]. Приведем программу [math]q[/math] с ограничениями класса [math]\mathrm{PP}[/math], которая разрешает [math]L \in \mathrm{NP}[/math]. Пусть функция infair_coin() моделирует нечестную монету, а именно возвращает единицу с вероятностью [math]1/2 - \varepsilon[/math], где [math]\varepsilon[/math] мы определим позже, и ноль с вероятностью [math]1/2 + \varepsilon[/math]. Пусть также [math]V[/math] — верификатор сертификатов для [math]L[/math]. Тогда [math]q[/math] будет выглядеть следующим образом:

 [math]q[/math](x)
   c <- случайный сертификат
   if [math]V[/math](x, c)
     return 1
   return infair_coin()

Необходимо удовлетворить условию [math]\operatorname{P}(q(x) = [x \in L]) \gt 1/2[/math].

Пусть [math]x \notin L[/math]. В этом случае [math]V(x, c)[/math] вернет [math]0[/math] и результат работы программы будет зависеть от нечестной монеты. Она вернет [math]0[/math] с вероятностью [math]1/2 + \varepsilon \gt 1/2[/math].

Пусть [math]x \in L[/math]. Тогда по формуле полной вероятности [math]\operatorname{P}(q(x) = 1) = p_0 + (1 - p_0) (1/2 - \varepsilon)[/math], где [math]p_0[/math] — вероятность угадать правильный сертификат. Заметим, что поскольку длина всех сертификатов ограничена некоторым полиномом [math]s(n), n = |x|[/math] и существует хотя бы один правильный сертификат, [math]p_0 \ge 2^{-s(n)}[/math]. Найдем [math]\varepsilon[/math] из неравенства [math]\operatorname{P}(q(x) = 1) \gt 1/2[/math]:

[math]p_0 + 1/2 - \varepsilon - p_0 / 2 + p_0 \varepsilon \gt 1/2[/math];

[math]p_0 / 2 + (p_0 - 1)\varepsilon \gt 0[/math];

[math]\varepsilon \lt \frac{p_0}{2 (1 - p_0)}[/math].

Достаточно взять [math]\varepsilon \le p_0 / 2[/math]. Из сделанного выше замечания следует, что работу функции infair_coin() можно смоделировать с помощью не более чем [math]s(n) + 1[/math] вызовов random(). Также учтем, что длина сертификата и время работы [math]V[/math] полиномиальны относительно [math]|x|[/math]. Таким образом, мы построили программу [math]q[/math], удовлетворяющую ограничениям класса [math]\mathrm{PP}[/math].

3. [math]\mathrm{PP} \subset \mathrm{PS}[/math]. Пусть [math]p[/math] — программа для языка [math]L \in \mathrm{PP}[/math]. Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для [math]\mathrm{PS}[/math] будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них [math]p[/math]. Ответом будет [math]0[/math] или [math]1[/math] в зависимости от того, каких ответов [math]p[/math] оказалось больше.
[math]\triangleleft[/math]

Литература