我正在 Prolog 中编写一个约束求解器,它实现了一个简单的逻辑公式:
"(alive(A) and animal(A)) iff (awake(A) or asleep(A))"
.
我在约束处理规则中找到了一种实现它的方法,但它比原始公式要冗长得多:
:- use_module(library(chr)).
:- chr_constraint is_true/1.
is_true(A) \ is_true(A) <=> true.
is_true(alive(A)),is_true(animal(A)) ==> is_true(awake(A));is_true(asleep(A)).
is_true(awake(A)) ==> is_true(animal(A)),is_true(alive(A)).
is_true(asleep(A)) ==> is_true(animal(A)),is_true(alive(A)).
是否可以使用单个语句而不是多个冗余语句来实现此公式?