Z3Py をいじってみると、次のように整数リストを定義しました。
List = Datatype('List')
List.declare('cons', ('head', IntSort()), ('tail', List))
List.declare('nil')
List = List.create()
今、私は次のようなそのリストに対していくつかの単純な関数を定義した後です:
len = Function('len', List, IntSort())
def len_defn():
ls = List('ls')
return And([
len(List.nil) == 0,
ForAll(ls, Implies(List.is_cons(ls), len(ls) == 1+len(List.tail(ls))))
])
残念ながら、ls = List('ls')
エラーがスローされるため、これは最終的に失敗します。
AttributeError: DatatypeSortRef instance has no __call__ method
ls = Var(0, List)
スローの使用を試みる:
AttributeError: DatatypeRef instance has no attribute '__len__'
データ型の定量化を一般的にどのように処理する必要があるか、誰にもアイデアはありますか?