Любое логическое программирование, которое поддерживает гипотетические рассуждения, может поддерживать ALP. Поскольку ASP поддерживает гипотетические рассуждения, он также может поддерживать ALP. Гипотетическое рассуждение — это поиск, при котором временно предполагаются факты.
Со стандартным ядром ISO Prolog мы можем имитировать предположение факта с помощью следующего кода. Код оставляет точку выбора и работает некорректно, если есть разрез, поэтому специализированные системы все же нужны:
assumez(P) :- assertz(P).
assumez(P) :- retract(P), fail.
Теперь мы можем решить следующую абдуктивную задачу:
abducible :- (assumez(amount(glucose,low));assumez(amount(glucose,medium))),
(assumez(amount(lactose,medium));assumez(amount(lactose,hi))).
feed(lactose) :- amount(glucose,low), amount(lactose,hi).
feed(lactose) :- amount(glucose,medium), amount(lactose,medium).
Возможный запрос выглядит следующим образом:
?- abducible, feed(lactose), listing(amount/2).
amount(glucose, low).
amount(lactose, hi).
Yes;
amount(glucose, medium).
amount(lactose, medium).
Yes ;
No
В приведенном выше решении используется обратная цепочка. Также может быть предоставлено решение для прямой цепочки и что-то, что ближе к операторам выбора ASP. Оператор выбора в ASP будет выполнять гипотетические варианты, мы используем только (;)/2 как оператор выбора:
:- use_module(library(minimal/delta)).
:- multifile abducible/0.
:- dynamic abducible/0, amount/2, feed/1.
:- forward feed/2.
post(amount(glucose,low));post(aamount(glucose,medium)) <= posted(abducible).
post(amount(lactose,medium));post(amount(lactose,hi)) <= posted(abducible).
post(feed(lactose)) <= posted(amount(glucose,low)), posted(amount(lactose,hi)).
post(feed(lactose)) <= posted(amount(glucose,medium)), posted(amount(lactose,medium)).
Возможный запрос выглядит следующим образом:
?- post(abducible), feed(lactose), listing(amount/2).
amount(glucose, low).
amount(lactose, hi).
Yes ;
amount(glucose, medium).
amount(lactose, medium).
Yes ;
No
person
Mostowski Collapse
schedule
23.10.2018