Keep definitions when global-declarations enabled (#4572)
authorAndres Noetzli <andres.noetzli@gmail.com>
Sat, 6 Jun 2020 08:24:17 +0000 (01:24 -0700)
committerGitHub <noreply@github.com>
Sat, 6 Jun 2020 08:24:17 +0000 (01:24 -0700)
commitfd60da4a22f02f6f5b82cef3585240c1b33595e9
tree137d45e65f204c2f604fed65d47a7d7b4f716c78
parent6a61c1a75b08867c7c06623b8c03084056b6bed7
Keep definitions when global-declarations enabled (#4572)

Fixes #4552. Fixes #4555. The SMT-LIB standard mandates that definitions
are kept when `:global-declarations` are enabled. Until now, CVC4 was
keeping track of the symbols of a definition correctly but lost the body
of the definition when the user context was popped. This commit fixes
the issue by adding a `global` parameter to
`SmtEngine::defineFunction()` and `SmtEngine::defineFunctionRec()`. If
that parameter is set, the definitions of functions are added at level 0
to `d_definedFunctions` and the lemmas for recursive function
definitions are kept in an additional list and asserted during each
`checkSat` call. The commit also updates new API, the commands, and the
parsers to reflect this change.
15 files changed:
NEWS
src/api/cvc4cpp.cpp
src/api/cvc4cpp.h
src/api/python/cvc4.pxd
src/api/python/cvc4.pxi
src/parser/cvc/Cvc.g
src/parser/parser.h
src/parser/smt2/Smt2.g
src/smt/command.cpp
src/smt/command.h
src/smt/smt_engine.cpp
src/smt/smt_engine.h
test/regress/CMakeLists.txt
test/regress/regress0/smtlib/issue4552.smt2 [new file with mode: 0644]
test/unit/api/solver_black.h