на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Логическое программирование
Некоторые сведения из математической логики
Напомним кратко основную цепочку построений математической логики, используемых в логическом программировании. Известно, что любое предложение в логике предикатов логически равносильно предложению в предваренной нормальной форме, то есть в такой форме, когда в начале расположены все ее кванторы, за которыми расположена бескванторная ее часть. Рассмотрим пример такой формулы
![]() |
( 1) |



Известно, что по любому предложению в предваренной нормальной
форме можно построить так называемое сколемовское предложение
.
Для этого избавляются от кванторов существования следующим образом. Пусть
(
— самое левое вхождение квантора существования
в рассматриваемую формулу и перед ним расположены
кванторов общности с переменными
. Выбираем новый
-местный
функциональный символ
, вхождение
удаляем
из формулы, а каждое вхождение переменной
заменяем
термом
. Аналогичным образом избавляемся и от
других кванторов существования. В результате получим сколемовскую
формулу
для исходной формулы
.
Так, для формулы (1) соответствующая сколемовская формула будет иметь вид
![]() |
( 2) |







Известно, что сколемовская формула , соответствующая
формуле
,
может быть логически неравносильна формуле
, однако они либо
обе выполнимы, либо обе невыполнимы (равносильность по выполнимости).
Для иллюстрации этого факта рассмотрим простую формулу





Равносильность по выполнимости формулы и соответствующей ей
сколемовской формулы
может быть использована следующим образом.
Предположим, мы хотим доказать, что формула
является логическим
следствием формул
и
. Это сводится к
доказательству невыполнимости формулы
![\eq*{
[A \& B \& \neg C]
}](/sites/default/files/tex_cache/a1cbda156ef47f1157c4ff6fb3fa6c7f.png)
Поскольку в сколемовской формуле используются только кванторы общности и все они расположены в начале формулы, их обычно опускают, подразумевая по умолчанию их наличие, а бескванторную часть представляют в нормальной конъюнктивной форме. Полученная таким образом формула называется клаузальной. В нашем случае формула (2) превращается в клаузальную формулу
![]() |
( 3) |
Упомянутый выше метод резолюций основывается на единственном правиле вывода, называемом правилом резолюции, которое заключается в следующем. Из двух формул вида
![\eq*{
[\neg A \vee B_1 \vee B_2 \vee \ldots \vee B_k]
}](/sites/default/files/tex_cache/35ddac0e0b00c0521a39bd45d87e9c5e.png)
и
![\eq*{
[A \vee D_1 \vee D_2 \vee \ldots \vee D_s]
}](/sites/default/files/tex_cache/a1bbbc52336c23c51c28e498677f814d.png)
в соответствии с правилом резолюции выводится формула
![\eq*{
[B_1 \vee B_2 \vee \ldots \vee B_k \vee D_1 \vee D_2 \vee \ldots \vee
D_s].
}](/sites/default/files/tex_cache/27ab3dbb667370c03734f1686762076c.png)
Видно, что клаузальная форма хорошо приспособлена для применения правила резолюции. Детали этого применения в логике предикатов будут рассмотрены ниже.
Из математической логики известно, что не существует алгоритма, который по
любому множеству формул-гипотез логики предикатов и еще одной
формуле
отвечал бы на вопрос, является ли
логическим следствием множества
. Однако существует алгоритм, который
в случае, когда
логически следует из
, строит
доказательство этого факта с использованием правила резолюции, в противном
случае алгоритм может работать бесконечно.
Различные версии языка Пролог базируются на использовании так называемых хорновских клаузальных формул. Хорновскими называются формулы, являющиеся дизъюнкциями атомарных формул и/или их отрицаний, причем атомарная часть без отрицания может быть в такой формуле не более чем одна. Рассмотрим пример такой формулы:
![]() |
( 4) |
![]() |
( 5) |
![]() |
( 6) |

![\eq*{
\forall x\, \forall y [\exists z [P(x) \& Q(x, z) \&
S(f(y))] \to R(x, y)],
}](/sites/default/files/tex_cache/7e9640c01e48d0d793bc0b1602932172.png)

В Прологе принято формулы, аналогичные формуле (5), записывать в виде
![]() |
( 7) |
Формулу (7) Пролог воспримет как указание на то, что для доказательства
истинности надо найти некоторое значение
и доказать, что истинны
,
,
.
Такие формулы принято называть правилами.
Если в хорновской клаузальной формуле отсутствуют атомарные части с отрицанием, то такая формула называется фактом. Если в хорновской клаузальной формуле отсутствует атомарная часть без отрицания, то такая формула называется запросом. Программой в Прологе называется набор фактов и правил.
По заданной программе и запросу система Пролог определяет, является ли запрос логическим следствием фактов и правил программы. При этом если в запросе имеются свободные переменные, то в процессе поиска доказательства эти переменные конкретизируются, то есть принимают конкретные значения, и при успешном его завершении эти конкретизированные значения являются ответом к поставленной задаче. Если же доказательство не будет найдено, то система ответит "no".