我试图理解Z3在相等测试和双条件之间的区别。我的理解是=
用于表达双条件,但是如何测试等式?
例如。我试图在z3中写下类似于以下(玩具)语句的内容:
on_table(o, a) ↔ (in_hand(o) Λ a != pickup(o)) ∨ a = put_on_table(o)
注意:我知道上述陈述可以被纳入一系列含义中,但我有兴趣将其表达为单一的双条件。
答案 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节):
请注意,没有双重含义的符号。这样的连接词 是多余的,因为等号符号=可以在其位置使用。
我怀疑,或许,你正试图要求别的东西。一些进一步的例子肯定会有所帮助。