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

UptoLike

Рубрика: 

Для отношения на можно ограничиться только-если-определением:
xy[на(x,y) [x=a&y=b][x=d&y=a][x=d&y=c]]
или
xy [¬на(x,y) [xa yb] & [xd ya] & [xd yc]] . (3.28)
Заметим, что выражение
[xa yb] & [xd ya] & [xd yc]]
3
=8 конъюнкций
эквивалентно дизъюнкции 2
xa & xd & xd xa & xd & yc ...
... yb & ya & yc .
Тогда (3.28) можно с учетом правила (3.17) переписать в виде 8 клауз:
на(x,y) xa, xd .
на(x,y) xa, xd, yc .
...
на(x,y) yb, ya, yc .
Полезной оказывается только последняя клауза. Докажем, что блок d
свободен:
свободен(d) | свободен(y) на(x,y)
y=d ;
на(x,d)
←⎤на(x,d) | на(x,y) yb, ya, yc
y=d .
db, da, dc
Далее потребуются утверждения db, da и dc:
db, da, dc | db
;
da, dc
da, dc | da
;
dc
dc | dc
.
На языке Prolog задача, рассмотренная выше, может быть решена, если
определить предикат свободен (is_free) как отрицание предиката покрыт (cov):
predicates
on(symbol,symbol)
135