Рассмотрим основные понятия логики предикатов, на которых базируется язык логического программирования – Пролог. Элементарные фразы логики предикатов, либо другими словами - высказывания, представляют собой атомы.
Атомы логики предикатов, состоящие из символов четырех видов.
Переменные, например: X, Book.
Индивидные константы служат именами индивидуумов объектов, людей или событий, например:
"Карандаш", "Марина", "Книга".
Предикатные константы или имена предикатов задают правила соединения констант и переменных, например: «Писать», «Вычислять».
Функциональные константы или имена функций представляют такие же правила, как и предикаты, с целью различения имен предикатов и имен функций, функциональные имена пишут одними строчными буквами, например: «писать», «вычислять», «плюс».
Для представления констант, переменных, предикатов и функций будет использоваться латинский алфавит.
Эти основные символы используются при формировании следующих трех понятий.
Терм есть переменная или функция, где функция представляет собой функциональную константу, соединенную с подходящим числом термов. Если f является функциональной n-местной константой и t1,…,tn – термы, то соответствующая форма обозначается f(t1,…,tn). Если n=0, то функция f() обозначается через f и является индивидной константой.
Предикатом называется предикатная константа, соединенная подходящим числом термов. Если P является предикатной m-местной константой и t1,…,tm – термы, то соответствующая форма обозначается P(t1,…,tm). Если m=0, то предикат P() обозначается через P и называется высказыванием.
Формулы строятся по индукции из атомов с помощью логических связок (операций) (не (`not`), конъюнкция (`^^`), дизъюнкция (`vv`), импликация (`->` ), тождественность (=)) и кванторов общности (`AA`) и квантора существования ( `EE`).
Базис: любой атом является формулой.
Индукционный шаг: если X и Y являются формулами, а x – это переменная, то `not` X, X`^^` Y, X `vv` Y, X`->` Y, X=Y.
Ограничение: формула получается только с помощью правил базиса и индукционного шага.
Формулы могут получать значения истинности (истина, ложь) либо, другими словами, быть проинтерпретированы.
Таблица 1.Таблица истинности для отрицания
X | ¬X |
ложь | истина |
истина | ложь |
Таблица 2.Таблица истинности для логических связок
X |
Y |
X`^^`Y |
X`vv`Y |
X`|->` Y |
X = Y |
ложь |
ложь |
ложь |
ложь |
истина |
истина |
ложь |
истина |
ложь |
истина |
истина |
ложь |
истина |
ложь |
ложь |
истина |
ложь |
ложь |
истина |
истина |
истина |
истина |
истина |
истина |
Проиллюстрируем синтаксис логики предикатов, сопоставляя несколько фраз, представленных на естественном языке, с помощью языка логики.
Женя посылает книгу Марине / посылка (женя, марина, книга);
Здесь, посылка - предикатная константа;
женя, марина, книга - индивидные константы;
В следующих примерах демонстрируется использование кванторов общности.
Каждый человек прогуливается / `AA` X (человек(X) `larr` прогуливаться(X));
Некоторые люди прогуливаются /`EE` X (человек(X) `^^` прогуливаться(X));
Ни один человек не прогуливается / `not` ( X (человек(X) `^^ ` прогуливаться(X))).
Здесь, человек, прогуливаться - предикатные константы;
X - переменная.