Sharp SAT — различия между версиями
SVKazakov (обсуждение | вклад) |
SVKazakov (обсуждение | вклад) |
||
Строка 68: | Строка 68: | ||
Доказательство: | Доказательство: | ||
− | # Из программы <tex>Verifier</tex> видно, что она работает за <tex> | + | # Из программы <tex>Verifier</tex> видно, что она работает за <tex>O(poly(|input|))</tex>. |
# Если <tex>\varphi</tex> имеет ровно <tex>k</tex> удовлетворяющих наборов, то существует такая программа <tex>Prover</tex>, что <tex>P(VP(x)) = 1</tex>. Такая программа: | # Если <tex>\varphi</tex> имеет ровно <tex>k</tex> удовлетворяющих наборов, то существует такая программа <tex>Prover</tex>, что <tex>P(VP(x)) = 1</tex>. Такая программа: | ||
## Присылает, например, первое простое число, большее <tex>max(2^n, k_p)</tex>, и сертификат. | ## Присылает, например, первое простое число, большее <tex>max(2^n, k_p)</tex>, и сертификат. |
Версия 22:10, 25 апреля 2010
Определение
имеет удовлетворяющих наборов
Утверждение
Доказательство
Для доказательства будем строить вероятностную программу
, которая хочет проверить, верно ли, что заданная формула имеет ровно удовлетворяющих наборов. Программа может совершить не больше полинома от длины входа действий, а также может обращаться к программе , которая пытается любым возможным способом убедить в верности рассматриваемого утверждения.Далее в программе
будем писать "проверим ...", что означает проверку соответствующего условия, и, при ложности, будет сразу завершаться и возвращать , т.к. её обманывает, а значит, нет правильного доказательства проверяемого утверждения.будет выполнять следующие шаги.
Шаг 0.
Пусть формула
каким-либо образом записана. Пусть формула имеет переменных и степень . Сделаем следующие замены и получим формулу :Заметим, что длина формулы возрастет не больше, чем в константу раз.
Итак, надо проверить следующее арифметическое уравнение:
.Попросим
'а прислать 'у простое число и сертификат о его простоте. Проверим простоту по сертификату и условие . Константу определим позднее.Далее будем проводить весь счет и проверять уравнение по модулю
.Пусть
.Попросим
'а прислать 'у формулу . Проверим следующее утверждение: .Заметим, что размер формулы
будет полином от длинны входа 'а. Этот факт следует из того, что формула имеет степень меньшую либо равную , и она от одной переменной. Поэтому её можно представить так: , и попросить 'а прислать только сами коэффициенты по модулю .Шаг 1.
Пусть
. Отправим программе .Пусть
.Попросим
'а прислать 'у формулу . Проверим следующее утверждение: .Шаг 2.
...
Шаг
.Пусть
. Отправим программе .Пусть
.Попросим программу
прислать 'у значение . Проверим следующее утверждение: . А также сами подставим в и проверим правильность присланного значения .Возвращаем
.
Итак, остается доказать, что написанный - корректный для языка . Таким образом, нужно доказать:
- Построенный - вероятностная машина Тьюринга, совершающая не более полинома от длинны входа действий.
- .
- .
Доказательство:
- Из программы видно, что она работает за .
- Если
- Присылает, например, первое простое число, большее , и сертификат.
- Считает сумму и присылает формулу.
- Получает .
- Считает сумму и присылает формулу.
- ...
имеет ровно удовлетворяющих наборов, то существует такая программа , что . Такая программа:
- Пусть имеет не удовлетворяющих наборов. Тогда для того, что бы вернул , необходимо 'у посылать такие , чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:
Шаг 0.
Так как
имеет не удовлетворяющих наборов, то не может послать правильное – не выполнится условие . Поэтому он посылает не , а некое .Шаг 1.
Во первых, отметим, что ситуация леммы Шварца-Зиппеля. Таким образом, с вероятностью большей либо равной и, ввиду того, что должно выполняться условие , получаем, что тоже будет неправильное, т.е. некоторое .
происходит с вероятностью меньшей либо равной для некоторого случайно выбранного , что следует изШаг 2.
...
Шаг
.С вероятностью
, и потому получит не , а .Из этого процесса заметим, что с вероятностью большей либо равной
мы дойдем до последнего шага и будем имееть вместо . Так как на шаге вычисляет и проверяет значение, то вернет .Так как мы хотим сделать вероятность возврата
большую либо равную , то выберем так, чтобы .Утверждение доказано.