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() 以外?
前もって感謝します!カルステン