Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2docx-1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.27 Mб
Скачать

11. Декларативная и процедурная семантика языка лп. При­меры.

Семантика логич-х программ может отличаться от исходной семантики логич-х фор-мул. Логически эквив-е программы могут вып-ся по-разному. Семантика: • Деклара-тивная: Программа – мн-во формул логики предикатов. Решение - логические следст-вия исх.формул. Учёт семантики позволяет решить задачу. Правильная программа: может работать не эффективно. • Процедурная задаётся алгоритмом SLD-вывода и алгоритмом поиска. Учи­тывается процесс вывода. Программа – посл-ть команд для алгоритма вывода. Решение - результат его работы. Учёт семантики позволяет повы-сить эффективность. Правильная программа: м.б. бессмысленной. Рекомендации: 1.Условие окончании рекурсии на 1 месте, а затем уже рекурсивное опр-е. 2.В рекур-сивном опр-и сначала нерек-е предикаты, а затем предикат рекурсивного вызова.// Решение проблемы беск.рекурсии в различных языках: • ProLog Никак. Приходится исп-ть процедурные ухищрения. Пример: Предикат предок: ( X)( Y)((( Z)A(X,Z) P(Z,Y)) V P(X,Y)) A(X,Y), А(X,Y) – X предок Y; P(X,Y) – X родитель Y. Перейдем к Хорну: Плохо: A(X, Y) V неA(X,Z) V неP(X, Z)\\ A(X, Y) V неP(X, Y) (Дерево с беск. левой веткой); -Хорошо: A(X,Y) V неP (X, Y)\\ A(X, Y) V неA(X,Z) VнеP(X, Z) (Усл. окончании рекурсии на 1 месте.) Факты: P (a,b), P(a,c), P(c,d), НЕ Цель:неA(U, d) •Mer-cury.Автоматич-я оптимиз-я процесса вывода. Сложное выбираю­щее правило. Выбир-ся предикаты приводящие к более ранней конкретиза­ции пер-х. Программист должен описать макс-но возможные режи­мы вызова предиката. •Datalog. Поиск в ширину.

12. Отрицание в логическом программировании. Отрицание по неуспеху и предположе­ние о замкнутости мира. Sldnf-резолюция.

В логических программах невозможно эффективно и полноценно реализовать отрицание. Поэтому рассматривают некоторые способы введения операций похожих по декларативной семантике на отрицание, но строго говоря отрицанием не являющи-хся. Df Отрицание по неуспеху — отрицание некоторого утвер­ждения P, •истина, P не выводится и •ложь, P выводится, при помощи доступных механизмов вывода. Каждое выражение стоящее под знаком отрицания требует отдельного док-ва, кот.не связано с текущим контекстом унификации (Лес). Отрицание по неуспеху логич-му отрицанию, только в предположении о замкнутости мира (CWA): правило вывода ( A) |- (|- неA) отрицание по бесконечному неуспеху. SLDNF-резолюция

p :— p. неуспех

q :— q. успех

q.

Попытки оказать эти предикаты приводят к беск.дереву вывода. Из CWA неp оказ-ся невыводим введем более бедное правило – отрицание по конечному неуспеху: (|- неА) ( N)n <= N,где n – глубина SLD-дерева неуспешного вывода. Df Дополненная логическая программа, comp(Pфигурное) получается из исх. С учетом предположения о замкн-ти мира. Th (О достоверности и полноте отрицания по конечному неуспеху) Пусть P – логическая программа без отрицаний. Некот-е утв. А имеет конечное SLD-дерево вывода, заканчивающееся неуспехом comp(P) |= неА. Df Обобщенная логич-я программа – лп, кот. содержит отрицание в посылках правил. Алгоритм вывода для ОЛП, основанный на SLD-резолюции наз-ся SLDNF-резолюцией. SLDNF- дополняет SLD-резолюцию: •неA закончится успехом конечное дерево неуспешного вывода для A. •неA закончится не успехом конечное дерево успешного вывода для A. Процесс вывода в случае SLDNF-резолюции представляет из себя лес. По одному дереву на каждое выражение под знаком отрицания. Осн.св-ва SLDNF-резолюции: •Св-во полноты не вып-но; •Св-тво достоверности вып-ся не всегда (не вып. A ненеA ), •Нарушается чистота логической программы (различные ответы при переста-новке предикатов) •Нельзя использовать предикаты с отрицание для генерации значений не( X)( Y)parent(X,Y) ( X )( Y )неparent(X,Y). Предикат not

not (Predicate) :—

Predicate,!,fail.

not(_).

13. Пролог как язык логического программирования.

Логическая программа: •Декларативная часть - набор предложений, описывающий предметную область. Подобный подход берет начало в математической логике. –факты; -правила. •Запросы - ответы на которые - результат. Выполнение - поиск зна-чений пер-х, которые удовл-ют условиям. Мн-во всех решений ищется системой на основе backtracking'a. Сущ-ет мн-во систем логич. Программир-я, большинство из них исп-ет Пролог. Термы – осн.смысловые объекты программы. Термы: •Простые –Пере-менные – начинаются с заглавной буквы или подчеркивания, область действия – 1 правило. Как правило, заменяются внутр-ми ссылками. Анонимная переем-я «_» - неск.ее вхождений в одно и то же высказывание независимы. Своб.пер-я. Переменная получает значение (связывается) в рез-те унификации. Значение перем-й м.б. измене-но только в рез-те бэктрекинга.; –Константы: -Атомы - посл-ть лат.букв, цифр, под-черкиваний, начинающихся с мал.буквы, посл-ть знаков операторов, посл-ть любых символов, взятых в апострофы; -Числа • Структурные. Лексику Пролога можно описать грамматикой:

терм ::= константа \\ | функтор"(" терм {","терм}") \\ | оператор терм

| терм оператор \\ | терм оператор терм \\ | "(" терм ")".

константа := атом | число. \\оператор := функтор. \\ функтор := атом.

Унификация: •Свободная перем-я - с произв-м термом и связывается. •Связ. Перем. - как значение с кот. она связана. •Структурный терм: Должны совпасть: 1.функтор, 2.арность, 3.все аргументы попарно униф-ся. •Константа - с такой же константой.