- •4. Представление знаний с использованием логики предикатов
- •4.1. Логические модели и логическое программирование
- •4.2. Простейшие конструкции языка предикатов
- •4.3. Предикатные формулы
- •(X) [являться (х, птица) имеет (х, крылья), владеет (х, гнездо)]
- •Любит (х, у),
- •4.4. Определение правильно построенной формулы
- •(X) [человек (х) смертен]
- •4.5. Логический вывод
- •4.5.1. Правило резолюции для простых предложений
- •4.5.2. Правило резолюции для сложных предложений
- •4.5.3. Простая резолюция сверху вниз
- •S3: сдает (успешно, сессию, студент)
- •Получает ли студент стипендию?
- •S: получает (студент, стипендию)
- •S: сдает (успешно, сессию, студент)
- •Подтверждают отрицание s: s1: ( получает (студент, стипендию))
- •Получает (студент, стипендию)
- •4.5.4. Общая резолюция сверху вниз
- •4.5.5. Унификаторы и примеры унификации
- •4.5.6. Решение задач и извлечение ответа.
- •D1: факториал (3, z)
4. Представление знаний с использованием логики предикатов
4.1. Логические модели и логическое программирование
Одним из способов представления знаний является язык математической логики, позволяющий формально описывать понятия предметной области и связи между ними.
В отличие от естественного языка, который очень сложен, язык логики предикатов использует только такие конструкции естественного языка, которые легко формализуются.
Т.е. логика предикатов - это языковая система, которая оперирует с предложениями на естественном языке в пределах синтаксических правил этого языка.
Язык логики предикатов использует слова, которые описывают:
понятия и объекты изучаемой предметной области;
свойства этих объектов и понятий, а также их поведение и отношения между ними.
В терминах логики предикатов первый тип слов называется термами, а второй - предикатами.
Термы представляют собой средства для обозначения интересующих нас индивидуумов, а предикаты выражают отношения между индивидуумами (которые обозначаются с помощью термов).
Логическая модель - это множество предложений, выражающих различные логические свойства именованных отношений.
При логическом программировании пользователь описывает предметную область совокупностью предложений в виде логических формул, а ЭВМ, манипулируя этими предложениями, строит необходимый для решения задач вывод.
4.2. Простейшие конструкции языка предикатов
Терм - это знак (символ) или комбинация знаков (символов), являющаяся наименьшим значимым элементом языка.
К термам относятся константы, переменные и функции.
Константа применяется для обозначения конкретных объектов реального мира. Пример: ласточка, птица, один, 2 и т.д.
Переменные используются для обозначения некоторого из возможных объектов реального мира или их совокупности (в Прологе начинаются с заглавной буквы). Пример: Некто, X, Who, Вещь и т.д.
Функции (структуры) - последовательность из нескольких констант или переменных, заключенных в круглые скобки, следующие за функциональным символом (функтором). Пример: сумма (1,2); +(1,2); удвоить (X).
Функторы обозначают операторы, которые после воздействия на объект возвращают некоторое значение.
Предикат - это логическая функция, которая выражает отношение между своими аргументами и принимает значение «истина», если это отношение имеется, или «ложь», если оно отсутствует.
Заключенная в скобки последовательность из n термов, перед которой стоит предикатный символ, называется n-местным (или n-арным) предикатом, который принимает значения «истина» или «ложь» в соответствии со значением термов, являющимися его аргументами.
Пример:
является ( ласточка, птица )
отец (X, Джон )
Такого типа предикаты получили название атомарных предикатов и соответствуют наиболее простым предложениям нашего разговорного языка - нераспространенным предложениям.
В обычном языке из нераспространенных предложении с помощью соединительных местоимений, союзов, и других частей речи строят более сложные конструкции - сложные предложения.
4.3. Предикатные формулы
В логике предикатов сложными предложениями естественного языка соответствуют предикатные формулы. Предикатные формулы образуются из атомарных предикатов и логических связок, которые читаются как (таблица 4.1):
Таблица 4.1
Логические связки
, |
|
|
← |
↔ |
«и» |
«или» |
«не» |
«если» |
«тогда и только» |
Логические связки имеют следующий приоритет использования:
,
,
Наиболее часто в логическом программировании используются связки «И», «НЕ» «ЕСЛИ».
Пример предикатной формулы, соответствующей сложному предложению:
является (ласточка, птица) ← имеет (ласточка, крылья),
владеет (ласточка, гнездо).
где является (_,_); имеет (_,_); владеет (_ _) - атомарные предикаты; «,» и «» - логические связки.
Однако приведенная конструкция предикатной формулы позволяет делать утверждение не только о конкретном индивидууме которым является ласточка, но и о всех индивидуумах из класса птиц, используя вместо констант переменные:
является (Х, птица) имеет (Х, крылья), владеет (Х, гнездо)
Таким образом, ставя переменные вместо конкретных имен, мы приходим к более общим понятиям кортежа длины n, предиката и логической формулы.
Однако предикат, который содержит переменные; например,
имеет (Х, крылья)
не может быть оценен, т.е. нельзя определить ложь он или истина, т.к. его значение определяется после подстановки в переменную некоторой константы.
Однако иногда можно определить значения предиката не делая подстановок используя кванторы общности () и существования (), которые обозначают «для всех» и «существует по крайней мере одно».
Тогда приведенная выше логическая формула будет записана в виде: