Z3中的平等与Bicondition

时间:2018-02-26 05:11:50

标签: logic z3 smt

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

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

on_table(o, a) ↔ (in_hand(o) Λ a != pickup(o)) ∨ a = put_on_table(o)

注意:我知道上述陈述可以被纳入一系列含义中,但我有兴趣将其表达为单一的双条件。

1 个答案:

答案 0 :(得分:2)

对于Bool类型,equal和biconditional是相同的操作。对于任何其他类型,双条件并不真正有意义。

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

  

SMT-LIB格式的2.6版采用其基础逻辑a   具有相等性的多排序一阶逻辑的版本[Man93,Gal86,   End01]。

参见http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf

的第2.2节

同一份文件也说(第3.7.1节):

  

请注意,没有双重含义的符号。这样的连接词   是多余的,因为等号符号=可以在其位置使用。

我怀疑,或许,你正试图要求别的东西。一些进一步的例子肯定会有所帮助。