gpt4 book ai didi

syntax - Prolog resolution prover 删除括号

转载 作者:行者123 更新时间:2023-12-05 07:09:08 24 4
gpt4 key购买 nike

我正在用 prolog 编写分辨率证明程序,它接受以下形式的输入

[[(a or b) equiv neg(c and d)]]

等,并将它们转换为 CNF。所有逻辑运算符都可以正常工作,但是当程序尝试扩展 equiv 运算时,括号会丢失。例如,在

上执行算法的一个步骤
[[(a and b) equiv c]]

给出结果

[[neg(a and b) or c], [neg c or a and b]]

在第二个子句中,a 和 b 两边的括号已被删除,而它们保留在第一个子句中。为什么会这样?

供引用,this是我的代码,给出输出的命令是 singlestep([[(a and b) equiv c]], X). 应该如何处理 equiv with 在第 93 行,函数 singlestep 在第 108 行。

最佳答案

发生这种情况是因为运算符优先级的定义方式是

neg c or (a and b)

neg c or a and b

是等价的。您没有包含您的运算符声明,但它们很可能都是具有相同优先级的 xfy

要测试等价性,您可以尝试简单的模式匹配:

?- neg c or a and b = X or Y.
X = neg c,
Y = a and b?

?- neg c or a and b = X and Y.
no.

确认运算符的解释方式。

关于syntax - Prolog resolution prover 删除括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61684350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com