Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Z3(python API)快速重命名公式中的所有变量_Python_Z3 - Fatal编程技术网

如何使用Z3(python API)快速重命名公式中的所有变量

如何使用Z3(python API)快速重命名公式中的所有变量,python,z3,Python,Z3,我正在寻找一种方法,根据给定的替换映射重命名公式中的所有变量。我目前正在使用substitute功能,但速度似乎很慢 有没有其他比它更快的功能可以使用?有没有其他快速的方法 注意,我只是将新变量替换为原始公式中的变量,因此没有重命名冲突。在这种假设下,有没有办法更快地执行重命名 比如说, # given f = And(Int('x') > Int('y'), Or(Int('x') - 5 >= Int('z'), Int('k') > 1)) # expected resu

我正在寻找一种方法,根据给定的替换映射重命名公式中的所有变量。我目前正在使用
substitute
功能,但速度似乎很慢

有没有其他比它更快的功能可以使用?有没有其他快速的方法

注意,我只是将新变量替换为原始公式中的变量,因此没有重命名冲突。在这种假设下,有没有办法更快地执行重命名

比如说,

# given
f = And(Int('x') > Int('y'), Or(Int('x') - 5 >= Int('z'), Int('k') > 1))
# expected result after substitution
# f = And(Int('v0') > Int('v1'), Or(Int('v0') - 5 >= Int('v2'), Int('v3') > 1))

有什么方法可以在
f
上下文中进行操作吗?

没有一种比API更快的方法。关于速度,我有几点意见:

  • 您似乎正在使用Python API,它本身就有巨大的开销。这可能有助于节省时间 python中与Z3分开使用的部分

  • 替代函数的实现使用在堆栈上分配的类。 很有可能使该类成为上下文上的持久化属性会 加快摊销时间,因为它不会重复分配和重新分配内存。我必须分析一个实例,才能判断这种改变是否真的有回报

  • 执行重命名的更基本的方法是使用隐式重命名,因此根本不应用替换,而是访问具有不同偏移量的变量。这种低级别的变量去引用方式在API上是不可用的,甚至在我们表示高级表达式的方式上也是不可用的,所以它不是一种选择

  • 如果您的应用程序允许,您可以使用现有术语并隐式编码替换。例如,在某些应用程序中,可以在新旧变量之间添加相等约束


  • 非常感谢你。我将尝试重新编写C++中的项目,以获得C++ API的快速性。如果你能为第二点提供一个例子,我也很乐意去看看。我同意第3点,但由于api不提供对公式变量的低级访问,我将无法利用它。关于第4点,不幸的是,我的应用程序不允许使用此技巧。