Track names for witness terms in model (#8184)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 28 Feb 2022 21:03:30 +0000 (15:03 -0600)
committerGitHub <noreply@github.com>
Mon, 28 Feb 2022 21:03:30 +0000 (21:03 +0000)
commitc7c5e4a17b7c18804c0ebe82ef39bb34c60da92d
tree3aa332b898a389996dcb48f155bd0db486da1492
parentf356ac03da7d908903db3e1328e3390b02fc3aac
Track names for witness terms in model (#8184)

This ensures that enough information is set to allow users to understand models with witness terms.

For example, for input:

(set-logic ALL)
(set-info :status sat)
(declare-fun x () String)
(declare-fun y () String)
(declare-fun z () String)
(assert (= (str.len x) 999999999999999999999999))
(assert (= (str.len y) 999999999999999999999999))
(assert (= z (str.++ x y)))
(check-sat)
we now get:

sat
(
(define-fun x () String (witness ((s String)) (! (= (str.len s) 999999999999999999999999) :qid w1) ))
(define-fun y () String (witness ((s String)) (! (= (str.len s) 999999999999999999999999) :qid w0) ))
(define-fun z () String (str.++ (witness ((s String)) (! (= (str.len s) 999999999999999999999999) :qid w1) ) (witness ((s String)) (! (= (str.len s) 999999999999999999999999) :qid w0) )))
)
12 files changed:
src/parser/smt2/Smt2.g
src/printer/smt2/smt2_printer.cpp
src/theory/builtin/kinds
src/theory/builtin/theory_builtin_type_rules.h
src/theory/quantifiers/quantifiers_attributes.cpp
src/theory/quantifiers/quantifiers_attributes.h
src/theory/strings/theory_strings.cpp
src/theory/strings/theory_strings.h
src/theory/strings/theory_strings_utils.cpp
src/theory/strings/theory_strings_utils.h
test/regress/CMakeLists.txt
test/regress/regress0/strings/distinct-witness-id.smt2 [new file with mode: 0644]