Основные понятия и определения. Каждая логическая программа состоит из следующих этапов

Каждая логическая программа состоит из следующих этапов:

– установка логических связей (отношений) между объектами;

– формулировка правил, которым подчинены эти связи;

– постановка запроса (или формулировка целевого утверждения).

В следующей конструкции

лекция (дисциплина, лектор, группа, время, аудитория)

слово перед скобками обозначает имя отношения, слова в скобках – объекты, которые связаны этим отношением. В зависимости от конкретного содержания этих объектов отношение может быть истинным или ложным. Например, нетрудно определить истинность этого отношения в случае

лекция (теология, тайсон, сп, обед, 40).

Имя отношения называется предикатом (логическое сказуемое).

Предикат – это функция, которая может принимать лишь два возможных значения – истина (true) или ложь (false). Имя предиката (предикатный символ) должно начинаться с маленькой латинской буквы или со знака подчеркивания. Общая форма записи предиката имеет следующий вид

name_pred (arg1 ,.., argn).

Предикат может не иметь аргументов и в этом случае его значения является постоянным (true или false) по определению.

Введем отношение

книга (автор, жанр).

Предикат, значение которого истинно при данном наборе аргументов, называется фактом. Рассмотрим множество фактов для данного предиката, которое в Прологе называется базой знаний (БЗ),

книга (стаут, детектив)

книга (по, поэзия)

книга (по, детектив)

книга (шевченко, поэзия).

Если поставить запрос к этой базе знаний

? книга (стаут, детектив)

то получим решение истина. Значение запроса

? книга (пушкин, поэзия)

будет ложь, так как в Прологе принято соглашение о замкнутости мира. Т.е. если какое-то отношение не содержится в базе, то его значение ложь.

Для запроса

? книга (Х, детектив)

согласно нашей базе знаний получаем решение

Х1=стаут, Х2=по

В этом случае в запросе фигурирует объект X, имя которого не определено. Переменная – это значение аргумента, которое он может получить из области интерпретации предиката. Решением задачи является такая совокупность аргументов предиката, которая придает ему значение истина.

Принято следующее правило для обозначения переменных и констант: переменная обозначается символами, которые начинаются с большой латинской буквы, а константа – с маленькой.

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

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

Если теперь усложнить запрос и поинтересоваться, известны ли писатели, которые работали в разных жанрах, то запрос примет вид

? книга (Х, Y) и книга (Х, Z) и Y<>Z.

Таким образом мы пришли к сложному целевому утверждению, которое состоит из нескольких подцелей. Утверждение (цель) принимает значение истина, когда это значение принимает каждая из него подцелей. Рассмотренную цель можно сформулировать в форме одного отношения

разные_жанры (Х) если книга (Х, Y) и книга (Х, Z) и Y<>Z,

которое имеет название правила.

Правило имеет следующую структуру

name (arg , arg , …, arg ) P (b ,..., b ),..., P (c ,..., c ),...

где левая часть называется заголовком, а права – телом правила. В частном случае, когда тело правила не содержит ни одного предиката, имеем факт. Правило принимает значение истина только в том случае, когда все предикаты в его теле имеют тоже значение истина. Областью действия переменной есть утверждение (правило).

Каждая переменная должна встречаться в теле правила не меньше двух раз. Если содержание задачи предполагает однократное употребление переменной, то на ее место ставится анонимная переменная. Анонимная переменная – это переменная, значение которой в данном контексте не является существенным. Она обозначается знаком подчеркивания и в фактах применяться не может.

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

? столица (_, X, Y), Y>1 000 000.

В Прологе существует альтернатива форм записи логических операций

: - или іf, или and; или or

Например, правило Р: - Р1, Р2,..., Р4 может быть записано в виде

P if P1 and P2 and... P4


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: