cvc5.git
3 years agoAdd API documentation for statistics (#6364)
Gereon Kremer [Thu, 22 Apr 2021 19:38:57 +0000 (21:38 +0200)]
Add API documentation for statistics (#6364)

This PR adds documentation for api::Statistics and api::Stat, as well as further explanations in sphinx.
It also adds a custom css to our sphinx theme that slightly changes how inline code blocks look.

3 years agoRemove unused stuff from options setup (#6422)
Gereon Kremer [Thu, 22 Apr 2021 19:27:54 +0000 (21:27 +0200)]
Remove unused stuff from options setup (#6422)

This PR removes some old stuff from our options setup that has not been used in a long time.
Most prominently, this includes the man pages that were still generated, and the alias and links options, which no longer worked anyway.

3 years ago Reorganizing use of skolem definition manager in prop engine (#6415)
Andrew Reynolds [Thu, 22 Apr 2021 19:12:23 +0000 (14:12 -0500)]
 Reorganizing use of skolem definition manager in prop engine (#6415)

Towards setting up the proper callbacks into the new justification heuristic.

Moves ownership of skolem definition manager from TheoryProxy to PropEngine.

3 years agoapi docs: Rename doxygen output directory. (#6426)
Aina Niemetz [Thu, 22 Apr 2021 17:46:04 +0000 (10:46 -0700)]
api docs: Rename doxygen output directory. (#6426)

3 years agoapi docs: Remove file reintroduced in past merge. (#6426)
Aina Niemetz [Thu, 22 Apr 2021 17:20:36 +0000 (10:20 -0700)]
api docs: Remove file reintroduced in past merge. (#6426)

3 years agoFix models for sygus-inference, bv2int, real2int (#6421)
Andrew Reynolds [Thu, 22 Apr 2021 15:02:05 +0000 (10:02 -0500)]
Fix models for sygus-inference, bv2int, real2int (#6421)

In each case, previously we were generating a define-fun, what we needed was to do a model substitution.

This actually meant that check-models was giving false positives. The model was incorrect but check-models succeeded due to its use of expand definitions.

3 years agoReconciling proofs and unsat cores (#6405)
Haniel Barbosa [Thu, 22 Apr 2021 14:33:38 +0000 (11:33 -0300)]
Reconciling proofs and unsat cores (#6405)

This commit changes how defaults are set and how the SMT solver is initialized so that proofs can be used fully with (new) unsat cores. Three modes of unsat cores are established now:

the upcoming assumption-based cores, which are incompatible with producing proofs (but enable proofs for preprocessing)
cores based on the SAT proof, which are incompatible with producing proofs (but enable proofs for preprocessing and the SAT solver)
cores based on the full proof, which are unrestricted
All the modes activate proofs but lead to errors if the user requires proofs but is not in the full proofs mode for cores.

3 years agoAllow in-place construction of `CDList` items (#6409)
Andres Noetzli [Thu, 22 Apr 2021 03:25:57 +0000 (20:25 -0700)]
Allow in-place construction of `CDList` items (#6409)

This commit adds CDList::emplace_back(), which allows users to create
elements in CDList in-place (as opposed to copying the items using
CDList::push_back(). This allows CDList to be used with
std::unique_ptrs, which do not allow copying. Using
CDList::emplace_back() could also be more efficient in certain cases.

3 years agoMove expand definition from Theory to TheoryRewriter (#6408)
Andrew Reynolds [Thu, 22 Apr 2021 02:42:08 +0000 (21:42 -0500)]
Move expand definition from Theory to TheoryRewriter (#6408)

This is work towards eliminating global calls to getCurrentSmtEngine()->expandDefinition.

The next step will be to add Rewriter::expandDefinition.

3 years agoArithmetic: Move implementation of type rules to cpp. (#6419)
Aina Niemetz [Wed, 21 Apr 2021 22:57:49 +0000 (15:57 -0700)]
Arithmetic: Move implementation of type rules to cpp. (#6419)

3 years agoUF: Move implementation of type rules to cpp. (#6403)
Aina Niemetz [Wed, 21 Apr 2021 22:48:38 +0000 (15:48 -0700)]
UF: Move implementation of type rules to cpp. (#6403)

3 years agoAdd explicit dependencies for base lib (#6410)
Gereon Kremer [Wed, 21 Apr 2021 21:59:07 +0000 (23:59 +0200)]
Add explicit dependencies for base lib (#6410)

This PR adds missing cmake dependencies for the base library. This makes sure that Debug_tags.h and Trace_tags.h are already present when we start compiling.

3 years agoPass GMP to libpoly (#6411)
Gereon Kremer [Wed, 21 Apr 2021 19:33:21 +0000 (21:33 +0200)]
Pass GMP to libpoly (#6411)

This PR makes sure that our build of libpoly works on systems without GMP: by passing the paths to GMP we use ourselves to libpoly, we make sure libpoly always has a suitable version of GMP.
Also, we make libpoly somewhat faster to build by disabling tests.

3 years agoDatatypes: Move implementation of type rules to cpp. (#6418)
Aina Niemetz [Wed, 21 Apr 2021 18:54:32 +0000 (11:54 -0700)]
Datatypes: Move implementation of type rules to cpp. (#6418)

3 years agoGoodbye CVC4, hello cvc5! (#6371)
Mathias Preiner [Wed, 21 Apr 2021 17:21:34 +0000 (10:21 -0700)]
Goodbye CVC4, hello cvc5! (#6371)

This commits changes the build system to cvc5 and removes the remaining
occurrences of CVC4. It further cleans up outdated/unused scripts in contrib/.

3 years agocmake: Add optional module name argument for check_python_module helper. (#6406)
Mathias Preiner [Wed, 21 Apr 2021 12:52:27 +0000 (05:52 -0700)]
cmake: Add optional module name argument for check_python_module helper. (#6406)

Addtionally adds checks for required documentation modules.

3 years agoSets: Move implementation of type rules to cpp. (#6401)
Aina Niemetz [Wed, 21 Apr 2021 12:27:16 +0000 (05:27 -0700)]
Sets: Move implementation of type rules to cpp. (#6401)

3 years agoArrays: Move implementation of type rules to cpp. (#6407)
Aina Niemetz [Wed, 21 Apr 2021 03:15:43 +0000 (20:15 -0700)]
Arrays: Move implementation of type rules to cpp. (#6407)

3 years agoAdd unit test for abduction (#6400)
Andrew Reynolds [Wed, 21 Apr 2021 03:02:31 +0000 (22:02 -0500)]
Add unit test for abduction (#6400)

3 years agoAdd basic utilities for new implementation of justification heuristic (#6333)
Andrew Reynolds [Wed, 21 Apr 2021 02:34:35 +0000 (21:34 -0500)]
Add basic utilities for new implementation of justification heuristic (#6333)

This sets up the core utilities for the new implementation of justification heuristic

3 years agoAdd getNumIndices to Op (#6386)
mudathirmahgoub [Wed, 21 Apr 2021 01:57:56 +0000 (20:57 -0500)]
Add getNumIndices to Op (#6386)

Add getNumIndices to Op

3 years agoSplit FP expand definitions to own module (#6392)
Andrew Reynolds [Tue, 20 Apr 2021 23:53:56 +0000 (18:53 -0500)]
Split FP expand definitions to own module (#6392)

This moves the code for expanding definitions in floating point to its own module, which lives in the rewriter.

This is work towards moving Theory::expandDefinitions to Rewriter::expandDefinitions.

The code was only moved, not modified in this PR.

3 years agoBV: Move implementation of type rules from header to .cpp. (#6360)
Aina Niemetz [Tue, 20 Apr 2021 23:06:11 +0000 (16:06 -0700)]
BV: Move implementation of type rules from header to .cpp. (#6360)

3 years agoSep: Move implementation of type rules to cpp. (#6402)
Aina Niemetz [Tue, 20 Apr 2021 22:55:56 +0000 (15:55 -0700)]
Sep: Move implementation of type rules to cpp. (#6402)

3 years agoQuantifiers: Move implementation of type rules to cpp. (#6404)
Aina Niemetz [Tue, 20 Apr 2021 22:33:39 +0000 (15:33 -0700)]
Quantifiers: Move implementation of type rules to cpp. (#6404)

3 years agoAdd InferenceId as resources (#6339)
Gereon Kremer [Tue, 20 Apr 2021 22:10:17 +0000 (00:10 +0200)]
Add InferenceId as resources (#6339)

This PR extends the resource manager to consider theory::InferenceId a resource we can spend. This should give us a robust way to have the resource limiting cover a lot of theory reasoning. To make use of this, TheoryInferenceManager now spends these resources.
Also, it makes the ResourceManager properly use the options from the Env class.

3 years agoAdd instantiation pool feature to the API (#6358)
Andrew Reynolds [Tue, 20 Apr 2021 21:40:12 +0000 (16:40 -0500)]
Add instantiation pool feature to the API (#6358)

This adds the command declare-pool to the public API. It also adds parsing support for this feature, lifts the internal kinds to public kinds, adds an example regression, and a unit test for the new declare-pool solver method.

3 years agoSplit C++ API docs from general docs (#6365)
Gereon Kremer [Tue, 20 Apr 2021 21:10:38 +0000 (23:10 +0200)]
Split C++ API docs from general docs (#6365)

3 years agoRemove support for CVC3 language. (#6369)
Aina Niemetz [Tue, 20 Apr 2021 20:25:10 +0000 (13:25 -0700)]
Remove support for CVC3 language. (#6369)

3 years agoBasic setup for examples in documentation (#6383)
Gereon Kremer [Tue, 20 Apr 2021 19:37:18 +0000 (21:37 +0200)]
Basic setup for examples in documentation (#6383)

3 years agoAdd guards to disable clang-format around placeholders in templates. (#6375)
Aina Niemetz [Tue, 20 Apr 2021 18:58:46 +0000 (11:58 -0700)]
Add guards to disable clang-format around placeholders in templates. (#6375)

3 years agoFix `ANTLR3_COMMAND` for system ANTLR3 JAR (#6399)
Andres Noetzli [Tue, 20 Apr 2021 18:46:14 +0000 (11:46 -0700)]
Fix `ANTLR3_COMMAND` for system ANTLR3 JAR (#6399)

ANTLR3_COMMAND was using a fixed path instead of relying on the
ANTLR3_JAR variable. If the ANTLR3 JAR was found on the system (for
example due to an existing deps folder at the root of the CVC4
folder), then the command would fail because the JAR was not at the
expected location. This commit changes the command to use the variable
and prints the location of the JAR file to make debugging easier.

3 years agoProperly link Poly against GMP (#6398)
Gereon Kremer [Tue, 20 Apr 2021 16:22:47 +0000 (18:22 +0200)]
Properly link Poly against GMP (#6398)

This PR fixes a linker issue with libpoly and static builds where Poly and GMP would be linked against in the wrong order.

3 years agopython API sorts: adding functions and tests (#6361)
yoni206 [Tue, 20 Apr 2021 14:33:10 +0000 (07:33 -0700)]
python API sorts: adding functions and tests (#6361)

This PR does the following:

1. removes old python sort API test
2. creates a new python sort API test, obtained by translating the (entire) cpp unit test https://github.com/CVC4/CVC4/blob/master/test/unit/api/sort_black.cpp
3. adds support for bags and datatype selectors/testers domain/codomain in the python API.

3 years agoFully incorporate quantifiers macros into ppAssert / non-clausal simplification ...
Andrew Reynolds [Mon, 19 Apr 2021 21:59:35 +0000 (16:59 -0500)]
Fully incorporate quantifiers macros into ppAssert / non-clausal simplification (#6394)

This PR removes the quantifiers macro preprocessing pass, which had several shortcomings, both in terms of performance and features.

This makes it so that quantifier macros are the (optional) implementation of TheoryQuantifiers::ppAssert.

In other words, quantifiers can now be put into "solved form", forall x. P(x) ---> P = lambda x. true.

This is part of an effort to improve proofs for preprocessing, as well as centralizing our reason about substitutions for the sake of efficiency.

3 years agoRemove linking against gmp and cln in tests and parser (#6376)
Gereon Kremer [Mon, 19 Apr 2021 09:30:04 +0000 (11:30 +0200)]
Remove linking against gmp and cln in tests and parser (#6376)

Finally, we no longer need to link against GMP and CLN for the parser and the tests.
To actually achieve this, this PR also removes some dead code and unused includes from some parser files.

3 years agoFix dependencies for stats options (#6378)
Gereon Kremer [Fri, 16 Apr 2021 15:12:03 +0000 (17:12 +0200)]
Fix dependencies for stats options (#6378)

A last-minute edit in a previous PR broke the handling of dependencies between the statistic options.

3 years agoFix ONCE for post-rewrite (#6372)
Andrew Reynolds [Fri, 16 Apr 2021 14:36:40 +0000 (09:36 -0500)]
Fix ONCE for post-rewrite (#6372)

3 years agoRefactor cmake: auto-download and default-on dependencies (#6355)
Gereon Kremer [Fri, 16 Apr 2021 11:06:40 +0000 (13:06 +0200)]
Refactor cmake: auto-download and default-on dependencies (#6355)

This PR changes a few things in how dependencies are handled during configuration:

- --x-dir are removed for most dependencies, use the generic --dep-path instead
- the cmake ENABLE_AUTO_DOWNLOAD determines whether we attempt to download missing dependencies ourselves
- external projects check this option and send an error if it is OFF
- some optional dependencies are enabled by default (CaDiCaL, Poly, SymFPU)

This will essentially fail every call to ./configure.sh until the user specifies --auto-download.

3 years agoReplace SExpr class by simpler conversion routines (#6363)
Gereon Kremer [Fri, 16 Apr 2021 10:45:10 +0000 (12:45 +0200)]
Replace SExpr class by simpler conversion routines (#6363)

This PR finally removes the SExpr class. SMT-LIB compatible output is retained by using new on-the-fly conversion to s-expression strings. This finally allows us to remove includes to integer and rational from smt_engine.h.
In detail:

- a new set of toSExpr() methods is implemented that converts certain types to s-expression strings (without an intermediate class representing s-expressions)
- SmtEngine::getInfo() returns a string instead of SExpr and uses the new toSExpr methods
- SmtEngine::getStatistic() is removed
- SExpr class is removed
- d_commandVerbosity uses int instead of Integer

3 years agocmake: Build object libraries for base and context. (#6374)
Mathias Preiner [Fri, 16 Apr 2021 06:55:25 +0000 (23:55 -0700)]
cmake: Build object libraries for base and context. (#6374)

cmake complains that the static base and context libraries are not
exported as install targets. Since we do not want to install these
libraries we'll build object libraries instead.

3 years agopreprocessing context: Add wrapper for model substitutions. (#6370)
Aina Niemetz [Thu, 15 Apr 2021 21:57:53 +0000 (14:57 -0700)]
preprocessing context: Add wrapper for model substitutions. (#6370)

Previously, preprocessing passes added model substitutions without
expanding definitions for substitutions, which can be a problem.
This adds a wrapper function to take care of it properly.

Fixes #5473.

3 years agoBuild support library from base and context. (#6368)
Mathias Preiner [Thu, 15 Apr 2021 21:45:54 +0000 (14:45 -0700)]
Build support library from base and context. (#6368)

This PR creates a support library from the utilities in base and context, which will be required in the parser as soon as we move the symbol table/manager to the parser.

Note: I decided to always build static libraries from base and context (and optionally enable -fPIC for shared builds) since I'm not sure if we want to have these libraries installed separately. Right now these are considered as cvc5 internal utilities that can be used in all cvc5 libraries, but not outside.

3 years agoAvoid options listener for resource manager. (#6366)
Gereon Kremer [Thu, 15 Apr 2021 21:05:44 +0000 (23:05 +0200)]
Avoid options listener for resource manager. (#6366)

This PR simplifies how the resource manager interacts with the options. Instead of using some notification mechanism, the resource manager simply retrieves the options via options::xyz(). This simplifies the options handler, the resource manager interface and the options.
When instructed to do so by the API, the SmtEngine now overwrites the respective option instead of calling out to the resource manager.

3 years agoRename occurrences of CVC4 to CVC5. (#6351)
Aina Niemetz [Thu, 15 Apr 2021 20:04:55 +0000 (13:04 -0700)]
Rename occurrences of CVC4 to CVC5. (#6351)

This renames everything but GitHub links and build system related
macros. Switching the build system to cvc5 will be the last step in the
renaming process.

3 years agoFix printing of stats when aborted. (#6362)
Gereon Kremer [Thu, 15 Apr 2021 19:30:49 +0000 (21:30 +0200)]
Fix printing of stats when aborted. (#6362)

This PR improves/fixes printing of statistics when the solver has been aborted, i.e. when we use printSafe(), and a few other minor issues with the new statistics setup.

add toString() methods for TypeConstant, api::Kind to allow for automatic printing by print_safe<>()
improve kindToString() to avoid std::stringstream
fix newlines between statistics in printSafe()
make printing of histograms consistent
make --stats-all, --stats-expert and --stats-every-check automatically enable --stats (and vice versa)

3 years agoReenable regression for minimizing instantiations (#6367)
Andrew Reynolds [Thu, 15 Apr 2021 19:08:00 +0000 (14:08 -0500)]
Reenable regression for minimizing instantiations (#6367)

3 years agoFix type rule for relations join image (#6349)
Andrew Reynolds [Wed, 14 Apr 2021 22:10:09 +0000 (17:10 -0500)]
Fix type rule for relations join image (#6349)

The join image type rule restricted that an argument was a constant. This is a logic restriction that should not be a part of the type checker.

This is required for not throwing type checking exceptions during proof conversion to LFSC.

3 years agoImprove documentation for FP rounding mode, add bibliography (#6343)
Gereon Kremer [Wed, 14 Apr 2021 21:52:06 +0000 (23:52 +0200)]
Improve documentation for FP rounding mode, add bibliography (#6343)

Co-authored-by: Aina Niemetz <aina.niemetz@gmail.com>
3 years agoImprove documentation of API kinds (#6341)
Gereon Kremer [Wed, 14 Apr 2021 21:10:11 +0000 (23:10 +0200)]
Improve documentation of API kinds (#6341)

This PR improves the documentation of the api::Kind enum. Note that the docs for many of the enum values should still be improved. This PR merely makes sure that everything that is already there is actually output (/* vs /**) and properly rendered (missing spacing between lists, some formulas, etc).

3 years agoImprove documentation for API exceptions (#6340)
Gereon Kremer [Wed, 14 Apr 2021 20:35:07 +0000 (22:35 +0200)]
Improve documentation for API exceptions (#6340)

3 years agoRefactor / reimplement statistics (#6162)
Gereon Kremer [Wed, 14 Apr 2021 19:37:12 +0000 (21:37 +0200)]
Refactor / reimplement statistics (#6162)

This PR refactors how we collect statistics.
It splits the current statistic values into the values and a proxy object. The actual values now live inside the registry (making the ownership model way easier) while the proxy object are handed to whoever wants to collect a new statistic.
It also extends the C++ API to obtain and inspect the statistics.
To change the ownership, this PR needs to touch every single statistic in the whole codebase and change how it is registered.

3 years agoRename public and private headers in src/include. (#6352)
Aina Niemetz [Wed, 14 Apr 2021 18:56:47 +0000 (11:56 -0700)]
Rename public and private headers in src/include. (#6352)

3 years ago[unsat-cores] Improving new unsat cores (#6356)
Haniel Barbosa [Wed, 14 Apr 2021 17:50:10 +0000 (14:50 -0300)]
[unsat-cores] Improving new unsat cores (#6356)

This commit adds a new option to produce unsat cores based on our proof infrastructure (whereas previously we could only do so if we were also checking unsat cores) and the corresponding changes to the default settings to account for it. Since now options::unsatCores() and options::produceProofs() are incompatible, several parts of the code where we tested if we were in "old unsat cores mode", by testing the former and the negation of the latter options, are updated accordingly.

This commit also changes how SMT engine sets things by disabling proofs in the theory engine if we are in unsat core mode.

3 years agoAdd internal API methods for pool-based instantiation (#6350)
Andrew Reynolds [Wed, 14 Apr 2021 16:49:50 +0000 (11:49 -0500)]
Add internal API methods for pool-based instantiation (#6350)

3 years agoAdd interface for getting relevant assertions (#5131)
Andrew Reynolds [Wed, 14 Apr 2021 16:12:30 +0000 (11:12 -0500)]
Add interface for getting relevant assertions (#5131)

This adds an interface to TheoryEngine for getting the current set of relevant assertions if it is available.

An interface to this can further be added to the API in a future PR.

3 years agoMerge equivalent sub-obligations instead of discarding them. (#6353)
Abdalrhman Mohamed [Wed, 14 Apr 2021 14:36:58 +0000 (07:36 -0700)]
Merge equivalent sub-obligations instead of discarding them. (#6353)

This PR modifies the behavior of the reconstruction algorithm when the term to reconstruct contains two or more equivalent sub-terms, but one is easier to reconstruct than the others. Since we do not know which one is easier to reconstruct by matching, we match against all sub-terms. If a solution is found for one sub-term, we use it to solve the others.

3 years agoWarn about infeasible SyGuS conjectures (#6345)
Andrew Reynolds [Wed, 14 Apr 2021 13:58:33 +0000 (08:58 -0500)]
Warn about infeasible SyGuS conjectures (#6345)

3 years ago[proof-new] Fix explanation of literals in SAT proof manager (#6346)
Haniel Barbosa [Wed, 14 Apr 2021 13:31:35 +0000 (10:31 -0300)]
[proof-new] Fix explanation of literals in SAT proof manager (#6346)

Prevents exponential behavior in SAT proof generation by not reexplaining previously explained literals. Also fix a potential issue in not previously overwriting rederived resolution chains during solving.

3 years ago[proof-new] Miscellaneous improvements to dot printer (#6342)
Haniel Barbosa [Wed, 14 Apr 2021 12:54:03 +0000 (09:54 -0300)]
[proof-new] Miscellaneous improvements to dot printer (#6342)

3 years agoFix libpoly build and use new release (#6354)
Gereon Kremer [Wed, 14 Apr 2021 12:40:55 +0000 (14:40 +0200)]
Fix libpoly build and use new release (#6354)

This PR fixes the libpoly build: it naively removed the test/ folder from the source directory to save on cache size.
It also uses the recently published 0.1.9 release of libpoly.
Fixes #4706.

3 years agoAdd pool instantiation strategy (#6308)
Andrew Reynolds [Tue, 13 Apr 2021 21:33:07 +0000 (16:33 -0500)]
Add pool instantiation strategy (#6308)

Adds an instantiation strategy based on user-provided pool annotations.

The next PR will connect this to quantifiers engine.

3 years agoRefactor quantifiers macros (#6348)
Andrew Reynolds [Tue, 13 Apr 2021 20:38:36 +0000 (15:38 -0500)]
Refactor quantifiers macros (#6348)

This does some refactoring of quantifiers macros preprocessing pass to use up-to-date utility methods, including lambdas, substitutions, methods for getting free variables.

This is work towards adding proofs for macros.

3 years agoci: Use CVC5_REGRESSION_ARGS. (#6347)
Mathias Preiner [Tue, 13 Apr 2021 20:00:29 +0000 (13:00 -0700)]
ci: Use CVC5_REGRESSION_ARGS. (#6347)

3 years agoFormalize more skolems (#6307)
Andrew Reynolds [Tue, 13 Apr 2021 19:30:03 +0000 (14:30 -0500)]
Formalize more skolems (#6307)

This formalizes more skolems in preparation for moving Theory::expandDefinitions to Rewriter::expandDefinitions.

It also adds proof support for datatypes purification.

3 years agoAPI docs: Add custom target to build for GH pages. (#6335)
Aina Niemetz [Tue, 13 Apr 2021 17:19:12 +0000 (10:19 -0700)]
API docs: Add custom target to build for GH pages. (#6335)

3 years agoAvoid using substitute's input cache after the method call. (#6328)
Abdalrhman Mohamed [Tue, 13 Apr 2021 12:45:43 +0000 (05:45 -0700)]
Avoid using substitute's input cache after the method call. (#6328)

As it traverses a node, Node::substitute populates its input cache with TNodes that are not preserved by the SygusReconstruct module and maybe destroyed after the method call. This PR fixes a bug where those unsafe TNodes are referenced throughout the module by passing the method a temporary copy of the cache instead.

3 years agoFix sexpr bug with AST output language. (#6329)
Abdalrhman Mohamed [Tue, 13 Apr 2021 01:51:24 +0000 (18:51 -0700)]
Fix sexpr bug with AST output language. (#6329)

When a command is invoked, its result/status may be printed depending on its current verbosity, which (for probably an outdated reason) is stored in SMTEngine. One of my previous PRs modified the SMTEngine to return the verbosity as an sexpr. The modification works correctly when the output language is SMT2, but it breaks down with the AST output language, which prints sexprs in a different way. This PR fixes this bug by making SMTEngine return options as strings instead of sexpr.

3 years agoBags: Move more implementation of type rule from header to .cpp. (#6336)
Aina Niemetz [Tue, 13 Apr 2021 01:33:55 +0000 (18:33 -0700)]
Bags: Move more implementation of type rule from header to .cpp. (#6336)

3 years agoStrings: Move implementation of type rules from header to .cpp file. (#6334)
Aina Niemetz [Mon, 12 Apr 2021 23:09:43 +0000 (16:09 -0700)]
Strings: Move implementation of type rules from header to .cpp file. (#6334)

3 years agoFix computation of whether a type is finite (#6312)
Andrew Reynolds [Mon, 12 Apr 2021 21:55:44 +0000 (16:55 -0500)]
Fix computation of whether a type is finite (#6312)

This PR generalizes TypeNode::isFinite / TypeNode::isInterpretedFinite with TypeNode::getCardinalityClass. It then uses this method to fix our computation of when a type should be treated as finite.

Fixes #4260, fixes #6100 (that benchmark now says unknown without an error).

3 years agoRefactor resource manager (#6322)
Gereon Kremer [Mon, 12 Apr 2021 20:58:14 +0000 (22:58 +0200)]
Refactor resource manager (#6322)

This PR does another round of refactoring of the resource manager and related code.

- it moves the Resource enum out of the ResourceManager class
- it treats the resources in a generic way (storing the statistics in a vector) instead of the manual treatment we had before
- weights no longer live in the options, but in the ResourceManager and are changed accordingly in the ResourceManager constructor
- following the generic treatment of resources, it also removes all the resource-specific options --x-step in favor of a generic --rweight name=weight
- removed several unused methods from the ResourceManager

Note that we handle the Resource enum in a way that allows to easily use other enums as additional resources, for example InferenceId. The general idea is that we will at some point have sensible default weights (so that the cumulative resources somewhat simulate the solver runtime) and users (almost) never need to modify them.

3 years agoOnly require GMP 6.1 (#6332)
Gereon Kremer [Mon, 12 Apr 2021 20:19:22 +0000 (22:19 +0200)]
Only require GMP 6.1 (#6332)

The recent refactoring of the dependencies raised the required GMP version to 6.2 for no particular reason. This PR reverts this change to only require GMP 6.1 again.

3 years agoRefactor and update copyright headers. (#6316)
Aina Niemetz [Mon, 12 Apr 2021 19:31:43 +0000 (12:31 -0700)]
Refactor and update copyright headers. (#6316)

3 years agoConsolidate interface to prop engine (#6189)
Andrew Reynolds [Mon, 12 Apr 2021 17:26:44 +0000 (12:26 -0500)]
Consolidate interface to prop engine (#6189)

This consolidates the interface for asserting input formulas to the PropEngine from SmtSolver.

As a consequence of this PR, this corrects one issue with the justification heuristic where skolem definitions were considered "assertions" by the justification heuristic (e.g. formulas that must be satisfied) instead of just being required for skolems in relevant literals. This was asymmetric from skolem definitions from lemmas, which were not being considered assertions. Now, skolem definitions are never assertions.

I tested this on QF_LIA SMT-LIB with decision=justification with 300 second timeout, essentially no difference in results (+6-5 all close to timeout). Also no difference on QF_S + QF_SLIA.

3 years agoFix GitHub Actions macOS build (#6331)
Andres Noetzli [Mon, 12 Apr 2021 17:15:16 +0000 (10:15 -0700)]
Fix GitHub Actions macOS build (#6331)

The build is currently failing because it tries to download an older
version of the ccache package. This commit makes sure that Homebrew is
up-to-date before trying to install packages.

3 years agoRename CVC4_ macros to CVC5_. (#6327)
Aina Niemetz [Sat, 10 Apr 2021 00:22:07 +0000 (17:22 -0700)]
Rename CVC4_ macros to CVC5_. (#6327)

3 years agoRename CVC4__ header guards to CVC5__. (#6326)
Aina Niemetz [Fri, 9 Apr 2021 23:14:21 +0000 (16:14 -0700)]
Rename CVC4__ header guards to CVC5__. (#6326)

3 years agoNew C++ Api: Initial layout of Api documentation. (#6325)
Aina Niemetz [Fri, 9 Apr 2021 22:28:18 +0000 (15:28 -0700)]
New C++ Api: Initial layout of Api documentation. (#6325)

3 years ago[proof-new] Optimizing sat proof (#6324)
Haniel Barbosa [Fri, 9 Apr 2021 20:30:44 +0000 (17:30 -0300)]
[proof-new] Optimizing sat proof (#6324)

For some benchmarks, checking MACRO_RESOLUTION can be up to 80% (!!!) of the running time. This commit introduces a new rule that does not perform checking. The old rule and checker are kept for ground truth. Some miscellaneous minor changes are also made in the PR.

3 years agoAdd identifiers for extended function reductions (#6314)
Andrew Reynolds [Fri, 9 Apr 2021 19:21:11 +0000 (14:21 -0500)]
Add identifiers for extended function reductions (#6314)

This adds identifiers for extended function reductions, which are reasons for why an extended term no longer needs to be processed. The motivation is help understand check-model failures.

This PR adds identifiers to the ExtTheory utility. It also cleans up some unused parts of this utility. Some blocks of code changed indentation in this class.

3 years agoAdd regressions for issue 6214 (#6305)
Andrew Reynolds [Fri, 9 Apr 2021 19:11:31 +0000 (14:11 -0500)]
Add regressions for issue 6214 (#6305)

Adds 3 of the 6 benchmarks from issue 6214, the 1st and 5th benchmarks timeout.
Fixes #6214.

These benchmarks were fixed by 3c98bb2.

3 years agoLearn equalities involving Boolean variables (#6323)
Andres Noetzli [Fri, 9 Apr 2021 18:01:23 +0000 (11:01 -0700)]
Learn equalities involving Boolean variables (#6323)

Previously, the circuit propagator was not learning literals of the form (= x t) where x is Boolean, since this term was not treated as a theory literal.
This commit changes that, which improves performance significantly, since it
allows the elimination of Boolean variables, which, in turn, can make the
justification heuristic much more effective.

Signed-off-by: Andres Noetzli noetzli@amazon.com
3 years agoAvoid spurious runs in run_regression.py (#6318)
Andrew Reynolds [Fri, 9 Apr 2021 13:25:04 +0000 (08:25 -0500)]
Avoid spurious runs in run_regression.py (#6318)

The options --check-synth-sol and --check-abducts are independent from the rest of the solver. Hence, it is not necessary to run with/without them enabled in our regressions.

This saves roughly 30-40 seconds on regression regress0-2.

3 years agoUse expr miner timeout (#6321)
Andrew Reynolds [Fri, 9 Apr 2021 13:13:37 +0000 (08:13 -0500)]
Use expr miner timeout (#6321)

We currently were ignoring the option --sygus-expr-miner-timeout=N. This corrects the issue.

3 years agoAdd missing InferenceIds to toString (#6320)
Gereon Kremer [Fri, 9 Apr 2021 12:41:14 +0000 (14:41 +0200)]
Add missing InferenceIds to toString (#6320)

This PR adds InferenceIds that were previously missing from the corresponding toString() method.

3 years agoFix run_regression for cvc expected outputs (#6317)
Andrew Reynolds [Thu, 8 Apr 2021 22:29:49 +0000 (17:29 -0500)]
Fix run_regression for cvc expected outputs (#6317)

Previously, we were not checking models / proofs / unsat cores for cvc inputs on CI.

3 years agoUse newer version of update-pr-branch action. (#6315)
Gereon Kremer [Thu, 8 Apr 2021 20:52:19 +0000 (22:52 +0200)]
Use newer version of update-pr-branch action. (#6315)

The CI action we use to update PRs that are ready to merge has been updated and now only considers the last review of every reviewer. It now allows to automatically update (and then merge) PRs where a reviewer first requested changes, and then accepted the PR. See adRise/update-pr-branch#11 for more details.
This PR bumps the version to the most recent one.

3 years agoUse exceptions when constructing malformed datatypes (#6303)
Andrew Reynolds [Thu, 8 Apr 2021 18:22:29 +0000 (13:22 -0500)]
Use exceptions when constructing malformed datatypes (#6303)

Fixes #5150.

3 years agoAdd identifiers for sources of incompleteness (#6311)
Andrew Reynolds [Thu, 8 Apr 2021 14:15:31 +0000 (09:15 -0500)]
Add identifiers for sources of incompleteness (#6311)

This PR classifies all internal kinds of incompleteness as identifiers.

It makes it so TheoryEngine records an identifier when its incomplete flag is set.

The next step will be to possibly communicate this value to the user.

3 years agoAdd benchmark for issue 5101 (#6301)
Andrew Reynolds [Thu, 8 Apr 2021 10:14:48 +0000 (05:14 -0500)]
Add benchmark for issue 5101 (#6301)

Fixes #5101.

3 years agoAdd benchmark for issue 4400 (#6288)
Andrew Reynolds [Thu, 8 Apr 2021 10:05:43 +0000 (05:05 -0500)]
Add benchmark for issue 4400 (#6288)

Fixes #4400.

3 years agoInitial support for parametric datatypes in sygus (#6304)
Andrew Reynolds [Thu, 8 Apr 2021 01:40:42 +0000 (20:40 -0500)]
Initial support for parametric datatypes in sygus (#6304)

Fixes #6298.

Enables parsing of par in the sygus parser, and adds support for default grammar construction.

Also fixes a bug related to single invocation for non-function types.

3 years agoRemove old API header. (#6309)
Aina Niemetz [Wed, 7 Apr 2021 23:12:23 +0000 (16:12 -0700)]
Remove old API header. (#6309)

3 years agoAdd cardinality class definition (#6302)
Andrew Reynolds [Wed, 7 Apr 2021 22:23:40 +0000 (17:23 -0500)]
Add cardinality class definition (#6302)

This is work towards correcting our computation of whether a type is finite. Currently, arrays/functions with uninterpreted sorts as element/range types are always considered infinite. This is incorrect if finite model finding is enabled, since the interpretation of the uninterpreted sort can be one. This leads to errors during model building due to exhausted values (#4260, #6100).

This PR adds a new concept of a cardinality class, which is required for properly categorizing types with/without finite model finding.

A followup PR will replace TypeNode::isFinite with TypeNode::getCardinalityClass. Calls to TypeNode::isFinite will be replaced by calls to TheoryState::isTypeFinite, which will properly take cardinality classes into account.

3 years agoAdd benchmark for 6270 (#6283)
Andrew Reynolds [Wed, 7 Apr 2021 22:13:14 +0000 (17:13 -0500)]
Add benchmark for 6270 (#6283)

3 years ago[proof-new] Fixing SMT post-processor's handling of assumptions (#6277)
Haniel Barbosa [Wed, 7 Apr 2021 21:17:33 +0000 (18:17 -0300)]
[proof-new] Fixing SMT post-processor's handling of assumptions (#6277)

Previously the SMT post-processor would update any assumption as long as it
had a proof for it. This can be a problem when one as assumption introduced in a
scope that should not be expanded. This commit fixes the issue by adding the
option of configuring a proof node updater to track scopes and the assumptions
they introduce, which can be used to determine the prood nodes which should be
updated. It also changes the SMT post-processor to only update assumptions that
have not been introduced in some scope.

This commit fixes an issue found by @Lachnitt during the integration of CVC4 and Isabelle.

3 years agoAdd benchmark for issue 4420 (#6286)
Andrew Reynolds [Wed, 7 Apr 2021 21:03:27 +0000 (16:03 -0500)]
Add benchmark for issue 4420 (#6286)

Adds a benchmark that was previous sensitive to assertion order, fixes #4420.

3 years agoSet incomplete if not applying ho extensionality (#6281)
Andrew Reynolds [Wed, 7 Apr 2021 20:45:39 +0000 (15:45 -0500)]
Set incomplete if not applying ho extensionality (#6281)

If the user manually disables ho-extensionality via expert option --no-uf-ho-ext, we should answer "unknown" instead of "sat" when applicable.

Fixes #4318.

3 years agoFixes for abducts (#6279)
Andrew Reynolds [Wed, 7 Apr 2021 20:28:47 +0000 (15:28 -0500)]
Fixes for abducts (#6279)

Fixes benchmarks 2 and 3 from #5848.