Типичным представителем языка программирования для описания последовательности действий в процессе логического вывода является Prolog.
Пролог-программа состоит из предложений, которые бывают трех типов: факты, правила и вопросы.
· Факты есть повествовательные предложения, имеющие значение только “истина” (см. 1.5). Множество фактов формирует так называемую экстенсиональную базу знаний о предметной области.Правила это условные предложения, истинность заключения которых зависит от истинности условий, поэтому в структуру правила включены предметные переменные, имена которых начинаются с прописной буквы и предметные постоянные, имена которых начинаются со строчной буквы. Множество правил формирует интенсиональную базу знаний о предметной области и определяет механизм достижения цели при заданных условиях.
Левая часть правила — <�голова> — есть формализованное описание заключения, а правая часть правила – <�тело> — формализованное описание условий, определяющих истинность вывода заключения, т.е.
<�голова>:-<�тело>”.”
Символ “:-“ соответствует символу обратной импликации ”¬”.
Если множество условий имеют между собой конъюнктивную связь, то между ними ставится запятая, т.е.
<�заключение>:-<�условие>{“,”<�условие>}”.”.
Если условия имеют между собой дизъюнктивную связь, то между ними ставится точка с запятой, т.е.
<�заключение>:-<�условие>{“;”<�условие>}”.”.
На языке Prolog эти правила записывают так:
<�заключение>:-
<�условие_1>”,”
<�условие_2>”;”
<�условие_3>”.”
Голова предложения при написании программы всегда сдвинута влево относительно перечня условий. Каждое условие начинается с новой строки.
Смысл этого правила таков:“если истинны условия 1 и 2 или 3, то истинно и заключение ”.
Предметные переменные и предметные постоянные являются аргументами заключения и условий.
Если тело пусто, то голова есть истинное утверждение или аксиома. Факты –это предложения, имеющие пустое тело.
<�заключение>”.”.
Если голова пуста, то тело продставляет вопрос, т.е.
? — <�тело>”.”.
С помощью вопросов пользователь может спрашивать систему о том, какие утвреждения являются истинными или ложными. Предметные переменные, включаемые в вопросы, сравниваются с помощью правил с предметными постоянными, вкючаемыми в факты, и система формирует ответ.
Например, множество правил для определения степени родства:
дед(X, Y):-
родитель(X, Z),
родитель(Z, Y).
брат(X, Y):-
родитель(Z, X),
потомок(X; U; Z, Y):-
родитель(Y, Z),
родитель(Z, U),
родитель(U, X).
родитель(Z, Y).
можно применить к родословной русских князей X века:
отец(игорь, святослав).
отец(святослав,владимир).
отец(владимир, борис).
отец(владимир,глеб).
?-дед(святослав, Y).
Y=борис.
Y=глеб.
?-брат(X, Y).
X=борис.
Y=глеб.
?-потомок(X; Y; Z, игорь).
Z=святослав.
U=владимир.
X=борис.
X=глеб.
Предметные переменные заключения, как правило, связаны квантором общности, а для условий — квантором существования. Например, правило “дед(X, Y):- родитель(X, Z), родитель(Z, Y)” утверждает, что если для всех X и Y существует Z, то X -дед для Y.
Правило “брат(X, Y):-родитель(Z, X), родитель(Z, Y)” утверждает, что если для всякого X и Y существует общий Z, то X брат Y.
Рассмотренный метод обобщает механизм унификации. Аргументы вызова это имена переменных, которые подставляют на место формальных параметров. Формальными параметрами могут быть термы. Поэтому процесс вызова включает совмещение термов, являющихся аргументами вызова с термами иззаголовка.
В отличие от общепринятых алгоритмических языков языки логического программирования не определяют жесткой последовательности действий в процессе вывода, а, уделив основное внимание структуре задачи и множеству правил вывода, допускают несколько последовательностей действий в решении одной задачи. Выполнение программы на языке Prolog осуществляется специальной программой-интерпретатором, осуществляющей пооператорную обработку запроса, опираясь на механизм принципа резолюции.