Prolog - 所有含义

use*_*758 1 logic prolog

我怎样才能在Prolog中代表一个全面的含义?

在逻辑上:

x is given

For all a, b . [P(a) AND P(b) AND P(x) ---> Q(a,b)]
Run Code Online (Sandbox Code Playgroud)

序言会是

pred(X) :- ....
Run Code Online (Sandbox Code Playgroud)

jsc*_*mpf 6

您可以将公式重写为

not exists A,B . not (p(A) and p(B) and p(X) -> q(A,B)).
Run Code Online (Sandbox Code Playgroud)

并进一步

not exists A,B . (p(A) and p(B) and p(X) and not q(A,B)).
Run Code Online (Sandbox Code Playgroud)

然后在你的Prolog子句中使用它

pred(X) :- \+ ( p(A), p(B), p(X), \+q(A,B) ).
Run Code Online (Sandbox Code Playgroud)

正如其他人所提到的,一些Prologs为此定义了一个简写,称为forall/2,所以你应该能够使用

pred(X) :- forall((p(A), p(B), p(X)), q(A,B)).
Run Code Online (Sandbox Code Playgroud)