提问人:dde 提问时间:9/20/2017 更新时间:9/20/2017 访问量:149
z3 是否支持将运算符标记为关联运算符、交换运算符或两者兼而有之?
Does z3 supports tagging operators as associative, commutative, or both?
问:
我想以 SMT 格式编写证明义务,其中某些函数具有一些共同的通用属性(即关联性和交换性)。
一个简单的解决方案是在证明义务中包括相应的公理。我想这意味着对这些属性的推理将在很大程度上取决于量词实例化算法。其他技术,例如重写,可能会更有效率,我想知道 Z3 是否实现了这种技术。API 中存在 Z3_OP_PR_REFLEXIVITY 和 Z3_OP_PR_COMMUTATIVITY 等值表明情况可能如此。
我的第一个问题是:
- Z3 是否有办法处理用户定义符号的通用属性,而不是通过用户定义公理的量词实例化?
如果答案是肯定的,那么:
哪些是这样的通用属性?
由于据我所知,SMT-LIB 标准没有为用户定义的符号(仅理论符号)固定此类属性,那么声明用户定义符号具有给定属性的 SMT 语法是什么?
答: 暂无答案
评论
:left-assoc
:right-assoc