Apologies if this is a stupid question - I'm quite new to using Z3 (and SMT in general) - but I am a bit stumped.
Say I have two files in the SMT2 input language, with minor differences, summarized as:
(define-fun T ((i Int)) Bool (... - too long to paste completely, but does define $prop)
(assert (T 0))
(declare-fun assum1 () Bool)
(assert (=> assum1 (not (and ($prop 0)))))
(check-sat assum1)
Now, one of these (the simpler one) returns "sat", the variant with more complex non-linear math returns "unknown".
I think that the more complex variant could be solved with a non-linear solver such as qfnra-nlsat (or perhaps other strategies), but trying to use it with check-sat-using:
(check-sat-using qfnra-nlsat assum1)
returns:
(error "line 246 column 29: invalid command argument, keyword expected")
However, not explicitly naming function assum1
(check-sat-using qfnra-nlsat)
runs, but gives me an "unknown" result.
So, my question is - how can I choose my solver and apply it specifically to the function "assum1"?
Thanks for your help.