ВУЗ:
(Маша находится в X) → (Машин ягненок находится в X),
где X означает произвольное местоположение и еще одно высказывание
(Маша находится дома).
Рис. 5.20. Резолюция высказываний (Р OR Q), (R OR ¬Q), ¬R и ¬Q
В форме предложения эти высказывания принимают следующий вид:
(Машин ягненок находится в X) OR ¬(Маша находится в X)
и
(Маша находится дома).
На первый взгляд может показаться, что эти предложения не имеют компонентов, которые можно подвергнуть резолюции.
Однако компоненты (Маша находится дома) и ¬ (Маша находится в X) почти противоречат друг другу. Задача за-
ключается в том, чтобы установить истинность высказывания (Маша находится в X), которое является высказыванием о
местонахождении вообще и о доме в частности.
Таким образом, частный случай первого высказывания имеет вид
(Машин ягненок находится дома) OR ¬(Маша находится дома)
который может быть сведен путем резолюции с высказыванием
(Маша находится дома)
к высказыванию вида
(Машин ягненок находится дома)
Процесс присваивания значений переменным (например, присвоение значения "дом" переменной X), который делает
возможным выполнение резолюции, называется унификацией. Это процесс, который позволяет применять общие высказы-
вания к частным приложениям в дедуктивной системе.
Язык Prolog. Prolog (PROgramming in LOGic – программирование в логике) – это декларативный язык программирова-
ния, базовый алгоритм решения задач которого основан на методе повторной резолюции. Программа на языке Prolog состоит
из совокупности исходных высказываний, с помощью которых базовый алгоритм выполняет свои дедуктивные рассуждения.
Компоненты, из которых состоят эти высказывания, называются предикатами. Предикат состоит из идентификатора преди-
ката, за которым в скобках следуют аргументы предиката. Отдельный предикат представляет собой некоторый факт в отно-
шении его аргументов, а идентификатор предиката обычно выбирается так, чтобы отразить его семантику. Таким образом,
если мы хотим выразить тот факт, что Билл – отец Мери, мы можем использовать следующую предикатную форму:
parent(bill, mary).
Обратите внимание, что аргументы в этом предикате начинаются со строчных букв, даже если речь идет об именах соб-
ственных. Это происходит потому, что язык Prolog различает константы и переменные и требует, чтобы константы начина-
лись со строчных букв, а переменные – с прописных.
Операторы в языке Prolog являются либо фактами, либо правилами. Каждый из операторов заканчивается точкой. Факт
состоит из отдельного предиката. Например, тот факт, что черепаха (turtle) двигается быстрее улитки (snail), выражается
оператором языка Prolog следующего вида:
faster(turtle,snail).
А тот факт, что кролик (rabbit) бегает быстрее черепахи, выражается оператором
faster(rabbit,turtle).
Правило в языке Prolog – это оператор импликации (следования). Вместо записи оператора в виде X → Y программист
на языке Prolog пишет "Y, если X", используя вместо слова "если" символы : –. Таким образом, правило "из того, что X бы-
стрее (faster) Y, a Y быстрее Z, следует, что X быстрее Z" может быть выражено специалистом-логиком в следующем виде:
(faster(X,Y) AND faster (Y,Z)) → faster(X,Z)
На языке Prolog это же правило выражается следующим образом:
faster(X,Z) :- faster(X,Y), faster(Y,Z).
Запятая, разделяющая термы faster(X,Y) и faster(Y,Z), представляет оператор конъюнкции AND (И). Такие
правила легко могут быть преобразованы программным обеспечением языка Prolog в форму предложения.
Учтите, что система языка Prolog ничего не знает о значении предикатов в программе, она просто манипулирует выска-
зываниями, формально применяя правило резолюции. Таким образом, описание всех относящихся к делу свойств предика-
тов в терминах фактов и правил входит в обязанности программиста. В этом смысле факты в языке Prolog обычно использу-
ются для конкретизации примеров предиката, а правила – для описания общих принципов. Этому подходу соответствуют
предыдущие операторы, относящиеся к предикату faster. Два факта описывают конкретные примеры свойства "двигаться
Страницы
- « первая
- ‹ предыдущая
- …
- 134
- 135
- 136
- 137
- 138
- …
- следующая ›
- последняя »