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

Алгоритмы Пролога

Процедура построения вывода, используемая в Прологе, нашла широкое применение за счет того, что выполняется целенаправленный поиск – имеется цель (отрицание высказывания) и вся процедура доказательства подчиняется необходимости вывода пустого дизъюнкта, применяя исходную цель и за счет упорядочивания вариантов поиска доказательств. Различают декларативную и процедурную семантику (смысл, понимание) пролог-программ. Декларативный смысл касается только отношений, определенных в программе и, таким образом, декларативная семантика определяет, что должно быть результатом работы программы, не вдаваясь в подробности, как это достигается. Процедурная семантика определяет, каким образом Пролог-система отвечает на вопросы и в значительной степени опирается на описание алгоритмов, лежащих в основе реализации Пролог-системы.

Стратегии доказательств

Существует много различных подходов к проблеме поиска решающего пути для задач, сформулированных в терминах пространства состояний. Основные две стратегии поиска, используемые в Пролог-системах, - это поиск в глубину и поиск в ширину.

Стратегия поиска в глубину. Стратегия поиска в глубину основана на тщательном исследовании последовательности одного варианта выбора до изучения других вариантов. Первоначально исследуется самая первая левая ветвь дерева, когда процесс поиска заходит в тупик, интерпретатор возвращается вверх, в последний пункт выбора, где имеются неизученные альтернативные варианты движения. Всегда, когда алгоритму поиска в глубину надлежит выбрать из нескольких вершин ту, в которую следует перейти для продолжения поиска, он предпочитает самую "глубокую" из них. Самая глубокая вершина - это вершина, расположенная дальше других от стартовой вершины. Представленная стратегия вывода программируется наиболее легко, однако подвержен зацикливаниям. Существуют два простых метода предотвращения зацикливания: ограничить глубину поиска и не допускать дублирования вершин.

Стратегия поиска в ширину. В противоположность поиску в глубину стратегия поиска в ширину предусматривает переход в первую очередь к вершинам, ближайшим к стартовой вершине. В результате процесс поиска имеет тенденцию развиваться более в ширину, чем в глубину. При поиске в ширину приходится сохранять все множество альтернативных вершин (а не одну вершину как при поиске в глубину), при этом возможны существенный расход такого важного ресурса компьютера как память. [Братко гл11].

В отличие от поиска в ширину, при поиске в глубину программисту предоставлен хорошо продуманный инструментарий для отсечения избыточных ветвей вывода.

Процедура поиска доказательства в глубину

Работа программы в Прологе связана с реализацией алгоритмов унификации, подстановки и вычисления резольвенты. На самом деле подстановка и переписывание значений переменных в процессе выполнения программы не происходит. В процессе вычисления резольвент происходит простое переименовывание переменных и создание контекста, в котором содержатся результаты унификации переменных.

Пусть задана цель:

? – α, β, ….

Где α, β – подцели.

Среди множества дизъюнктов (фактов, правил), ищутся такие, которые имеют следующий вид

αi/

αi// :- αi1// , αi2// ,….

где αi/ , αi// - предикаты, имеющие одинаковые имена и парности. Выполняется унификация и вычисляется наиболее общий унификатор для пары

{ α, αi/ } или {α, αi// }

Если наиболее общий унификатор получен, то вычисляется конкретизация α для найденной пары и вычисляется резольвента.

В первом случае, когда был найден факт, предложение цели приобретает следующий вид

? – β/, …. (цель укорачивается).

Во втором случае, т.е. когда применили подходящее правило, предложение цели приобретает другой вид

? – αi1/// , αi2/// ,…, β//, ….

т.е. предложение цели растет.

Здесь β/, β//, αi1/// , αi2/// - исходные предикаты; β, αi1// , αi2// - в которых была выполнена подстановка на основе общего унификатора.

Теперь для новой подцели β/ или αi1/// ищутся подходящие факт или правило, вычисляется наиболее общий унификатор, выполняется подстановка и вычисляется резольвенты. Если для текущей подцели выполнить унификацию не удается, то выполняется возврат и восстанавливается предыдущая цель. Выбирается другой факт или правило и процесс повторяется.

Если возврат выполнен к исходной цели и все факты и правила исчерпаны, то ответ – нет. Если же выведен пустой дизъюнкт, то найден контрпример, доказывающий, что целевое утверждение выводимо.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]