関数の宣言に制限はありますか?
たとえば、このコードは unsat を返します。
from z3 import *
def one_op (op, arg1, arg2):
if op==1:
return arg1*arg2
if op==2:
return arg1-arg2
if op==3:
return arg1+arg2
return arg1+arg2 # default
s=Solver()
arg1, arg2, result, unk_op=Ints ('arg1 arg2 result unk_op')
s.add (unk_op>=1, unk_op<=3)
s.add (arg1==1)
s.add (arg2==2)
s.add (result==3)
s.add (one_op(unk_op, arg1, arg2)==result)
print s.check()
Z3Py は宣言された関数をどのように解釈しますか? それは時々それを呼び出すだけですか、それともいくつかの隠された機械がここにもありますか?