Схемная сложность и класс P/poly — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Теоремы)
Строка 48: Строка 48:
 
}}
 
}}
  
{{Теорема
+
{{Лемма
 
|statement=
 
|statement=
<tex> \mathrm{P/poly} </tex> содержит неразрешимые языки.
+
Любой унарный язык принадлежит <tex> \mathrm{P/poly} </tex>.
 
|proof=
 
|proof=
Пусть <tex> L \subset \{0, 1\}^* </tex> {{---}} произвольный неразрешимый язык.  
+
Рассмотрим произвольный унарный язык <tex> L \subset \{1\}^* </tex>. Подсказкой для слова <tex> x </tex> будет единица, если слово длины <tex> |x| </tex> есть в <tex> L </tex>, иначе ноль. Машина Тьюринга получит на вход слово <tex> x </tex> и подсказку для слов длины <tex> |x| </tex>. Теперь произведем проверку, что <tex> x </tex> действительно из нашего унарного алфавита. Если это не так, то сразу же не допустим слово, иначе выведем значение подсказки. <br>
Пусть <tex> A = \{1^n | </tex> бинарное представление <tex> n </tex> принадлежит <tex> L \} </tex>.  
+
Таким образом, любой унарный язык принадлежит <tex> \mathrm{P/poly} </tex>.
<tex> \mathrm{P/poly} </tex> позволяет разрешить <tex> A </tex>. В качестве подсказки <tex> a_n </tex> для входа <tex> x </tex> будем передавать единицу, если <tex> 1^n \in A </tex>, иначе ноль. <br>
 
Язык <tex> A </tex> неразрешим, иначе можно было бы разрешить и <tex> L </tex>, что неверно. <br>
 
Таким образом, <tex> \mathrm{P/poly} </tex> содержит неразрешимые языки.
 
 
}}
 
}}
  
 
{{Теорема
 
{{Теорема
 
|statement=
 
|statement=
<tex> \mathrm{P} \ne \mathrm{P/poly} </tex>.
+
<tex> \mathrm{P/poly} </tex> содержит неразрешимые языки.
 
|proof=
 
|proof=
Это следует из предыдущей теоремы.
+
Рассмотрим произвольный неразрешимый язык <tex> L \subset \{0, 1\}^* </tex>. Построим язык <tex> A </tex> следующим образом: <tex> A = \{ 1^n | </tex> бинарное представление <tex> n </tex> принадлежит <tex> L \} </tex>. Унарный язык <tex> A \in \mathrm{P/poly} </tex>, но то же время <tex> A </tex> неразрешим, иначе можно было бы разрешить <tex> L </tex>. <br>
 +
Получается, что <tex> \mathrm{P/poly} </tex> содержит неразрешимые языки.
 
}}
 
}}
 
[[Категория: Теория сложности]]
 
[[Категория: Теория сложности]]

Версия 01:40, 5 июня 2012

Определения

Определение:
[math] \mathrm{PSIZE} [/math] — класс языков, разрешимых семейством логических схем [math] \{C_n\}_{n\gt 0} [/math] полиномиального размера с n входами и одним выходом.

[math] \mathrm{PSIZE} =\{L \bigm| \forall n [/math] [math] \exists C_n [/math]:

  1. [math] |C_n| \leqslant p(n)[/math], где [math] p [/math] — полином;
  2. Число входов в схеме [math] (C_n) [/math] равно [math] n [/math];
  3. Каждая схема [math] (C_n) [/math] имеет один выход;
  4. [math]x \in L \Leftrightarrow C_{|x|}(x) = 1 \}[/math].


Определение:
Пусть [math] \mathrm{C} [/math] — сложностный класс, [math] f [/math] — функция. Тогда [math] \mathrm{C}/f = \{L \bigm| [/math] существуют подсказки [math] a_0, a_1, \ldots , a_n, \ldots [/math] и программа [math] p [/math], удовлетворяющая ограничениям [math] \mathrm{C} [/math]:
  1. [math]|a_i| \leqslant f(i) [/math];
  2. [math] x \in L \Leftrightarrow p(x, a_{|x|})=1 \}[/math].


Определение:
[math] \mathrm{P/poly} = \bigcup\limits_{p \in poly} \mathrm{P}/p [/math].


Теоремы

Теорема:
[math] \mathrm{P} \subset \mathrm{PSIZE} [/math].
Доказательство:
[math]\triangleright[/math]
Пусть [math] L \in \mathrm{P} [/math]. Тогда существует машина Тьюринга [math] M [/math], распознающая язык [math] L [/math]. Составим логическую схему для [math] M [/math], как мы сделали в теореме Кука, ее размеры ограничены полиномом, она допускает только слова из языка. Отсюда следует, что [math] \mathrm{P} \subset \mathrm{PSIZE} [/math].
[math]\triangleleft[/math]
Теорема:
[math] \mathrm{PSIZE} = \mathrm{P/poly} [/math].
Доказательство:
[math]\triangleright[/math]

Докажем, что [math] \mathrm{PSIZE} \subset \mathrm{P/poly} [/math].
Пусть [math] L \in \mathrm{PSIZE} [/math], [math] x [/math] — входная строка. Тогда для [math] L [/math] существуют логические схемы [math] C_0, C_1, .., C_n, .. [/math]. В качестве подсказки для [math] x [/math] предоставим логическую схему [math] C_{|x|} [/math]. Программа [math] p [/math] получает на вход [math] x [/math] и [math] C_{|x|} [/math] и возвращает значение, вычисляемое [math] C_{|x|} [/math] для входа [math] x [/math]. Запишем программу

[math] p(x, C_{|x|}) [/math]:
    return [math]C_{|x|}(x) [/math]

Логическая схема [math] C_{|x|} [/math] имеет полиномиальный размер. Оба условия для [math] \mathrm{P/poly} [/math] выполнены, [math] \mathrm{PSIZE} \subset \mathrm{P/poly} [/math].

Докажем, что [math] \mathrm{P/poly} \subset \mathrm{PSIZE} [/math].

Пусть [math] L \in \mathrm{P/poly} [/math], [math] x [/math] — входная строка. Тогда для [math] L [/math] существуют подсказки [math] a_0, a_1, .. , a_n, .. [/math]. Программа [math] p [/math] по входу [math] x [/math] и подсказке [math] a_{|x|} [/math] определяет принадлежность [math] x [/math] языку [math] L [/math]. Зафиксируем длину входной строки [math] x [/math] как [math] n [/math]. Теперь запишем [math] p [/math] в виде логической схемы [math] C_m [/math] ( [math] m = n + |a_n| [/math]), которая принимает на вход слова длины [math] n [/math] и подсказку [math] a_n [/math]. Полученная схема будет полиномиального размера. Зашьем подсказку в самой схеме, то есть впишем в нее значения битов подсказки. Получим схему [math] C_n [/math] полиномиального размера, принимающую слова длины [math] n [/math] и определяющую их принадлежность языку [math] L [/math]. Такие схемы можно получить для любой длины входа. Значит, [math] \mathrm{P/poly} \subset \mathrm{PSIZE} [/math].
[math]\triangleleft[/math]
Лемма:
Любой унарный язык принадлежит [math] \mathrm{P/poly} [/math].
Доказательство:
[math]\triangleright[/math]

Рассмотрим произвольный унарный язык [math] L \subset \{1\}^* [/math]. Подсказкой для слова [math] x [/math] будет единица, если слово длины [math] |x| [/math] есть в [math] L [/math], иначе ноль. Машина Тьюринга получит на вход слово [math] x [/math] и подсказку для слов длины [math] |x| [/math]. Теперь произведем проверку, что [math] x [/math] действительно из нашего унарного алфавита. Если это не так, то сразу же не допустим слово, иначе выведем значение подсказки.

Таким образом, любой унарный язык принадлежит [math] \mathrm{P/poly} [/math].
[math]\triangleleft[/math]
Теорема:
[math] \mathrm{P/poly} [/math] содержит неразрешимые языки.
Доказательство:
[math]\triangleright[/math]

Рассмотрим произвольный неразрешимый язык [math] L \subset \{0, 1\}^* [/math]. Построим язык [math] A [/math] следующим образом: [math] A = \{ 1^n | [/math] бинарное представление [math] n [/math] принадлежит [math] L \} [/math]. Унарный язык [math] A \in \mathrm{P/poly} [/math], но то же время [math] A [/math] неразрешим, иначе можно было бы разрешить [math] L [/math].

Получается, что [math] \mathrm{P/poly} [/math] содержит неразрешимые языки.
[math]\triangleleft[/math]