Математическая логика и теория алгоритмов. Анкудинов Г.И - 50 стр.

UptoLike

Рубрика: 

как правило, является порядок, когда сначала выполняются процедуры,
имеющие большее отношение числа входных параметров к числу выходных.
Отрицание как неудача.
Язык клауз Хорна, на котором основан Prolog,
дополненный отрицанием not, обладает значительно большими
возможностями. Однако, предикат not в языке Prolog не полностью
соответствует оператору отрицания в стандартной логике. Например, в
стандартной логике из P←⎤P следует P. Если же мы запустим программу
predicates
p
clauses
p:- not(p)
с внешней целью p, то получим зацикливание. Определение отрицания связано
с отсечением:
not_p(X):- p(X),!,fail.
not_p(X).
d
Если-и-только-если определения. Prolog базируется на клаузах Хорна и,
следовательно, использует если-определения. Однако, полная если-и-
только-если форма необходима для
получения ответов на вопросы, содержащие
кванторы общности и отрицания.
a
c
b
Рис. 3.3.
Пример 3.8. Рассмотрим сцену на рис.3.3. На
множестве блоков {a,b,c,d} необходимо
определить отношение свободен(x),
описывающее свободные блоки, через
отношение на(x,y), означающее, что блок x
расположен на блоке y. Эту сцену можно описать на языке стандартной логики,
используя эквивалентность:
y[свободен(y) ⎤∃x на(x,y)] ,
xy[на(x,y) [x=a&y=b][x=d&y=a][x=d&y=c]] .
В соответствии с приведенной формулировкой, свободны все блоки, кроме
a, b и c, потому что множество, из которого принимают значения x и y,
явно не определено.
Переведем вышеприведенные определения в клаузальную форму. Для
отношения свободен можно ограничиться если-то-определением:
y [свободен(y) ⎤∃x на(x,y)] .
свободен(y) на(x,y) .
134