【发布时间】:2014-08-11 20:33:44
【问题描述】:
假设我有两个约束(c1,c2),我想检查它们是否语法相同:
c1: f(x)>1 && g(y)=2
c2: f(x)>1 && g(y)=2
选项 1: 我们可以把它变成一个可满足性问题,就像这篇文章: Whether two boolexpr are equal
选项 2: 我们也可以把它们变成字符串并比较相等性:
if(c1.toString().equals(c2.toString()))
///do somthing
但是随着约束大小的增加,这两个选项都会产生很大的开销。例如在 Expr 中调用 toString() 方法对于大型约束非常昂贵。
两个问题:
如何在Z3(Java版)中高效地检查两个约束在语法上是否相同?
如果我们对 1 没有好的解决方案,我正在考虑为 Expr 对象编写一个包装器并使用工厂方法来避免从 Z3 生成重复的(语法上)对象.然后我必须设计自己的 equal() 和 hashCode() 函数。但到目前为止我仍然想不出一个有效的方法。
【问题讨论】:
标签: java performance z3