3
1 Основы теории алгоритмов
Ранее мы занимались изучением языков, предназначенных для описания рассуждений.
Теперь мы “поменяем угол зрения” и будем рассматривать языки, предназначенные
для записи конкретных действий. Языки логики предикатов относятся к классу де-
кларативных (описательных): смысл элемента такого языка (формулы) заключается
в описании чего-либо. Те же языки, к изучению которых мы приступаем, можно на-
звать языками инструкций, так как их элементы, называемые часто инструкциями,
являются предписаниями исполнителю (человеку, компьютеру, другому вычислитель-
ному устройству) совершить определенный набор действий. Поскольку набор точных
инструкций для выполнения конкретных действий принято называть алгоритмом или
программой, такие языки инструкций часто называются алгоритмическими языками
или языками программирования. Последние два термина часто употребляются в слегка
разных контекстах: под языком программирования обычно понимают язык инструк-
ций для реально существующего вычислительного устройства – компьютера (Fortran,
Basic, Pascal, C++ и т.п.), а термин алгоритмический язык употребляется в более
широком смысле и включает в себя как языки программирования, так и другие языки
инструкций, в частности псевдоязыки, предназначенные для описания алгоритмов.
Смещение нашего внимания с логических языков на языки инструкций обусловлено
желанием дать ответы на те вопросы, котроые остались открытыми в нашем иссле-
довании возможностей логических языков, а именно, на вопросы о том, каким обра-
зом проверять истинность различного рода семантических утверждений о формулах
языков логики предикатов (например, как проверить, является ли заданная формула
языка логики первого или второго порядка тавтологией). Мы уже отметили, что непо-
средственная проверка семантических свойств формул логических языков при помощи
определений практически никогда не представляется возможной, и поэтому специально
рассмотрели механизмы, предназначенные для конструктивной проверки семантиче-
ских свойств (формальные системы). Мы также доказали, что среди таких механизмов
есть “хорошие”, то есть одновременно корректные и полные, по крайней мере для язы-
ков логики первого порядка. Пользуясь такой формальной системой, можно заменить
проверку того, является ли данная формула тавтологией, на поиск вывода данной фор-
мулы при помощи формальной системы из пустого множества посылок (иначе говоря,
поиску доказательства данной формулы из пустого множества посылок). Однако, оста-
ется неясным, каким образом искать такой вывод. Можно ли, например, предъявить
конкретный алгоритм вывода любой тавтологии? Интересен и другой вопрос: можно
ли предъявить такой алгоритм, который по заданной формуле логического языка даст
однозначный ответ, выводима ли данная формула из пустого множества посылок, то
есть является ли тавтологией, или нет?
Мы пока подобного рода вопросами не интересовались. Кстати, на практике многие
люди и не интересуются ими. Например, математики ищут доказательства математи-
ческих утверждений, как правило не задумываясь о том, можно ли предъявить уни-
версальный алгоритм их поиска. Подобного рода вопросы можно, конечно, задавать не