Sharp SAT
Определение
имеет удовлетворяющих наборов
Утверждение
Доказательство
Для доказательства будем строить вероятностную программу , которая хочет проверить, верно ли, что заданная формула имеет ровно удовлетворяющих наборов. Программа может совершить не больше полинома от длины входа действий, а также может обращаться к программе , которая пытается любым возможным способом убедить в верности рассматриваемого утверждения.
Далее в программе будем писать "проверим ...", что означает проверку соответствующего условия, и, при ложности, будет сразу завершаться и возвращать , т.к. её обманывает, а значит, нет правильного доказательства проверяемого утверждения.
будет выполнять следующие шаги.
Шаг 0.
Пусть формула каким либо образом записана. Пусть формула имеет переменных и степень . Сделаем следующие замены и получим формулу :
Заметим, что длина формулы возрастет не больше, чем в константу раз.
Итак, надо проверить следующее арифметическое уравнение: .
Попросим прислать 'у простое число и сертификат о его простоте. Проверим простоту по сертификату, и условие . Константу определим позднее.
Будем проверять уравнение по модулю .
Пусть .
Попросим прислать 'у формулу . Её размер???. Проверим следующее утверждение: .
Шаг 1.
Пусть . Отправим программе .
Пусть .
Попросим прислать 'у формулу . Проверим следующее утверждение: .
Шаг 2.
...
Шаг .
Пусть . Отправим программе .
Пусть .
Попросим программу Prover прислать 'у значение . Проверим следующее утверждение: . А также сами подставим в и проверим правильность присланного значения .
Возвращаем .
Итак, остается доказать, что написанный - корректный для языка . То есть, нужно доказать:
- Построенный - вероятностная машина Тьюринга, совершающая не более полинома от длинны входа действий.
- .
- .
Доказательство:
- Из программы видно, что она работает за .
- Если имеет ровно удовлетворяющих наборов, то существует программа , такая что . Такая программа:
- Присылает, например, первое простое число большее и сертификат.
- Считает сумму и присылает формулу.
- Получает .
- Считает сумму и присылает формулу.
- ...
Ввиду того, что все делает хорошо и нигде не ошибается, то дойдет до конца программы и вернет .
- Пусть имеет не удовлетворяющих наборов. Тогда для того, что бы вернул , необходимо 'у посылать такие , чтобы выполнялись все проверяемые условия. Посмотрим на то, что он может послать:
Шаг 0.
Так как имеет не удовлетворяющих наборов, то не может послать правильное – не выполнится условие . Поэтому он посылает не , а некое .
Шаг 1.
Во первых, отметим, что ситуация происходит с вероятностью меньшей либо равной для некоторого случайно выбранного , что следует из леммы Шварца-Зиппеля. То есть, с вероятностью большей либо равной и, ввиду того, что должно выполняться условие , получаем, что тоже будет не правильное, т.е. некоторое .
...
Шаг .
С вероятностью и потому получит не , а .
Из этого процесса заметим, что с вероятностью большей либо равной мы дойдем до последнего шага и будем имееть вместо . Так как на шаге вычисляет и проверяет значение, то вернет .
Так как мы хотим сделать вероятность возврата большую либо равную , то выберем так, чтобы .
Утверждение доказано.