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

Efficient method to store z3 symbolic expression into the key of a dictionary

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

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

  1. 使用 Python str 函数将 z3 表达式转换为字符串。
  2. string 表示存储为字典的键。

然而,一些分析和观察表明,从 z3 表达式到 string 的转换需要相当多的时间,这已成为我代码的瓶颈。

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

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

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