Лемма о соотношении coNP и IP
| Определение: | 
| имеет ровно удовлетворяющих наборов . | 
Введём понятие арифметизации булевых формул. Пусть нам дана формула . Сделаем следующие преобразования и получим формулу :
- ;
- ;
- ;
- .
Заметим, что длина формулы при этом возрастёт не более, чем в константу раз.
| Лемма (1): | 
| . | 
| Лемма (2): | 
| . | 
| Доказательство: | 
| Следует из леммы (1). | 
| Лемма (3): | 
| . | 
| Доказательство: | 
| Для доказательства леммы построим программы Verifier и Prover из определения класса . Сперва арифметизуем формулу . Пусть полученный полином имеет степень . По лемме (2) вместо условия , можно проверять условие . Приступим к описанию Verifier'а. Шаг 0 Запросим у Prover'а такое простое число , что . Проверим простоту и условие (константу определим позднее). Как мы знаем, , следовательно на эти операции у Verifier'а уйдёт полиномиальное от размера входа время. Далее будем проводить все вычисления модулю . Попросим Prover 'а прислать Verifier 'у формулу . Заметим, что размер формулы будет полином от длины входа Verifier 'а, так как полином от одной переменной степени не выше, чем , а значит его можно представить в виде . Проверим следующее утверждение: (здесь и далее под словом «проверим» будем подразумевать следующее: если утверждение верно, Verifier продолжает свою работу, иначе он прекращает свою работу и возвращет false). Шаг i Пусть . Отправим программе Prover. Пусть . Попросим Prover 'а прислать Verifier 'у формулу . Проверим следующее утверждение: . Шаг m Пусть . Отправим программе Prover. Попросим программу Prover прислать Verifier 'у значение . Проверим следующее утверждение: . А также сами подставим в и проверим правильность присланного значения .Возвращаем true. | 
| Лемма (4): | 
| . | 
| Доказательство: | 
| Сведём язык к языку следующим образом: , где — количество различных переменных в формуле . Очевидно, что .По лемме (3) . Тогда . Так как , то . | 
