- •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. Разностные списки. Хвостовая рекурсия. Сведение рекурсивного нехвостового определения к хвостовому. Примеры.
36.Расширение логического интерпретатора Пролога средствами языка. Мета-интерпритаторы. Примеры
Метапрограммирование - написание компьютерных программ, кот. манипулируют другими программами как данными: Реализация «надстройки» ЯП; Трансляция фрагмента кода программы в другое представление; Генерация и последующее выполнение кода во время выполнения.
Построение интепретатора Пролог-программы, кот. исп-ет видоизмененный механизм логического вывода. Ограничение глубины поиска. Построение дерева вывода. Используем стандартное представление Пролог-программы. Метаинтерпретатор оформляется как предикат solve, которому передается запрос.
Пролог на прологе
prove(true) :- !.
prove(','(A,B)):-prove(A),prove(B). prove(G):-clause(G,Body),prove(Body).
parent(vasya,petya).
parent(anna,petya).
brother(X,Y) :-
parent(A,X), parent(B,X), parent(A,Y), parent(B,Y).
?- prove(brother(X,Y)).
Не совсем «честная» реализация, поскольку используются встроенные возможности по манипуляции деревьями и по логическому выводу с возвратами. Описывается основной алгоритм работы логического интерпретатора, который можно далее модифицировать.
Вывод с ограничением по глубине (в ширину)
proved(true,_) :- !.
proved('(A,B),D):- D>0, D1 is D-1,
proved(A,D1), proved(B,D1). proved(G,D):- D>0, D1 is D-1, clause(G,Body) proved(Body,D1).
provedpth(G) :- integer(X), proved(G,X).
Вывод с ограничением по глубине позволяет выполнять запросы, в которых дерево вывода бесконечно влево. Введение постепенно увеличивающегося ограничения по глубине позволяет организовать обход дерева вывода в ширину.
24. Разностные списки. Хвостовая рекурсия. Сведение рекурсивного нехвостового определения к хвостовому. Примеры.
Df Разностный список L=<L_2,L_1>- пара списков такая, что L_1 явл-ся хвостом L_2.
В
операторной нотации обозначают / или -
L
L о
A/A
или L
L|A/A. Виды
рекурсии
(обычно реализ-ся с помощью стека):
1.Линейная. Рекурсивный вызов – последний
в определении, нет локальных пер-х
требующих выч-я на дальнейших эта-пах.
Может быть хвостовой: реализ-ся без
стека сведением к итерационному
процесс-су. 2.Нелинейная. Много(>1) раз
вызывается в теле функции. При создании
двоичного дерева в императиве.3.Косвенная.
Процедуры обращаются друг к другу
(рекурсивный спуск) Хвостатизация
1.Ввести дополнительную переменную
(аккумулятор), кот. при каждом погружении
в рекурсию будет увеличиваться на 1.
2.Убрать к-л вычисления после рек-го
вызова: length
([X],
1). length([_|X],
N):-length(X,
N1),
N
is
N1
+ 1.
length(L,N):- length(L,0,N). length([],N,N). length([X|T],S,N):-S1 is S+1, length(T, S1, N).
Реверс (простой, хвостовой, разностный):
1.reverse([], []).reverse([X|T], R):- reverse(T, T1), extend(T1, [X] R).
2.reverse(L,R):- reverse(L,[],R). reverse([],R, R). reverse([X|T], L, R):- reverse(T, [X|L], R).
3.на самом деле не очень понятно: reverse(L, R):- rev(L, R/[]). rev([], R/R). rev([X|T], R/L):- reverse(T, R/[X|L]).
Конкатенация (простая, разностная X - Y = (X - T) + (T - Y))
1.extend([], X, X). extendQXjT], L, [X|R]):- extend(T, L, R).
2. extend(X/T, Y/T, X/Y). ?- extend([1,2|T]/T, [3,4|Y]/Y, R). R = [1,2,3,4|Y]/Y
1.Различные парадигмы прогр-я и подходы к опр-ию выч-ти. Декларативные ЯП как альтернатива императивным. ЛП как алгоритмическая модель, альтернативная модели Тьюринга — фон Неймана.
2.Логика предикатов 1-го порядка. Семантика логики предикатов. Понятия выполнимости и общезначимости. Понятие логического следствия |=.
3.Исчисление предикатов 1-го порядка. Понятие о формальной аксиоматической системе. Выводимость (|-). Правило вывода modus ponens.
4.Понятие о полноте, непротиворечивости и корректности логической системы. Связь логического вывода с общезначимостью. Теорема о дедукции.
5.Алгоритмическая неразрешимость исчисления предикатов. Теорема Черча. Теорема Геделя о неполноте формальной арифметики,
6.Нормальные формы (КНФ, Скулемовская и клаузальная). Дизьюнкты Хорна. Сведение формул логики предикатов к фразам Хорна.
7.Унификация. Правила унификации сложных структур.
8.Правило вывода modus tollens. Простое и обобщенное правило резолюции.
9.Метод резолюции для реализации эффективного логического вывода в лог. программах на основе фраз Хорна. Стратегии резолюции. SLD-резолюция.
10.Рекурсивное описание алгоритма работы SLD-резолютивного лог. Инт-ора. Механизм бэктрекинга. Дерево вывода. Стратегии обхода дерева вывода.
11.Декларативная и процедурная семантика языка ЛП. Примеры.
12.Отриц. Отриц. по неуспеху и предпол-е о замк-ти мира.SLDNF-резолюция.
13.Пролог как язык логического программирования.
14.Основные объекты языка Пролог: атомы, числа, константы, переменные, термы, структурные термы, предикаты.
15.Операторы. Предс-е и выч-е арифм-х выр-й. Определяемые пользователем операторы. Представление предикатов и правил структурными термами.
16.Подходы к орг-и циклов в ЛП. Примеры. Предикаты for, repeat.
17.Управление перебором и отсечение. Предикат not.
18.Встроенные предикаты Пролога: read, write, nl.
19.Предикаты динамического изменения БД Пролога: asserta/assertz, retract. Примеры. Предикаты поиска множества решений (findall, bagof/setof).
20.Представление списков. Связь списков и структурных термов. Оператор =..
21.Описание основных предикатов обработки списков: определение длины, взятие n-ого элемента, прин-ть элемента списку, конкатенация списков.
22.Описание основных предикатов обработки списков: удаление элемента из списка, определение подсписка, перестановки.
23.Порядковое представление списков. Представление матриц. Примеры.
24.Разностные списки. Хвостовая рекурсия. Сведение рекурсивного нехвостового определения к хвостовому. Примеры.
25.Деревья. Деревья поиска, основные операции с деревьями поиска.
26.Сбалансированные деревья. Алгоритм добавления узла в сбалансиро- ванное дерево.
27.Представления графов. Алгоритмы поиска пути в графе
28.Метод генерации и проверок для решения задач. Метод ветвей и границ. Явный и неявный перебор в Пролог-программах.
29.Основные метода сокращения перебора на примере задач криптографии, расстановки ферзей, игры N2 -1
30.Решение задач методом поиска в пространстве состояний. Пример. Принципы подбора алгоритма поиска пути в зависимости от задачи.
31.Операторы. Преобразование символьных выражений в дерево. Вычисление значения арифметического выражения по строке.
32.Символьные вычисления. Алгоритм символьного дифференциирования.
33.Подходы к символьному упрощению выражений.
34.Анализ ест-го языка с использованием контекстно-свободной грамматики. Подход к интерпретации знаний в естественно-языковом материале.
35.Учет контекстных условий. Работа со словарями. Глубинные и поверхностные структуры в естественном языке.
36.Расширение лог.интерпретатора средствами языка. Мета-интерпретаторы.
