使用 Z3Py 声明未解释的多元函数

Declaring uninterpreted polyadic functions with Z3Py

我正在尝试使用 Z3Py 编写一个函数 decl_func(fname, arity),它接受两个参数:fname,要声明的函数的名称,以及 arity,它的参数的数量,以及 returns 相应的(未解释的)整数 Z3 函数。问题是无法预先确定arity的值,所以函数体不能

return Function(fname, IntSort(), IntSort())

return Function(fname, IntSort(), IntSort(), IntSort())

一元函数或二元函数。这是我考虑过的一种粗略的解决方法:

exec('f = Function(\'%s\', %s)' % (fname, ('IntSort(), ' * arity + 'IntSort()')))
return f

但这不起作用,似乎是由于 exec 处理变量声明的方式(如果相关,我正在使用 Python 3)。

有什么想法吗?

这个问题是关于variadic functions in Python

You can use the same "*" syntax to apply the function to an existing list of arguments:

因此,像这样的东西应该工作:

sorts = [IntSort(), IntSort(), IntSort()]
return Function(fname, *sorts)