Logic Z3中的平等与双条件

Logic Z3中的平等与双条件,logic,z3,smt,Logic,Z3,Smt,我试图理解Z3在平等测试和双条件测试之间的区别。我的理解是,=用于表示双条件,但如何测试等式 比如说。我试图在z3中编写类似于以下(玩具)语句的内容: 表上的(o,a)↔ (在手(o)∧a!=捡拾器(o))∨ a=将_放在_表上(o) 注:我知道上述语句可以分解为一组含义,但我有兴趣将其表示为单个双条件。对于Bool类型,等式和双条件是相同的操作。对于其他类型的人来说,双重条件是没有意义的 SMT中的所有逻辑都具有相等的概念,本质上是对象的术语级相等。该标准明确规定: SMT-LIB格式的2.

我试图理解Z3在平等测试和双条件测试之间的区别。我的理解是,
=
用于表示双条件,但如何测试等式

比如说。我试图在z3中编写类似于以下(玩具)语句的内容:

表上的
(o,a)↔ (在手(o)∧a!=捡拾器(o))∨ a=将_放在_表上(o)


注:我知道上述语句可以分解为一组含义,但我有兴趣将其表示为单个双条件。

对于
Bool
类型,等式和双条件是相同的操作。对于其他类型的人来说,双重条件是没有意义的

SMT中的所有逻辑都具有相等的概念,本质上是对象的术语级相等。该标准明确规定:

SMT-LIB格式的2.6版采用a作为其底层逻辑 具有等式的多排序一阶逻辑的版本[Man93,Gal86, (完)

见本手册第2.2节

同一文件还规定(第3.7.1节):

请注意,没有双重含义的符号。这样的连词 是多余的,因为可以使用相等符号=来代替它


不过,我怀疑,也许你是想要求别的东西。一些进一步的例子肯定会有帮助。

谢谢,从我最初的例子中不清楚,但是
a
表示一种排序,其中
pickup(o)
put_on_table(o)
就是这种排序的例子。让我试着用一个更具体的例子来阐述这个问题。