我想知道是否可以在 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 布尔排序就像一个魅力:
BoolList = Datatype('BoolList')
BoolList.declare('bNIL')
BoolList.declare('bCONS', ('hd', BoolSort()), ('tail', BoolList))
依赖于另一个代数数据类型的代数数据类型的定义是不可能的,还是我需要通过 s.th。除了 Bool() 吗?
提前致谢!卡斯滕