声明另一个代数数据类型的代数数据类型?

时间:2014-05-08 14:22:31

标签: z3 z3py

我想知道是否可以创建依赖于Z3Py中另一个代数数据类型的代数数据类型。

示例,假设我定义了自己的Bool数据类型,我想自己定义一个Bool列表:

from z3 import *
Bool = Datatype('Bool')
Bool.declare('TRUE')
Bool.declare('FALSE')
Bool = Bool.create()
TRUE = Bool.TRUE
FALSE = Bool.FALSE

这很好,然后:

BoolList = Datatype('BoolList')
BoolList.declare('bNIL')
BoolList.declare('bCONS', ('hd', Bool()), ('tail', BoolList))
BoolList = BoolList.create()

此操作失败并显示以下消息:

>>> BoolList.declare('bCONS', ('hd', Bool()), ('tail', BoolList))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: DatatypeSortRef instance has no __call__ method

原因是使用Bool()作为对早期定义的数据类型的引用。使用Z3 boolean排序就像魅力一样:

BoolList = Datatype('BoolList')
BoolList.declare('bNIL')
BoolList.declare('bCONS', ('hd', BoolSort()), ('tail', BoolList))

代数数据类型的定义是否不可能依赖于其他代数数据类型,或者我是否需要通过s.th.除了Bool()?

提前致谢! 卡斯滕

1 个答案:

答案 0 :(得分:1)

好吧,事实证明我使用了括号,我不应该 - 对自定义数据类型的引用&#34; Bool&#34;不需要打电话:

BoolList.declare('bCONS', ('hd', Bool), ('tail', BoolList))

工作正常:))