Closed BFarinier closed 3 years ago
BMC functionality was developed well before recursive functions were available. This functionality isn't well worth supporting: you can unfold transitions incrementally and use Z3 from outside for arbitrary logic combinations. The BMC encoding for non-linear Horn clauses is also pretty naive and anything usable would need to rethink how you want to unfold an SLD resolution tree selectively.
z3 fp.engine=bmc
behaves differently on these four formulas which looks equivalent to me. This is reproducible with4.8.9
,4.8.10
and4.8.11
.The following one is satisfiable :
If I replace the recursive function
forall_pred
with a relation it results in an error :If then I merge the two rules of
ForallPred
with amatch
, it results in an assertion violation :Finally if I merge the two rules of
Pairwise
with amatch
, it becomes unsatisfiable :