Z3 Python中以函数作为属性的数据类型

Z3 Python中以函数作为属性的数据类型,z3,z3py,sat-solvers,Z3,Z3py,Sat Solvers,我正在为Z3使用Python绑定,并尝试创建一个属性为函数的Z3数据类型。例如,我可能会执行以下操作: Foo = Datatype('Foo') Foo.declare('foo', [('my_function', Function('f', IntSort(), BoolSort()))]) Foo.create() 这是一种尝试,创建一个带有属性my_function的数据类型Foo,在这里我可以调用my_function x(如果x是Foo类型的变量),以便将一些函数从int导出到b

我正在为Z3使用Python绑定,并尝试创建一个属性为函数的Z3数据类型。例如,我可能会执行以下操作:

Foo = Datatype('Foo')
Foo.declare('foo', [('my_function', Function('f', IntSort(), BoolSort()))])
Foo.create()
这是一种尝试,创建一个带有属性
my_function
的数据类型
Foo
,在这里我可以调用
my_function x
(如果
x
Foo
类型的变量),以便将一些函数从int导出到bools

但是,我在第二行遇到了以下错误:

z3types.Z3Exception: Valid list of accessors expected. An accessor is a pair of the form (String, Datatype|Sort)
是否可以使用不同的语法,以函数作为属性来声明Z3数据类型


或者这是不允许的?这篇文章向我建议,Z3中不允许使用高阶函数,因此可能不允许向数据类型添加函数,以防止使用这些数据类型创建高阶函数。

您可以使用数组类型对函数空间进行编码

Foo = Datatype('Foo')
Foo.declare('foo', ('my_function', ArraySort(IntSort(), BoolSort())))
print Foo.create()