cvc5.git
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.

3 years agoNew C++ Api: Rename and move checks.h. (#6306)
Aina Niemetz [Wed, 7 Apr 2021 20:18:53 +0000 (13:18 -0700)]
New C++ Api: Rename and move checks.h. (#6306)

3 years ago(proof-new) Proper implementation of proof node cloning (#6285)
Andrew Reynolds [Wed, 7 Apr 2021 19:45:45 +0000 (14:45 -0500)]
(proof-new) Proper implementation of proof node cloning (#6285)

Previously, we were traversing proof node as a tree, now we use a dag traversal.

This also makes sure that proofs work when we have a external proof conversion and we are in incremental mode. In such cases, the final proof must be cloned to ensure that we do not overwrite proof nodes, which may be reused across multiple check-sat.

3 years agoAdd term pools utility (#6243)
Andrew Reynolds [Wed, 7 Apr 2021 19:30:58 +0000 (14:30 -0500)]
Add term pools utility (#6243)

This utility will be used to track pools for pool-based instantiation.

3 years agoNew C++ Api: Initial setup of Api documentation. (#6295)
Aina Niemetz [Wed, 7 Apr 2021 19:15:31 +0000 (12:15 -0700)]
New C++ Api: Initial setup of Api documentation. (#6295)

This configures the initial setup for generating Api documentation with
Sphinx via Breathe and Doxygen. All fixes in the documentation of the
cvc5.h header are for the purpose of eliminating warnings. This PR does
not check for completeness of the documentation, and does not yet tweak
the documentation to be nice, beautiful and consistent, which is
postponed to future PRs.

Configure with `--docs`, and then make. This will generate a `docs`
directory in the build directory. The Sphinx documentation can be found
at `build/docs/sphinx/index.html`. Doxygen documentation is only
generated as xml under `build/docs/doxygen`.

This PR further proposes a new style for copyright headers. If this
style is approved, I will submit a PR to update the update_copyright.pl
script.

3 years agoReplace calls to NodeManager::mkSkolem with SkolemManager::mkDummySkolem (#6291)
Andrew Reynolds [Wed, 7 Apr 2021 18:36:15 +0000 (13:36 -0500)]
Replace calls to NodeManager::mkSkolem with SkolemManager::mkDummySkolem (#6291)

This is in preparation for refactoring skolem creation throughout the code base to improve proofs and migrate Theory::expandDefinitions to Rewriter::expandDefinitions.

This PR also eliminates some unused code in TheoryArithPrivate.

Followup PRs will start formalizing/eliminating calls to mkDummySkolem.

3 years agocmake: Do not always regenerate cvc4kinds.{pxi,pxd}. (#6300)
Mathias Preiner [Wed, 7 Apr 2021 13:21:29 +0000 (06:21 -0700)]
cmake: Do not always regenerate cvc4kinds.{pxi,pxd}. (#6300)

Only regenerate files if dependencies changed. This avoids unnecessary
rebuilds of the Cython code.

3 years agocmake: Add helper to check if a given Python module is installed. (#6299)
Mathias Preiner [Tue, 6 Apr 2021 18:51:06 +0000 (11:51 -0700)]
cmake: Add helper to check if a given Python module is installed. (#6299)

3 years agoAdd benchmark for issue 5942 (#6296)
Andrew Reynolds [Tue, 6 Apr 2021 17:06:46 +0000 (12:06 -0500)]
Add benchmark for issue 5942 (#6296)

Fixes #5942.

This benchmark was fixed by recent changes to ppRewrite.

3 years agoRemove template argument from `NodeBuilder` (#6290)
Andres Noetzli [Tue, 6 Apr 2021 16:33:52 +0000 (09:33 -0700)]
Remove template argument from `NodeBuilder` (#6290)

Currently, NodeBuilder takes a single template argument: An integer
that determines the expected number of arguments. This argument is used
to determine the size of the d_inlineNvChildSpace array. This array is
used to construct nodes inline. The advantage of this is that we don't
have to allocate a NodeValue on the heap for the node under
construction until we are sure that the node is new. While templating
the array size may save some stack space (or avoid a heap allocation if
we statically know that we a fixed number of children and that number is
greater than 10), it complicates the code and leads to longer compile
times. Thus, this commit removes the template argument and moves some of
the NodeBuilder code to a source file for faster compilation.

CPU build time before change (debug build): 2429.68s
CPU build time after change (debug build): 2228.44s

Signed-off-by: Andres Noetzli noetzli@amazon.com
3 years agoFix tptp parser for negative rational (#6297)
Andrew Reynolds [Tue, 6 Apr 2021 16:23:44 +0000 (11:23 -0500)]
Fix tptp parser for negative rational (#6297)

3 years agoFix issue with lemma during equality engine iterator in sets (#6289)
Andrew Reynolds [Tue, 6 Apr 2021 12:28:59 +0000 (07:28 -0500)]
Fix issue with lemma during equality engine iterator in sets (#6289)

Fixes #4370.

3 years agogenkinds: Do not use relative paths to find src directory. (#6293)
Mathias Preiner [Tue, 6 Apr 2021 03:58:13 +0000 (20:58 -0700)]
genkinds: Do not use relative paths to find src directory. (#6293)

3 years agoRemove stdPrintAscii option (#6280)
Andrew Reynolds [Tue, 6 Apr 2021 03:37:46 +0000 (22:37 -0500)]
Remove stdPrintAscii option (#6280)

Fixes #4179.

3 years agoNew C++ Api: Rename and move headers. (#6292)
Aina Niemetz [Tue, 6 Apr 2021 02:31:28 +0000 (19:31 -0700)]
New C++ Api: Rename and move headers. (#6292)

3 years agoparsekinds: Remove DEFAULT_HEADER. (#6294)
Mathias Preiner [Tue, 6 Apr 2021 01:04:11 +0000 (18:04 -0700)]
parsekinds: Remove DEFAULT_HEADER. (#6294)

DEFAULT_HEADER in src/api/parsekinds.py is essentially unused since both genkinds.py scripts pass the kinds header to the script. The current value of DEFAULT_HEADER does not work for the scripts since the working directory for genkinds.py is in src/api/{java,python}.

3 years agoAdd documentation for theory_bags_type_rules.h (#6268)
mudathirmahgoub [Mon, 5 Apr 2021 21:54:28 +0000 (16:54 -0500)]
Add documentation for theory_bags_type_rules.h (#6268)

3 years agoFix spurious antecedant for symbolic regular expressions (#6284)
Andrew Reynolds [Mon, 5 Apr 2021 20:52:20 +0000 (15:52 -0500)]
Fix spurious antecedant for symbolic regular expressions (#6284)

Fixes #6271.

This was triggered by recent fixes, this fixes solution soundness issues with symbolic regular expressions due to spuriously included antecedants, which made lemmas SAT-context dependent while being cached as user-context dependent.

3 years agoAdd benchmark for issue 4412 (#6287)
Andrew Reynolds [Mon, 5 Apr 2021 20:25:37 +0000 (15:25 -0500)]
Add benchmark for issue 4412 (#6287)

3 years ago[proof-new] Registering proof checkers uniformly from the SMT solver (#6275)
Haniel Barbosa [Mon, 5 Apr 2021 18:47:40 +0000 (15:47 -0300)]
[proof-new] Registering proof checkers uniformly from the SMT solver (#6275)

Each theory has its own proof checker, responsible for checking the rules pertaining to that theory. The main proof checker uses these specialized checkers. Previously the main proof checker (of the proof node manager used across the SMT solver) was connected to these theory proof checkers during initialization of the theory. This commit adds an interface to the theories for retrieving its proof checker (analogous to how one retrieves the rewriter of a theory) which is used by a new method in the theory engine to register a theory proof checker to a given proof checker according to a theory id.

This is in preparation for the new unsat cores based on proofs.

3 years agoEnable UF when pre-skolem nested option is enabled (#6282)
Andrew Reynolds [Mon, 5 Apr 2021 17:17:39 +0000 (12:17 -0500)]
Enable UF when pre-skolem nested option is enabled (#6282)

Fixes #4328.

3 years agopython: Fix type casting in mkBitVector (#6261)
NicolaasWeideman [Mon, 5 Apr 2021 16:56:10 +0000 (09:56 -0700)]
python: Fix type casting in mkBitVector (#6261)

Fixes #6260.

Signed-off-by: Nicolaas <nweidema@usc.edu>
3 years agoFix subtyping for sets care graph (#6278)
Andrew Reynolds [Mon, 5 Apr 2021 15:21:55 +0000 (10:21 -0500)]
Fix subtyping for sets care graph (#6278)

We were getting types for set singleton/membership in a way that was unsafe for subtyping, which was leading to incorrectly computing care graphs for sets of reals.

Fixes #5705.

3 years agoAdd interface for skolem functions in SkolemManager (#6256)
Andrew Reynolds [Mon, 5 Apr 2021 14:34:18 +0000 (09:34 -0500)]
Add interface for skolem functions in SkolemManager (#6256)

This PR introduces the notion of a "skolem function" to SkolemManager, which is implemented as a simple cache of canonical skolem functions/variables.

This is a prerequisite for two things:
(1) Making progress on the LFSC proof conversion, which currently is cumbersome for skolems corresponding to regular expression unfolding.
(2) Cleaning up singletons. Having the ability make canonical skolem functions in skolem manager will enable Theory::expandDefinitions to move to TheoryRewriter::expandDefinitions. This will then enable removal of calls to SmtEngine::expandDefinitions.

This PR also makes arithmetic make use of this functionality already.

The next steps will be to clean up all raw uses of NodeManager::mkSkolem, especially for other theories that manually track allocated skolem functions.

3 years agoA proposal for python api unit tests (#6255)
yoni206 [Mon, 5 Apr 2021 13:30:19 +0000 (06:30 -0700)]
A proposal for python api unit tests (#6255)

This PR introduces two unit tests for the python api, translated directly from the unit tests for the cpp api.
The goal is to get feedback in order to reach some kind of a pattern/style for python API tests.
Also, i'd be happy to hear if there is any specific cpp api unit test I should translate for this initial attempt (e.g., a test that is more representative or might raise difficulties). For now i just picked the first two solver tests.

3 years agoOptimizer for BitVectors (#6213)
Yancheng Ou [Mon, 5 Apr 2021 13:21:40 +0000 (06:21 -0700)]
Optimizer for BitVectors (#6213)

Adds support for BitVector optimization, which is done via offline binary search. Units tests included.
Also mildly refactors the optimizer architecture.

3 years agoDisable substring component contains in strip endpoints (#6266)
Andrew Reynolds [Sat, 3 Apr 2021 18:21:55 +0000 (13:21 -0500)]
Disable substring component contains in strip endpoints (#6266)

Fixes the first benchmark from #6203.

3 years agoAdd cache for new dependencies folder. (#6265)
Gereon Kremer [Fri, 2 Apr 2021 21:11:52 +0000 (23:11 +0200)]
Add cache for new dependencies folder. (#6265)

This PR adds caching of the new dependencies folder build/deps/ for the CI jobs and renames the old deps folder to "auxiliary told".
Note that we need to cache the entirety of build/deps/ (instead of just the install folder for the old one), otherwise cmake will try to rebuild them. Some of the external projects remove unnecessary files in their build to reduce their footprint in the cache.

3 years agocmake: Do not link against main object library. (#6269)
Mathias Preiner [Fri, 2 Apr 2021 19:12:15 +0000 (12:12 -0700)]
cmake: Do not link against main object library. (#6269)

CMake 3.10.2 (default on Ubuntu 18.04) does not allow target_link_libraries on object libraries.

3 years agoNew statistics registry (#6210)
Gereon Kremer [Fri, 2 Apr 2021 18:29:27 +0000 (20:29 +0200)]
New statistics registry (#6210)

This PR adds the next part of the new statistics setup: the registry.
The new statistics registry owns the actual data and only issues proxy objects that can be used to modify the internally stored data.
Once we replace the old statistics setup, the files should be renamed from statistics_reg.* to statistics_registry.*.

3 years agoMinor refactoring (#6273)
Gereon Kremer [Fri, 2 Apr 2021 17:47:43 +0000 (19:47 +0200)]
Minor refactoring (#6273)

This PR does some minor refactorings in preparation for the new statistics: some renamings, removal of now obsolete code and usage of references instead of pointers.

3 years agoCleaning up friend relationships for commands (#6254)
Andrew Reynolds [Fri, 2 Apr 2021 16:55:16 +0000 (11:55 -0500)]
Cleaning up friend relationships for commands (#6254)

3 years agoFix case where RE unfolding generates a trivially true lemma (#6267)
Andrew Reynolds [Fri, 2 Apr 2021 16:43:53 +0000 (11:43 -0500)]
Fix case where RE unfolding generates a trivially true lemma (#6267)

An RE unfolding lemma may rewrite to true for tautological RE memberships that our rewriter does not rewrite the membership to true.

An example is (str.in_re x (re.* (re.union (str.to_re "A") (str.to_re x))).

This PR ensures we are robust to these cases.

This fixes benchmarks 3-5 from #6203. Benchmark 3 is added here, 4-5 time out.

3 years agoFindCaDiCaL: Avoid redirect to file (#6272)
Gereon Kremer [Fri, 2 Apr 2021 16:32:36 +0000 (18:32 +0200)]
FindCaDiCaL: Avoid redirect to file (#6272)

This PR avoids output redirection by replacing sed + redirect with copy + in-place sed.
Using output redirects can cause problems if the cmake output itself is redirected as well.
This should fix the current nightly failure.

3 years agoAdd utility classes for new statistics (#6178)
Gereon Kremer [Thu, 1 Apr 2021 22:40:19 +0000 (00:40 +0200)]
Add utility classes for new statistics (#6178)

This PR introduces two new sets of classes used for the new statistics setup.
The first set are the statistic values that hold the actual data and will live in the new statistics registry itself.
The second set are proxy objects: they only hold a pointer to the value classes and implement all the modifiers.

The code is not used yet, but replaces the code in the stats_* files in a subsequent PR.

3 years agoSimplify caching of regular expression unfolding (#6262)
Andrew Reynolds [Thu, 1 Apr 2021 22:02:33 +0000 (17:02 -0500)]
Simplify caching of regular expression unfolding (#6262)

This ensures that we always cache regular expressions in a user-dependent manner. Previously, we were erroneously caching in a SAT-dependent way for very rare cases when non-constant regular expressions were used. Since we never dependent on current assertions for the unfolding, there is no need to cache in the SAT context.

This fixes the second benchmark from #6203.

This PR also improves our traces for checking models in strings.

3 years agoFP: Factor out symfpu traits. (#6246)
Aina Niemetz [Thu, 1 Apr 2021 21:25:03 +0000 (14:25 -0700)]
FP: Factor out symfpu traits. (#6246)

This is in preparation for a MPFR floating-point literal implementation.
We will need to have both literal kinds return a symFPU unpacked float
via `getSymUF()` in order to be able to plug it into the fp_converter.
For this, it makes sense to have the traits implemented and to be
included separately, so that they can also be included in the MPFR
implementation.

3 years agoFix type rule for to_real (#6257)
Andrew Reynolds [Thu, 1 Apr 2021 20:44:34 +0000 (15:44 -0500)]
Fix type rule for to_real (#6257)

This fixes the type rule for to_real to match SMT-LIB: its argument must be an integer.

This required fixing the TPTP parser which has a more relaxed semantics for to_real / to_rat.

This also fixes Solver::isReal, which should return false if we are the integer type.

Fixes #6208.

3 years agoAdd regression for issue 6191 (#6264)
Andrew Reynolds [Thu, 1 Apr 2021 20:34:46 +0000 (15:34 -0500)]
Add regression for issue 6191 (#6264)

3 years agoDelete hashsmt example. (#6263)
Aina Niemetz [Thu, 1 Apr 2021 19:30:31 +0000 (12:30 -0700)]
Delete hashsmt example. (#6263)

This example does not serve the purpose of documenting how to use the
new API. It uses Command, which is not available via the API, and it's
not worth the effort to migrate it.

3 years agoRefactor CLN dependency & Cleanup (#6251)
Gereon Kremer [Thu, 1 Apr 2021 18:20:53 +0000 (20:20 +0200)]
Refactor CLN dependency & Cleanup (#6251)

This PR migrates CLN to a new Find script and adds the possibility to install CLN if not found in the system.
Also, it does a bit of cleanup.

3 years agoRename namespace CVC5 to cvc5. (#6258)
Aina Niemetz [Thu, 1 Apr 2021 16:56:14 +0000 (09:56 -0700)]
Rename namespace CVC5 to cvc5. (#6258)

3 years agokinds: Remove non-existent properties. (#6253)
Aina Niemetz [Thu, 1 Apr 2021 16:18:27 +0000 (09:18 -0700)]
kinds: Remove non-existent properties. (#6253)

3 years ago Add debug traces to theory inference manager (#6250)
Andrew Reynolds [Thu, 1 Apr 2021 15:14:11 +0000 (10:14 -0500)]
 Add debug traces to theory inference manager (#6250)

3 years agoFix non-linear for unknown case (#6252)
Andrew Reynolds [Thu, 1 Apr 2021 14:53:46 +0000 (09:53 -0500)]
Fix non-linear for unknown case (#6252)

As a result of this issue, currently we are incorrectly trying to repair a model when one is not guaranteed to exist, leading to a spurious assertion failure.

Fixes #6228. The benchmarks on that issue now answer "unknown" without an assertion failure.

3 years agoMake ResetCommand go through APISolver (#6172)
Gereon Kremer [Thu, 1 Apr 2021 11:35:20 +0000 (13:35 +0200)]
Make ResetCommand go through APISolver (#6172)

This PR changes ResetCommand to not call SmtEngine::reset but instead reconstruct the api::Solver object. This makes SmtEngine::reset obsolete and removes it, and moves the original options from SmtEngine to api::Solver.
The motivation for this change is twofold:

The ResetCommand should not use SmtEngine directly, but only through the API (i.e. Solver).
As soon as the statistics data lives within the registry, we need to re-register statistics after resetting the SmtEngine. We can now do this within the api::Solver constructor.

3 years agoRename namespace CVC4 to CVC5. (#6249)
Aina Niemetz [Wed, 31 Mar 2021 22:23:17 +0000 (15:23 -0700)]
Rename namespace CVC4 to CVC5. (#6249)

3 years agoRefactor GMP and Poly dependencies (#6245)
Gereon Kremer [Wed, 31 Mar 2021 21:17:38 +0000 (23:17 +0200)]
Refactor GMP and Poly dependencies (#6245)

Refactors GMP and libpoly to also use external projects and be available within cmake as proper targets.

3 years agoRefactor dependencies for external SAT solvers (#6215)
Gereon Kremer [Wed, 31 Mar 2021 20:00:54 +0000 (22:00 +0200)]
Refactor dependencies for external SAT solvers (#6215)

This PR refactors how we obtain, build and use the external SAT solvers used by CVC4: CaDiCaL, CryptoMiniSat and Kissat.
All three contrib scripts are removed and instead an external project is integrated into the cmake find scripts.

3 years agoRefactor SymFPU dependency (#6218)
Gereon Kremer [Wed, 31 Mar 2021 19:16:05 +0000 (21:16 +0200)]
Refactor SymFPU dependency (#6218)

This PR refactors the contrib script to download SymFPU to a cmake external project.

3 years agoBags: Move implementation of type rules from header to .cpp file. (#6247)
Aina Niemetz [Wed, 31 Mar 2021 19:04:42 +0000 (12:04 -0700)]
Bags: Move implementation of type rules from header to .cpp file. (#6247)

3 years agoFix years in COPYING. (#6248)
Aina Niemetz [Wed, 31 Mar 2021 18:50:34 +0000 (11:50 -0700)]
Fix years in COPYING. (#6248)

3 years agoEliminate dependencies on quantifiers engine in internal quantifiers code (#6240)
Andrew Reynolds [Wed, 31 Mar 2021 17:35:52 +0000 (12:35 -0500)]
Eliminate dependencies on quantifiers engine in internal quantifiers code (#6240)

This completes eliminating dependencies on quantifiers engine from internal quantifiers code. It eliminates quantifiers_engine.h as an include from src/theory/quantifiers/ apart from theory_quantifiers.cpp where it is owned.

Followup PRs will further eliminate circular dependencies that arose will refactoring quantifiers engine.

3 years agoAdd missing inference ids (#6242)
Andrew Reynolds [Wed, 31 Mar 2021 09:21:12 +0000 (04:21 -0500)]
Add missing inference ids (#6242)

Towards having complete stats on inference ids for each lemma, fact, and conflict.

3 years agoFP: Move implementation of type rules from header to .cpp file. (#6241)
Aina Niemetz [Wed, 31 Mar 2021 00:27:13 +0000 (17:27 -0700)]
FP: Move implementation of type rules from header to .cpp file. (#6241)

3 years agoFix compilation of Python bindings for named build directories (#6244)
yoni206 [Wed, 31 Mar 2021 00:11:10 +0000 (17:11 -0700)]
Fix compilation of Python bindings for named build directories (#6244)

In current master, the following fails whenever <name> contains a /:

./configure.sh --python-bindings --name=<name>

The reason is that src/api/python/genkinds.py adds a directory to the python path while relying on the fact that the build directory is located directly under the main repo directory, which is not the case if <name> contains a /.
This PR fixes this by having cmake determine the right directory to add to the python path.

3 years agoFix printing for double patterns (#6235)
Andrew Reynolds [Tue, 30 Mar 2021 20:02:37 +0000 (15:02 -0500)]
Fix printing for double patterns (#6235)

3 years agoMake SEXPR simply typed (#6160)
Andrew Reynolds [Tue, 30 Mar 2021 15:52:11 +0000 (10:52 -0500)]
Make SEXPR simply typed (#6160)

Currently, SEXPR applications are given a parametric type SEXPR_TYPE applied to the types of its arguments. This means that SEXPR that are type checked consume roughly double the memory. This issue arises in practice when printing proofs in the internal calculus.

There is no need to have SEXPR_TYPE as a parametric type, this PR makes SEXPR simply typed.

Also moves some implementation of TypeNode methods to type_node.cpp.

3 years agoImplement simple tracking of instantiation lemmas (#6077)
Andrew Reynolds [Tue, 30 Mar 2021 15:05:29 +0000 (10:05 -0500)]
Implement simple tracking of instantiation lemmas (#6077)

We require tracking of instantiation lemmas for quantifier elimination. Recently, this feature was removed in favor of reconstructing instantiations via substitutions. This does not quite work if instantiation lemmas have more complex post-processing, e.g. virtual term substitution.

This PR reimplements a much simpler form of instantiation tracking that simply adds instantiation bodies to a vector, per quantified formula. It uses this vector for quantifier elimination.

Fixes #5899.

3 years agoRefactoring quantifier annotation kinds, add kinds in preparation for pool-based...
Andrew Reynolds [Tue, 30 Mar 2021 14:28:55 +0000 (09:28 -0500)]
Refactoring quantifier annotation kinds, add kinds in preparation for pool-based instantiation (#6234)

This is in preparation for a new pool-based instantiation technique.

3 years agoEliminate use of rational from tptp parser (#6239)
Andrew Reynolds [Tue, 30 Mar 2021 13:52:56 +0000 (08:52 -0500)]
Eliminate use of rational from tptp parser (#6239)

3 years agoGive a better error when sygus grammar rules contain free variables. (#6199)
Abdalrhman Mohamed [Tue, 30 Mar 2021 13:33:33 +0000 (06:33 -0700)]
Give a better error when sygus grammar rules contain free variables. (#6199)