是否可以查看给定谓词的所有含义是真还是假?

Is it possible to view all implications of a given predicate being true or false?

我正在尝试构建一台可以回答用户提出的问题的机器,但我遇到了一个我不知道如何解决的问题,归结为以下几点:

设想以下程序:

friendlycat(X)  :- cat(X), friendly(X).
cat("Felix").

我们想知道 Felix 是否是一只友好的猫,所以我们使用 friendlycat("Felix")。 问题是我们程序员不知道 Felix 是不是一只友好的猫。如果给定某个 X,friendly(X) 是真还是假,有没有办法自动查看其含义?

例如,我们可以得到这样的输出吗?

Felix (friendly("Felix") = True)
False (friendly("Felix") = False)

我建议您查看 Constraint Handling Rules (CHR)

这可能是您快速推理此类限制及其含义的最佳选择。

例如:

:- use_module(library(chr)).

:- chr_constraint cat/1, friendly/1, friendlycat/1.

cat(X), friendly(X) ==> friendlycat(X).

示例查询:

?- cat(felix), friendly(felix).
cat(felix),
friendly(felix),
friendlycat(felix).

?- cat(X), friendly(X).
cat(X),
friendly(X),
friendlycat(X).