将z3符号表达式存储到字典键中的有效方法

时间:2016-09-17 17:15:59

标签: z3 z3py

我正在使用Z3Py开发一些工具,在我的代码中,我维护了多个dictionaries来跟踪某些信息。

请注意,有时我需要使用z3表达式作为某个字典的键,并且由于z3表达式不可清除(我是对的吗?),我现在正在做的是:

  1. 使用z3函数将Python str表达式转换为字符串。
  2. string表示存储为字典的键。
  3. 然而,一些分析和观察显示从z3表达式到string的翻译需要花费很多时间,并且它已成为我的代码的瓶颈。

    所以这是我的问题,使用z3表达式作为字典中的键的最有效方法是什么?或者有解决方案吗?

1 个答案:

答案 0 :(得分:2)

表达式应该是可以清除的。表达式覆盖哈希 eq 方法。 访问者示例https://github.com/Z3Prover/z3/blob/master/examples/python/visitor.py使用字典。

作为旁注,我怀疑这在常见情况下是相关的:您可以依赖的另一个属性是表达式具有唯一的整数标识符。方法" get_id()"返回标识符。这提供了另一种索引表达式的方法。表达式的标识符是从0开始的数字。最大标识符永远不会超过创建的表达式的数量。如果表达式是垃圾回收,则标识符将被回收。因此,如果使用此功能,当然要确保在堆中固定表达式。