-
Notifications
You must be signed in to change notification settings - Fork 20
Open
Labels
Description
Dolmen accepts the following files ga.smt2 and ga.rsmt2 without complaining:
; ga.smt2
(set-option :produce-models true)
(set-option :produce-assignments true)
(set-logic QF_UF)
(declare-const p Bool)
(assert (=> (! (not p) :named not_p) (= p false)))
(check-sat)
(get-model)
(get-assignment)
; ga.rsmt2
sat
(
(define-fun p () Bool true)
)
((not_p true))
with
$ dolmen ga.smt2 -r ga.rsmt2 --check-model true
$This is surprising because the assignment is incorrect: not_p is defined as (not p) and can't be true when p is true. However Dolmen clearly knows some stuff about not_p because if I use the following for ga.rsmt2:
sat
(
(define-fun p () Bool true)
(define-fun not_p () Bool true)
)
((not_p true))
I get the following error:
File "ga.rsmt2", line 5, character 2-33:
5 | (define-fun not_p () Bool true)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error Trying to define a model value for symbol `not_p`,
but the symbol was already implicitly introduced in the term at line 5, character 12-36Either correctly parsing (get-assignment) or having an error/warning that it is not supported would be less confusing.