Sharp SAT
Определение
имеет удовлетворяющих наборов
Утверждение
Доказательство
Для доказательства будем строить вероятностную программу Verifier, которая хочет проверить, верно ли, что заданная формула фи имеет ровно к удовлетворяющих наборов. Программа Verifier может совершить не больше полинома от длины входа шагов, а также может обращаться к программе Prover, которая пытается любым возможным способом убедить нас (т.е. Verifier) в верности рассматриваемого утверждения.
Программа Verifier будет выполнять следующие шаги.
Пусть формула
каким либо образом записана. Сделаем следующие замены и получим формулу :Заметим, что длина формулы возрастет не больше, чем в константу раз.
Итак, надо проверить следующее арифметическое уравнение:
.Попросим программу Prover прислать нам простое число p > 2^n, и сертификат о его простоте. Проверим простоту p по сертификату, и условие p > 2^n.
Заметим, что если какое-либо проверяемое условие не выполнено, то программа Verifier сразу завершается и возвращает false, т.к. Prover нас обманывает, а значит, нет правильного доказательства проверяемого утверждения.
Будем проверять уравнение по модулю p.
Пусть
.Попросим программу Prover прислать нам формулу A_0(x_1)???. Проверим следующее утверждение: A0(0) + A0(1) = k???.
Пусть r_1 = random(p). Пусть
.Попросим программу Prover прислать нам формулу A_1(x_2). Проверим следующее утверждение: A_1(0) + A_1(1) = A_0(r_1).
Продолжим так делать.
Пусть r_n = random(p). Пусть
.Попросим программу Prover прислать нам формулу A_n(). Проверим следующее утверждение: A_n = A_n-1(r_n).
Вероятность ... .