- Имеется выражение, состоящее из булевых переменных $p_1,\ldots,p_n$ и
логических связок $\neg,\lor,\land,\Rightarrow$. Как доказать, что оно
выполнимо, т. е. что вместо $p_1,\ldots,p_n$ можно подставить
TRUE или FALSE так, что значение всего выражения окажется равным TRUE? Ответ
очевиден: предъявить подстановку и проверить ее прямым вычислением.
- А как быстро доказать, что данное булево выражение невыполнимо? Короткого
доказательства, скорее всего, не существует. Однако можно попытаться вывести
противоречие из имеющихся аксиом с помощью хорошо известных в математической
логике правил вывода.
- А как доказать, что компьютерный чип или программа удовлетворяют требуемым
спецификациям? Ответ: закодировать этот факт в виде булевого выражения, после
чего воспользоваться алгоритмами, разработанными для предыдущей задачи.
- Наконец, пусть имеется система полиномиальных уравнений или неравенств. Как
доказать, что она несовместна? Ответ: воспользоваться теоремой Гильберта о
нулях или ее вещественным аналогом, известным как Positivestellensatz.
Короткими при этом будут считаться доказательства, использующие исключительно
полиномы малой степени.
Общим для всех этих ситуаций является то, что нас интересует не только
наличие доказательства верных фактов (скажем, теорем), но и то, насколько
«простым» оно может или не может быть. Несмотря на кажущуюся
разнородность всех этих вопросов, их изучение в рамках одной дисциплины
оказывается весьма продуктивным, и именно об этом мы и поговорим.
Специальных знаний для понимания курса не требуется, хотя самое общее
представление о пропозициональной (булевой) логике было бы полезно.