- •1. Разл.Парадигмы пр-я и подходы к опр-ю выч-ти. Декларативные яп как альт. Императивным. Лп как алг-я модель, альт-я модели Тьюринга — фон Неймана.
- •3.Исчисление предикатов 1-го порядка. Понятие о формальной аксиоматической системе.Выводимость (|-) в форм. Аксиом. Системе.Правило вывода modus ponens.
- •4. Понятие о полноте, непротиворечивости и корректности логической системы. Связь логического вывода с общезначимостью. Тh о дедукции.
- •5.Алгоритмическая неразрешимость исчисления предикатов. Тh Черча. Th Геделя о неполноте формальной арифметики.
- •6. Норм-е формы. Дизьюнкты Хорна. Сведение ф-л лог.Пр-в к фразам Хорна.
- •7. Унификация. Правила унификации сложных структур.
- •8. Правило вывода modus tollens. Простое и обобщенное правило резолюции.
- •9. Метод резолюции для реализации эф-го логического вывода в логических программах на основе фраз Хорна. Стратегии резолюции. Sld-резолюция.
- •11. Декларативная и процедурная семантика языка лп. Примеры.
- •12. Отрицание в логическом программировании. Отрицание по неуспеху и предположение о замкнутости мира. Sldnf-резолюция.
- •14. Основные объекты языка Пролог: атомы, числа, константы, переменные, термы, структурные термы, предикаты.
- •15. Операторы. Представление и выч-ие арифметич-х выр-й. Опред-е польз-м операторы. Представление предикатов и правил структурными термами.
- •16. Подходы к организации циклов в лп. Примеры. Предикаты for, repeat.
- •17. Управление перебором и отсечение( cut). Предикат not.
- •18. Встроенные предикаты Пролога: read, write, nl.
- •21. Описание основных предикатов обработки списков: определение длины, взятие n-ого элемента, принадлежность элемента списку, конкатенация списков.
- •22. Описание основных предикатов обработки списков: удаление элемента из списка, определение подсписка, перестановки.
- •23. Порядковое представление списков в Прологе. Представ-е матриц. Примеры.
- •25. Деревья. Деревья поиска, основные операции с деревьями поиска.
- •26. Сбалансир-е деревья. Алгоритм добавления узла в сбалансир-е дерево.
- •27. Представления графов. Алгоритмы поиска пути (в глубину, в ширину).
- •28. Метод генерации и проверок для решения задач. Метод ветвей и границ. Явный и неявный перебор в Пролог-программах.
- •31. Операторы. Преобр.Симв.Выр.В дерево.Выч-е значений арифм.Выр.По строке.
- •30. Решение задач методом поиска в пространстве состояний. Пример. Принципы подбора алгоритма поиска пути в зависимости от задачи.
- •32. Символьные вычисления. Алгоритм символьного дифференцирования.
- •33. Подходы к символьному упрощению выражений.
- •34. Анализ ест-го языка с использованием контекстно-свободной грамматики. Подход к интерпретации знаний в естественно-языковом материале.
- •35. Учет контекстных усл. Работа со словарями. Глуб. И пов. Структуры в ест.Яз.
- •36.Расширение логического интерпретатора Пролога средствами языка. Мета-интерпритаторы. Примеры
- •24. Разностные списки. Хвостовая рекурсия. Сведение рекурсивного нехвостового определения к хвостовому. Примеры.
33. Подходы к символьному упрощению выражений.
Упрощение выр-й обычно основано на применении некот.правил эквив-го преобр-ия выр-й, пока не будет получено выр-е, кот.в смысле некот.критерия проще, чем исход-ное. Правила эквив-го пр-я выр-й можно описать на Прологе следующим образом:
rule(A*B, B*A). // rule(A+B, B+A). // rule(A+B+C, А+(В+С)).
rule(А*В*С, А*(В*С)). // rule(А*В/С, А*(B/С)) .
rule(A*(E+C), А*В+А*С). // rule(A*(B-C), А*В-А*С).
rule(A*B+A*C, A*(B+С)). // rule(А*В -А*С, А*(В-С)).
rule((А+В)*(А-В), А*А-В*В). // rule(А*А-В*В, (А-В)*(А-В)).
rule(A*X+X, (А+1)*Х). // rule (X, X).
Последнее правило возвращает исх.выр-е, рассматривая случай, когда выр-е упроще-нию не подлежит. Не все правила ведут в сторону упрощения. Рассмотрим правила, которые вычисляют фрагменты выражения, содержащие числа:
compute(X+Y,Z):- integer(X), integer(Y) , Z is X+Y.
compute(X*Y,Z) :- integer(X), integer(Y), Z is X*Y.
compute(X-Y.Z) :- integer(X), integer(Y), Z is X-Y.
compute(1*X,X). // compute(0*X,0). // compute (0+X,0). // compute(X/X,1).
Пусть мы хотим упростить выр-е 1+2+х*3 Для упрощения следует попытать-ся применить процедуры упрощения к кажд. из подвыр-й, содержащихся в дереве выр-я:
expr(Expr,Res) :-
Expr =.. [Op,А,В], expr(A.Al), expr(B.Bl), R =.. [Op.Al.Bl],
(compute(R,Res);rule(R,Res)).
expr(X,X) :- atomic(X).
Эта процедура упрощения не приводит к самому простому результату. Для симв-го сравнения выр-й необх.попытаться привести одно выр-е к др. при помощи эквив-х преобр-й. Предикат expr позволяет применить к выр-ю только один шаг пр-ия, но для приведения одного выражения к другому может потребоваться большее число шагов. Опред-м предикат convert который определяет приводимость 2х выр-й друг к другу. Используем метод поиска в глубину с запоминанием уже рассмотренных выражений:
convert(X,R) :- search([X],CRIJ).
search(R,R).
search(P.R) :- prolong(P,Pl), search(Pl,R,D1).
prolong([XIT],[Y,XIT]) :- move(X.Y), not(member(Y,[X|T]))
(+)при совпадении выражений устанавливает идентичность достаточно быстро; (-)для несовпадающих выр-й дерево поиска может оказаться очень большим, с учетом мн-ва применимых правил преобразования. Можно ввести огр-е на глубину проводимого поиска,привязав эту длину к числу операций и/или операндов в выр-и. Альтернативно можно использовать поиск в ширину или с итерационным заглублением. Упрощение выражений. Предикат convert позволяет найти все возможные преобразования заданного выражения как более простые, так и более сложные. Имеет смысл поста-вить задачу нахождения наиболее простого выр-я, эквив-го данному, в смысле некот. критерия. Критерием простоты выр-я можно считать минимальное кол-во в нем знаков операций, либо мин.кол-во операндов, либо некот.комбинацию этих величин. Для опр-я веса выр-я (величины, противоположной простоте), введем предикат cost:
cost(X,0) :- number(X). // cost(X,I) :- atom(X).
cost(X,Z) :- X = .. [Op, A, B], cost(A,CA), cost(B,CB), Z is CA+CB+2.
Для упрощения выр-я исп-ем метод градиентного спуска, введем предикат search/4 со след.аргументами: 1.Текущий список выр-й для рассмотрения, все выр-я предполага-ются одинаковой стоимости С; 2.Стоимость С выр-й в списке; 3.Результирующее упрошенное выр-е; 4.Список выр-й длины С кот. уже были рассм. Процесс поиска инициируется при вызове основного предиката simplify/2 и начинается со списка из одного исходного выражения
simplify(E,R) :- cost(Е,С), search([Е],C,R,[]).
Далее мы каждый раз будем рассматривать 1е выр-е из списка, и пытаться упростить его всеми возможными способами при помощи предиката move_grad, кот. вызывает ехрг и возвращает только выр-я с тем же или меньшим весом.
