Skip to content

Support for get-assignment #216

@bclement-ocp

Description

@bclement-ocp

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-36

Either correctly parsing (get-assignment) or having an error/warning that it is not supported would be less confusing.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions