Прочитав strategies guide от Z3 и this answer от Leo, я ожидал, что (check-sat)
и (check-sat-using smt)
эквивалентны. Однако при запуске Z3 4.3.2 три раза по сравнению с нашим набором тестов (230 файлов SMTLIB2) потребовалось 198 с/192 с/195 секунд с (check-sat)
, но 275s/283s/270s с (check-sat-using smt)
. Я также пробовал ночной сборщик Z3 4.4.0 d3fb5f2a4cda, и разница была аналогичной.(check-sat) vs (check-sat-using smt)
Почему это может быть?
немного больше информации, которая может иметь отношение:
- Windows 7 x64, Z3 x64
- Все наши тесты выполнены с
auto_config false
иsmt.mbqi false
- Все использование кванторов и интерпретируемые функции
- Некоторые использование (нелинейная) int и/или действительная арифметика
- Все интенсивно используют блоки push-pop
Edit: То, что я в конечном счете, хотел бы сделать, это установить тайм-аут для некоторыхcheck-sat
звонков, но не для всех. AFAIK, это невозможно с check-sat
, но check-sat-using (using-params smt :soft_timeout $timeout)
должен работать. Это правильно?
Похоже, что http://stackoverflow.com/questions/23973453/ были потенциально связаны –
FYI в текущей ведущей ветви Z3, можно получить эффект, который вы ищете, используя '(check-sat-using по умолчанию) '. См. [Этот вопрос] (https://stackoverflow.com/questions/37443308/check-sat-using-default-or-similar). –