
3.3. Логическое программирование
Основные трудности, с которыми постоянно сталкиваются разработчики программного обеспечения, связаны с построением систем, осуществляющих простую и быструю работу с данными. Это прежде всего задачи из области искусственного интеллекта: синтаксический и семантический анализ текста, организация баз данных и знаний, распознавание образов, диагностика неисправностей в технике и заболеваний в медицине, управление роботами и т.д.
В общем случае везде, где требуется анализ данных и возможны различные варианты решения, а сам ход решения не очень ясен для программиста или же желательно избежать детального описания своих действий, которые и так всем интуитивно понятны, во всех этих случаях целесообразно использовать логическое программирование. Логическое программирование позволяет обойтись без традиционной алгоритмизации решаемой задачи и сконцентрировать усилия на формализации знаний о предметной области решаемой задачи.
Наибольшее
распространение получила система
логического программирования, основанная
на представлении знаний в виде так
называемыхклауз
Хорна.
Это система и язык Prolog (PROgramming in LOGic),
предложенная в начале 70-х годов Аланом
Колмероем. Общая идея логического
программирования представлена схемой
на рис. 3.1. База знаний содержит описание
правил
вывода
и известных фактов
в форме клауз Хорна. Задание на работу
с системой логического программирования
имеет вид клаузы или набора клауз, в
которых фигурируют предметные переменные,
значения которых необходимо определить.
Машина вывода предназначена для процедурной интерпретации логической программы, т.е. всей совокупности клауз Хорна (запроса и базы знаний). Машина вывода реализует заложенный в нее алгоритм обработки клауз (утверждений) логической программы, называемый методом резолюций, для поиска возможных решений.
Клаузы Хорна и метод резолюций
Клаузой Хорна называется частный случай клаузы B1,...,BmA1,...,An, получающийся при m=1:
B A1,...,An.
Метод резолюций основан на использовании правил резолюции. Правило резолюции – это правило вывода, которое позволяет из двух предложений
B1,...,Bm A1,...,Ai,...,An и
B'1,...,B'j,...,B'r A'1,...,A'k ,
для которых существует так называемая согласующая подстановка такая, что Ai=B'j, вывести третье
B1,..., Bm, B'1,..., B'j-1, B'j+1,..., B'r
A1,..., Aj-1, Aj+1,..., An, A'1,..., A'k.
Понятие согласующей подстановки определяется как множество пар {(xq,tq)}, означающих, что переменная xq всюду в Ai и B'j заменяется термом tq так, что Ai=B'j, причем любая другая унифицирующая подстановка носит менее общий характер.
Для клауз Хорна правило резолюции можно записать в общем виде
B A1,A2,...,An | B' A'1,...,A'k
A1=B'1,
B A'1,...,A'k, A2,...,An
где - согласующая подстановка, | - разделитель клауз.
Сущность метода резолюций – это процедурная интерпретация клауз Хорна, которая заключается в следующем. Множество клауз Хорна S, описывающих постановку задачи, дополняется отрицанием C целевого утверждения C, содержащего в общем случае некоторые предметные переменные, значения которых необходимо определить. С помощью правил резолюции находим решение задачи, а именно значения предметных переменных, для которых множество S {C} невыполнимо. Это значения предметных переменных, при которых из множества предложений S {C} удается вывести пустое предложение .
Пример 3.3. Дана формулировка задачи на естественном языке:
Робот находится там, где находится тележка. Определить, где находится робот, если известно, что тележка находится на складе.
Запись условий задачи в стандартной форме:
где(робот, x) где(тележка, x).
где(тележка, склад) .
где(робот, y).
В соответствии с методом резолюций запрос формируется как отрицание предложения "где(робот, y)". Последовательность резолюций:
где(робот, y) | где(робот, x) где(тележка, x)
y=x
;
где(тележка, x)
где(тележка, x) | где(тележка, склад)
x=склад
.
Таким образом, на втором шаге при использовании согласующей подстановки x=склад получено пустое предложение и ответ где(робот, склад), что означает, что робот находится на складе.