
- •1. ИСПОЛЬЗОВАНИЕ ЯЗЫКА ПРОЛОГ
- •2. ЛОГИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ПРОЛОГ
- •2.1. Представление знаний и фактов
- •2.2. Исчисления логического типа
- •2.3. Исчисление резольвент
- •3. МЕХАНИЗМ РАБОТЫ ИНТЕРПРЕТАТОРА ПРОЛОГ-МАШИНЫ
- •Трассировка доказательства теоремы
- •4. ЯЗЫК ПРОЛОГ
- •4.1. Объявления
- •4.2. Данные и константы
- •Типы данных в Прологе
- •4.3. Управление возвратом
- •5. ВСТРОЕННЫЕ ПРЕДИКАТЫ И ФУНКЦИИ
- •5.1. Арифметические вычисления
- •5.2. Ввод и вывод
- •5.3. Текстовые окна и управление экраном
- •5.4. Обработка строк и преобразование типов
- •5.5. Базы данных
- •5.6. Вспомогательные средства
- •6. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА ПРОЛОГ
3.Замена переменных с повторяющимися именами на уникаль
ные.
4.Исключение кванторов существования заменой вида:
"x($yP(x,y)) = "xP(x, f(x)). Функция f(x) называется сколемовской функцией и позволяет обозначить существующий элемент y = f(x).
5. Вынесение кванторов и запись формул в приведенной форме вида "x1..."xk Q .
6. Приведение Q к конъюнктивной нормальной форме вида
q |
m |
Q= ¿ |
¿ Pij . |
i=1 |
j=1 |
7.Исключение кванторов общности.
8.Запись списков Гi = Pi1, Pi2, ... , Pim; i=1, ... , q.
К полученным из аксиом спискам Г1; ... ; Гq следует добавить списки Г0, полученные из отрицания формулы Т, которую следует доказать как теорему. Если исходный набор дизъюнктов Г1; ... ; Гq был непротиворечив и Т – теорема, то объединенный набор Г0; Г1;... ; Гn будет противоречивым или невыполнимым. Поэтому в ис числении R(Г0; Г1; ... ; Гn) доказуем пустой список дизъюнктов.
Логической основой языка Пролог является исчисление резоль вент для хорновских дизъюнктов. Хорновские дизъюнкты имеют единственный предикатный литерал без символа отрицания, то есть имеют вид P0, ~P1, ... , ~Pm. Подобное ограничение позволяет упро стить механизм работы интерпретатора Пролог-машины и придать Пролог-программам процедурную интерпретацию. Последнее суще ственно облегчает эффективную реализацию систем программиро вания.
3. МЕХАНИЗМ РАБОТЫ ИНТЕРПРЕТАТОРА ПРОЛОГ-МАШИНЫ
Программа на Прологе является набором аксиом вида А(x1, ..., xk) :– А1(x1, ..., xk) , ... , Аn(x1, ... , xk),
соответствующих высказываниям вида
"x1 ... "xk (A1(...) &...& An(...) É A(...)),
и теоремы A1(...), ... , Aq(...), соответствующей высказыванию $x1 ... $xk(A1(...) & ... & Aq(...)).
После преобразования формул в список получим для аксиом
~(A1 & ... & An) A = A ~A1 ... ~An ;
для теоремы
~( x1 ... xk(A1 &...& Aq) = x1 ... xk (~A1 ... ~Aq) → ~A1 ... ~Aq. Списки литералов А1, ... , Am в аксиомах и теореме, учитывая на личие отрицаний, будем называть "минус-частью" предложения. Предложение, не содержащее "минус-части", описывает безуслов
ное высказывание или факт.
Условием применения правила резолюции для двух предложе ний является полное текстуальное совпадение литералов в Ai(...) и ~Ai(...). Для достижения этого (если это возможно) выполняется уни фицирующая подстановка (x1,...,xk / t1, ... ,tk ) в оба литерала. Замена переменных xj на термы tj называется совмещением или унификаци ей. Из всех возможных подстановок механизм унификации выбира ет минимальный по числу присваиваний вариант. Примерами могут служить следующие подстановки (x, y, z – переменные; a – терм ) :
{P(x), P(a)}(x / a) → P(a)
{P(f(x), y, g(y)), P(f(x), z, g(x))}(y, z / x, x) → P(f(x), x, g(x)) {P(a), P(f(x))} – неунифицируемые литералы.
Следует напомнить, что заменять в подстановке можно только переменные на термы, но не наоборот, что следует из смысла кван тора всеобщности: для любого x, в том числе и для t, имеет место истинность предиката P. Механизм унификации является единственным средством в Прологе для присваивания значений переменным литералов. Отсюда же следует и важное свойство: в пределах программы переменная не может быть означена более одного раза.
При доказательстве теоремы интерпретатор Пролог-машины реализует следующий алгоритм.
1.Обработка теоремы производится применением правила ре золюции к литералам "минус-хвоста" последовательно слева напра во.
2.Для левого "минус-литерала" среди аксиом программы отыс кивается первая, "плюс-часть" которой может быть совмещена с ли тералом.
3.Если не удалось найти такой аксиомы, то управление переда ется механизму возвратов (backtracking) к п.6.

4.Все вхождения переменных, означенных при совмещении, за меняются на термы-значения. Замена производится как в литералах "минус-хвоста" теоремы, так и в "минус-части" аксиомы.
5.Модифицированная "минус-часть" аксиомы подставляется на место удаляемого литерала "минус-хвоста" теоремы, что соответ ствует получению резольвенты двух предложений : "минус-хвоста" и найденной аксиомы. Процесс продолжается с шага 2.
6.Обработка очередного литерала считается неудачной и осу ществляется возврат к обработке "минус-литерала", непосредствен но предшествующему данному.
7.Производится очистка всех переменных, означенных при по следнем совмещении. Переменные становятся вновь свободными.
8.Отыскивается очередная аксиома (начиная с непосредствен но следующей за только что использованной), совместимая с рассматриваемым литералом. Иди к п. 3.
При доказательстве теоремы Пролог-машина реализует страте гию поиска "в глубину" при обходе дерева вывода. Результат дока зательства теоремы – значения переменных, удовлетворяющие тре бованиям, и дерево доказательства – существенно зависит от по рядка аксиом в программе. Это объясняется неединственностью ре
шения поставленной задачи xQ .
Приведем пример программы на Прологе:
смертен(Х) :– человек(Х). |
(1) |
||
человек("Тьюринг"). |
(2) |
||
человек("Сократ"). |
(3) |
||
грек("Сократ"). |
(4) |
||
Доказательство теоремы |
|
||
смертен(Х), грек(Х), write(X). |
(5) |
||
сведено в табл. 1. |
|
||
|
|
|
Таблица 1 |
|
Трассировка доказательства теоремы |
||
|
|
|
|
Номер |
Присваивания при сов |
|
Минус-хвост |
клоза |
мещении |
|
|
5 |
– |
|
смертен(Х), грек(Х), write(X) |