- •Кафедра Информационных систем и вычислительной техники Национального минерально-сырьевого университета «Горный"
- •Содержание
- •История развития и современное состояние языка prolog
- •Тенденции в истории развития языка Prolog
- •Области применения языка Prolog
- •Современные реализации языка Prolog
- •Поддержка веб-технологий в реализацях Prolog
- •Основы разработки prolog-программ
- •Общие сведения о языке Prolog
- •Понятие факта, правила, запроса и процедуры
- •Механизм сопоставления и поиска с возвратом
- •Основные элементы языка Prolog
- •Среда разработки программ pie и система swi-prolog
- •Основы работы в консоли Prolog
- •Основы работы с программными файлами
- •Справка и помощь в среде swi-Prolog
- •Основы трассировки и отладки в среде pie и swi- Prolog
- •Графические интерфейсы на базе swi-Prolog/xpce
- •Загрузка и запуск программ swi-Prolog'a
- •Использование ярлыков для запуска программ
- •Использование командных и скриптовых сценариев
- •Среда разработки turbo-prolog
- •Структура программы на Turbo Prolog'e
- •Оболочка системы Turbo Prolog
- •Отладка и трассировка программ
- •Работа с простейшими программами в Turbo Prolog'e
- •Работа с графикой в Turbo Prolog'e
- •Среда разработки visual prolog
- •Интегрированная среда разработки
- •Разработка консольного проекта
- •Разработка gui проекта на Visual Prolog'e
- •Prolog — язык логического программирования
- •Системы основанные на знаниях
- •Логические модели и логическое программирование
- •Простейшие конструкции языка предикатов
- •Предикатные формулы
- •Определение правильно построенной формулы
- •Логический вывод
- •6.6.1. Правило резолюции для простых предложений
- •Правило резолюции для сложных предложений
- •Простая резолюция сверху вниз
- •Общая резолюция сверху вниз
- •Унификаторы и примеры унификации
- •Решение задач и извлечение ответа
- •Приложение 1. Запуск Turbo-Prolog в ос Windows 7
- •1. Стандартные предикаты ввода данных.
- •Предикаты преобразования данных
- •Предикаты работы с окнами.
- •Предикаты работы с файлами.
- •Предикаты управления экраном.
- •Предикаты обработки строк.
- •Предикаты работы с графикой.
- •Разные предикаты.
- •Правила вычисление атрибутов экрана.
- •Приложение 3. Пример программы построения дерева синтаксического анализа
- •Интеллектуальные информационные системы prolog - язык разработки интеллектуальных и экспертных систем
Общая резолюция сверху вниз
Однако в большинстве случаев структура предложений имеет более сложный вид. В частности, предикаты и логические формулы в качестве термов могут содержать не только константы, но и переменные, и функции. В этих условиях несколько модифицируется и сама процедура логического вывода. Чтобы получить самые общие представления об общей резолюции сверху вниз рассмотрим для примера два родительских предложения вида:
S1: 1 получает(студент, У)
S2: получает(Х,стипендию) сдает(успешно, Z, X)
К ним непосредственно уже нельзя применить правило резолюции, так как они не содержат одинаковых предикатов в левой части импликации и в отрицании. Данные предложения содержат три переменных X, Y, Z, которые неявно универсально квантифицированны. Рассмотрим первое предложение S1, которое утверждает, что:
для всех Y (студент не получает Y)
Причем выражение «для всех» понимается как «для всех индивидуумов, из какой либо области, выбранной для интерпретации предложений». При интерпретации S1 и S2, по крайней мере, один индивидуум Y будет связан с именем «стипендия» и поэтому непосредственным следствием S1 является более конкретное предложение:
Si1: 1 получает(студент, стипендию)
Аналогично рассматривается S2 на области интерпретации S1 и S2 и, выбирая для Х, индивидуум с именем «студент», получаем более конкретное предложение:
S21: получает(студент, стипендию)
сдает(успешно, Z, студент)
Теперь имеем два предложения S11 и S21, которые удовлетворяют условию применимости правила резолюции. Это условие предполагает наличие одинаковых предикатов в левой части импликации и в отрицании. Поэтому резольвентой логических формул S11 и S21, после применения к ним правила (*) будет:
s: 1 сдает(успешно, Z, студент)
Предикат получает (студент, стипендию) называется общим примером родительских предикатов
получает(Х, стипендию) получает(студент, У)
и получен с помощью унификатора вида 0 = {Х:= студент, У:= стипендия}.
Унификаторы и примеры унификации
Унификатором называется множество присваиваний вида
0 = {X1:= t1, ..., Xn:= tn}
где Xi - переменная, а ti - терм, применение которых к двум выражениям дает одинаково общие примеры.
На практике унификаторы определяют, сравнивая по очереди соответствующие аргументы предикатов и выписывая те присваивания термов переменным, которые сделали бы эти аргументы одинаковыми. Для пояснения этого процесса рассмотрим ряд примеров унификации, которые приведены в табл. 6.2.
Родительские предложения |
Унификатор |
Общий пример |
p(5X p(5) |
0- пустое множество (не заменяется ни одна переменная) |
P(5) |
p (x>- p(5) |
0 = {x:=5} |
p(x)0 = p(5)0 = p(5) |
p(xX p(y) |
0 = {x:=y} |
p(y) |
P(X y), p(5, x) |
0 = {x:=5, y=x} = = {x:=5, y:=5} |
p(x,y)0 = p(5,x)0 = p(5,5) |
1 p(5, x) P(X y) q(x) |
0 = {x:=5, y:=5} |
p(5,5) резольвента: s: 1 q(x)0 = 1 q(5) |
Таблица
6.2
Примеры
унификации
