我有一个prolog谓词,它接受两个参数(都有标签)
X
我试图定义一个概念,在句子逻辑/命题演算中的表达式在Prolog中是“蕴涵范式”。这里的蕴涵范式意味着所有连接词都被替换为
->
和
falsum
.
作为一个基本情况,我想说一个完全由一个原子组成的表达式本身已经是正规形式了。
下面是我试图表达的方式。我在重复一个参数名,而不是对参数之间的相同性进行某种类型的检查。
% foo.P
implication_normal(X, X) :- atom(X).
implication_normal(x, x)
是真的但是
implication_normal(x, y)
是假的。
在某些方面,它似乎起了作用:
$ swipl -s foo.P
?- implication_normal(x, x).
true.
?- implication_normal(x, y).
false.
?- implication_normal(1, 1).
false.
它对变量做了错误的事情(应该枚举“绑定上下文”对,其中
十
Z
恰好指向同一个原子)。
?- implication_normal(X, Z).
false.
如果给它两次相同的变量,它也只返回false。
?- implication_normal(X, X).
false.
出于某种奇怪的原因,如果你给它一个变量和一个原子,那么它的行为是正确的(如果你给它一个整数,它就会失败)。
?- implication_normal(X, z).
X = z.
?- implication_normal(X, 1).
false.
同样,如果变量是第二个。
?- implication_normal(z, X).
X = z.
?- implication_normal(1, X).
false.
implication_normal
所以它枚举了所有提供变量的情况?