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

3 years agoFix total time statistic (#6233)
Gereon Kremer [Tue, 30 Mar 2021 01:06:14 +0000 (03:06 +0200)]
Fix total time statistic (#6233)

Since one of the last changes to the total time collection in the driver, this collection fails when the solver terminates unexpectedly (either by a signal or an exception). This PR fixes this issue and does some cleanup along the way.

3 years agoMiscellaneous elimination of dependencies on quantifiers engine (#6238)
Andrew Reynolds [Tue, 30 Mar 2021 00:52:48 +0000 (19:52 -0500)]
Miscellaneous elimination of dependencies on quantifiers engine  (#6238)

This should be the last PR before quantifiers engine will not be passed to quantifiers modules.

3 years agoAdd external project to install gtest (#6229)
Gereon Kremer [Mon, 29 Mar 2021 22:24:46 +0000 (00:24 +0200)]
Add external project to install gtest (#6229)

This PR enables us to build gtest ourselves if it is not already installed.

3 years agoEliminate the use of quantifiers engine in sygus solver (#6232)
Andrew Reynolds [Mon, 29 Mar 2021 19:40:53 +0000 (14:40 -0500)]
Eliminate the use of quantifiers engine in sygus solver (#6232)

3 years agoFix configuration printing. (#6236)
Aina Niemetz [Mon, 29 Mar 2021 18:49:53 +0000 (11:49 -0700)]
Fix configuration printing. (#6236)

3 years agoEliminate use of quantifiers engine in enumerative instantiation (#6217)
Andrew Reynolds [Mon, 29 Mar 2021 15:00:33 +0000 (10:00 -0500)]
Eliminate use of quantifiers engine in enumerative instantiation (#6217)

This also makes minor updates to how term tuple enumerators are constructed.

3 years agoMove decision manager into theory inference manager (#6231)
Andrew Reynolds [Mon, 29 Mar 2021 14:31:20 +0000 (09:31 -0500)]
Move decision manager into theory inference manager (#6231)

This makes it so that the decision manager is accessible from TheoryInferenceManager.

This is work towards breaking circular dependencies in quantifiers, and also helps simplify several other dependencies in e.g. UF and datatypes.

3 years agoModular bv2int part 1 (#6212)
yoni206 [Mon, 29 Mar 2021 13:38:19 +0000 (06:38 -0700)]
Modular bv2int part 1 (#6212)

This PR introduces the header file for a more modular bv-to-int module, that will be called from the preprocessing pass bv-to-int, and possibly from the bit-vector solver after preprocessing.

The header file is basically a copy of the bv_to_int.h header file from preprocessing, with some adjustments to increase modularity.

In addition to the header file we also introduce an empty unit test that #includes the header, in order to identify compilation errors. The unit test will be populated in subsequent PRs, that will also include implementations.

3 years agoFloatingPointLiteral: Constructor for special consts. (#6220)
Aina Niemetz [Mon, 29 Mar 2021 09:11:19 +0000 (02:11 -0700)]
FloatingPointLiteral: Constructor for special consts. (#6220)

This replaces static helpers for creating special consts with
constructors. This is in preparation for a FP literal implementation
using MPFR. In the next step, I'll introduce a FloatingPointLiteral base
class, from which the specialization FloatingPointSymFPULiteral is
derived. The MPFR implementation will also be derived from the base class.
This is in order to make unit tests that compare between the two
possible. Further, in the worst case, MPFR will have to use SymFPU for
unsupported cases (to be determined).

3 years agoWhen building ANTLR via CMake, do not require javac #6224 (#6225)
Andrew V. Jones [Sat, 27 Mar 2021 19:12:28 +0000 (19:12 +0000)]
When building ANTLR via CMake, do not require javac #6224 (#6225)

As title; attempts to correct #6224.

Signed-off-by: Andrew V. Jones andrewvaughanj@gmail.com
3 years agoRefactor ANTLR3 dependency (#6202)
Gereon Kremer [Sat, 27 Mar 2021 09:41:49 +0000 (10:41 +0100)]
Refactor ANTLR3 dependency (#6202)

This PR refactors our first, and arguably most fragile, dependency.
Right now all dependencies need to be manually installed (by calling the appropriate contrib/get-X script). For optional dependencies, we additionally need to enable them when calling the configure script (or via ccmake).
This PR is the first step in refactoring all dependencies to be automatically build (if required) as an external project.

Note that this not only eliminates the need to call contrib scripts, but also simplifies cross compilation: as all dependencies are now built within the build folders, every build folder has its own copy which may use different toolchains.

3 years agoUse color output to print configuration. (#6219)
Aina Niemetz [Sat, 27 Mar 2021 01:07:27 +0000 (18:07 -0700)]
Use color output to print configuration. (#6219)

3 years agoFloatingPointLiteral: Make constructors that shouldn't be used outside of FloatingPoi...
Aina Niemetz [Fri, 26 Mar 2021 18:32:38 +0000 (11:32 -0700)]
FloatingPointLiteral: Make constructors that shouldn't be used outside of FloatingPoint(Literal) private. (#6211)

3 years agoPass term registry to quantifiers modules (#6216)
Andrew Reynolds [Fri, 26 Mar 2021 16:47:22 +0000 (11:47 -0500)]
Pass term registry to quantifiers modules (#6216)

3 years agoEnsure nonlinear extensions properly reconsiders its model (#6204)
Gereon Kremer [Thu, 25 Mar 2021 20:40:58 +0000 (21:40 +0100)]
Ensure nonlinear extensions properly reconsiders its model (#6204)

In certain cases, the nonlinear extension would not re-check properly but only repeat an (already failed) model repair. The result lemma would then already be in cache and thus not be sent to the solver.
This PR ensures that modelBasedRefinement is always run and entirely removes the d_builtModel flag that was responsible for this behavior. Additionally, it asserts that the lemma that (tries to) force the model to be reconciled during theory combination is actually sent.
Fixes #6192.

3 years agoFP: Refactor FloatingPointLiteral in preparation for MPFR. (#6206)
Aina Niemetz [Thu, 25 Mar 2021 19:18:51 +0000 (12:18 -0700)]
FP: Refactor FloatingPointLiteral in preparation for MPFR. (#6206)

This pushes all symfpu specific parts from FloatingPoint into
FloatingPointLiteral. FloatingPoint is now generic. An additional
FloatingPointLiteral implementation using MPFR will be made configurable
similiarly to how we handle Integers with either GMP or CLN backend.

3 years agoRefactor construction of triggers (#6209)
Andrew Reynolds [Thu, 25 Mar 2021 18:17:30 +0000 (13:17 -0500)]
Refactor construction of triggers (#6209)

This PR centralizes our utilities for generating triggers. It also splits the statistics class from quantifiers off from quantifiers engine.

3 years agoDo not use Configuration class in API black tests. (#6205)
Mathias Preiner [Thu, 25 Mar 2021 18:04:54 +0000 (11:04 -0700)]
Do not use Configuration class in API black tests. (#6205)

3 years agoAdd missing includes. (#6207)
Gereon Kremer [Thu, 25 Mar 2021 17:34:39 +0000 (18:34 +0100)]
Add missing includes. (#6207)

This PR adds includes that are missing from source files, but currently provided by other includes.
This mostly concerns <sstream> which is currently included by the statistics, which will change in the future.

3 years agoDeleting old LFSC signatures (#6194)
Haniel Barbosa [Thu, 25 Mar 2021 04:26:17 +0000 (01:26 -0300)]
Deleting old LFSC signatures (#6194)

3 years agoUse inference manager to access intantiate utility instead of quantifiers engine...
Andrew Reynolds [Wed, 24 Mar 2021 22:44:52 +0000 (17:44 -0500)]
Use inference manager to access intantiate utility instead of quantifiers engine (#6198)

Towards breaking dependencies on quantifers engine.

3 years agoOnly consider relevant terms for integer branches (#6181)
Gereon Kremer [Wed, 24 Mar 2021 15:24:25 +0000 (16:24 +0100)]
Only consider relevant terms for integer branches (#6181)

Linear arithmetic simply tried to branch on the first integer variable that had a non-integral assignment.
If it holds stale variables that are not part of the current input, these branches can be emitted and are processed by the solver, but the resulting new assertions will not be considered relevant and thus not added to the theory.
As it still triggers a new theory check, linear arithmetic repeats the same procedure and causes an infinite loop.
This PR explicitly tracks the currently relevant nodes by storing all preregistered nodes and only allows branching on variables from this set.
Fixes #6146.

3 years agoRefactor our integration of LFSC (#6201)
Gereon Kremer [Wed, 24 Mar 2021 15:07:15 +0000 (16:07 +0100)]
Refactor our integration of LFSC (#6201)

This PR further decouples LFSC from the remaining build system, but makes it more convenient to use at the same time.
The contrib/get-lfsc-checker script is now completely standalone and installs LFSC and the necessary signatures to deps/, as well as wrapper scripts to conveniently run lfscc from there and directly check cvc4 proofs.
The goal would be to automatically use LFSC in our regressions as well.

3 years agoRemove unused code for axioms (#6197)
Andrew Reynolds [Tue, 23 Mar 2021 22:44:28 +0000 (17:44 -0500)]
Remove unused code for axioms (#6197)

This is leftover from a previous way of eliminating extended operators

3 years agoRemoving unused build options and deprecated proof compile flag (#6195)
Haniel Barbosa [Tue, 23 Mar 2021 22:27:39 +0000 (19:27 -0300)]
Removing unused build options and deprecated proof compile flag (#6195)

3 years agoPassing term registry to ematching utilities (#6190)
Andrew Reynolds [Tue, 23 Mar 2021 20:41:13 +0000 (15:41 -0500)]
Passing term registry to ematching utilities (#6190)

Model is now nested into term registry.

This PR also resolves some complications due to namespaces within quantifiers.

3 years agoRemove internal includes of Api header. (#6193)
Aina Niemetz [Tue, 23 Mar 2021 18:51:01 +0000 (11:51 -0700)]
Remove internal includes of Api header. (#6193)

3 years agoReplace old sygus term reconstruction algorithm with a new one. (#5779)
Abdalrhman Mohamed [Tue, 23 Mar 2021 14:44:39 +0000 (09:44 -0500)]
Replace old sygus term reconstruction algorithm with a new one. (#5779)

This PR replaces the old algorithm for reconstructing sygus terms with a new "proper" implementation.

3 years agoMoving instantiate and skolemize into quantifiers inference manager (#6188)
Andrew Reynolds [Tue, 23 Mar 2021 01:32:32 +0000 (20:32 -0500)]
Moving instantiate and skolemize into quantifiers inference manager (#6188)

After this PR, utilities for instantiation are available from the quantifiers inference manager instead of quantifiers engine. This means that the majority of the dependencies on quantifiers engine will (finally) start being cleaned up after this PR.

3 years agoMove statistics from the driver into the SmtEngine (#6170)
Gereon Kremer [Mon, 22 Mar 2021 21:09:55 +0000 (22:09 +0100)]
Move statistics from the driver into the SmtEngine (#6170)

This PR does some refactoring on how we handle statistics in the driver, and some minor cleanup along the way.

    The SmtEngine now has dedicated statistics for the data collected within the driver and provides utility functions to set them.
    The driver pushes the collected statistics to the SmtEngine instead of adding them itself to the statistics registry.
    The node manager no longer holds a statistics registry (that nobody used anymore anyway)
    The command executor no longer holds a pointer to the SmtEngine itself. The pointer is not necessary and seems to become stale after we call reset on the command executor (which, luckily, we don't seem to do usually)

The main motivation for this change is to make the whole statistics infrastructure private to the library and not exporting it to the outside world.

3 years agoMove equality query utility into quantifiers model (#6186)
Andrew Reynolds [Mon, 22 Mar 2021 18:42:46 +0000 (13:42 -0500)]
Move equality query utility into quantifiers model (#6186)

This simplifies the initialization of quantifiers engine.

This PR also makes general improvements to EqualityQuery.

3 years ago Function types are always first-class (#6167)
Andrew Reynolds [Mon, 22 Mar 2021 17:45:19 +0000 (12:45 -0500)]
 Function types are always first-class (#6167)

This eliminates one of the dependencies of TypeNode on options. In particular, this makes it so that function types are always considered first-class.

This change makes it so that higher-order types can always be constructed; logic exceptions should occur if they are used in constraints.

3 years agoAdd skolem definition manager (#6187)
Andrew Reynolds [Mon, 22 Mar 2021 17:30:21 +0000 (12:30 -0500)]
Add skolem definition manager (#6187)

This creates a central utility for managing "skolem definitions", e.g. mapping between skolems and the lemmas that define their behavior.

This utility is taken from the satRlv branch. It will also be used for the new implementation of the justification decision heuristic.

Note that this PR takes some helper functions out of term formula removal (e.g. hasSkolems) Prior to this PR, these helper functions were incorrect since term formula removal does not account for all introduced skolems. For instance, Theory::ppRewrite may introduce skolems directly. This PR consolidates these cases into the new class, which is called from PropEngine when lemmas and assertions are added. At the moment, the only use of this method is for CEGQI, which needs to do its own tracking of skolems in certain literals.

It also makes some minor reorganization to prop engine.

3 years agoFP: Add documentation for FloatingPointLiteral constructors. (#6183)
Aina Niemetz [Mon, 22 Mar 2021 15:07:02 +0000 (08:07 -0700)]
FP: Add documentation for FloatingPointLiteral constructors. (#6183)

3 years agoGuard for non-unique skolems in term formula removal (#6179)
Andrew Reynolds [Mon, 22 Mar 2021 14:51:05 +0000 (09:51 -0500)]
Guard for non-unique skolems in term formula removal (#6179)

In rare cases, we may reuse skolems for different terms (those that are the same up to purification) due to recent changes in how skolem are generated. This guards for this case in the term formula remover, which avoids assertion failures in cd insert hash map.

Fixes #6132.

3 years agoSimplify strings term registration (#6174)
Andrew Reynolds [Sun, 21 Mar 2021 14:01:04 +0000 (09:01 -0500)]
Simplify strings term registration (#6174)

String terms may enter into the equality engine without appearing in assertions, due to eager context-dependent simplification internal to the equality engine (--strings-eager-eval). In rare cases, we did not catch when a new string constant appeared in the equality engine, meaning it would not be marked as relevant leading to bogus models in incremental mode.

This makes it so that proxy variables are stored in a user-context dependent manner, which impacts when terms marked as having a proxy variable are registered.

The PR also simplifies our policies for when string terms are registered slightly.

Fixes #6072.

3 years agoClean up remaining raw uses of output channel (#6161)
Andrew Reynolds [Sun, 21 Mar 2021 13:12:11 +0000 (08:12 -0500)]
Clean up remaining raw uses of output channel (#6161)

After this PR, with only a few exceptions, all calls to output channel for lemmas, conflicts are made through inference manager.

This is work towards standardizing the statistics for theories.

3 years agoImproved tracing for equivalence classes of EE (#6169)
Andrew Reynolds [Sat, 20 Mar 2021 11:42:51 +0000 (06:42 -0500)]
Improved tracing for equivalence classes of EE (#6169)

Helps debugging model issues.

3 years agoGenerate cvc/Kind.java for the java API (#6143)
mudathirmahgoub [Sat, 20 Mar 2021 10:23:44 +0000 (05:23 -0500)]
Generate cvc/Kind.java for the java API (#6143)

PR changes:

Refactor python/genkinds.py by separating parsing from file generation.
Add java/genkinds.py to generate file Kind.java.
Enable java API in ./configure.sh with "under development" warning.

3 years agoRefactor initialization of quantifiers model and builder (#6175)
Andrew Reynolds [Fri, 19 Mar 2021 18:05:47 +0000 (13:05 -0500)]
Refactor initialization of quantifiers model and builder (#6175)

This is in preparation for breaking several circular dependencies and moving
the instantiate utility into the theory inference manager.

3 years agoBitVector: Change setBit to set the bit in place. (#6176)
Aina Niemetz [Fri, 19 Mar 2021 17:28:14 +0000 (10:28 -0700)]
BitVector: Change setBit to set the bit in place. (#6176)

Creating BitVectors (and deleting them) is in general expensive because
of the underlying multi-precision Integer. If possible, unnecessary
constructions and desctructions of BitVectors should be avoided.
The most common use case for `setBit` is that for an existing BitVector,
a given bit should be set to a certain value. Not doing this in place
generates unnecessary constructions and destructions of BitVectors.

3 years agoFP: Use setBit instead of bv or in conversion from Real. (#6177)
Aina Niemetz [Fri, 19 Mar 2021 17:16:56 +0000 (10:16 -0700)]
FP: Use setBit instead of bv or in conversion from Real. (#6177)

This is a minor optimization that goes into effect as soon as #6176 goes
in.

3 years agoWhen giving an SMT-LIB version, defaulting to SMT-LIB 2.6 (#6171)
Haniel Barbosa [Thu, 18 Mar 2021 21:57:11 +0000 (18:57 -0300)]
When giving an SMT-LIB version, defaulting to SMT-LIB 2.6 (#6171)

Warning if not a supported version.

3 years agoMove stats registry to env. (#6173)
Gereon Kremer [Thu, 18 Mar 2021 21:27:35 +0000 (22:27 +0100)]
Move stats registry to env. (#6173)

This PR moves the statistics registry from SmtEngine to Env.

3 years agoEliminate dependency on quantifiers engine in quantifiers model (#6165)
Andrew Reynolds [Thu, 18 Mar 2021 19:51:38 +0000 (14:51 -0500)]
Eliminate dependency on quantifiers engine in quantifiers model (#6165)

3 years agoEliminate more uses of SExpr. (#6149)
Abdalrhman Mohamed [Thu, 18 Mar 2021 18:33:47 +0000 (13:33 -0500)]
Eliminate more uses of SExpr. (#6149)

This PR eliminates all remaining uses of SExpr outside of statistics.

3 years agoNew C++ Api: Comprehensive guards for member functions of class Solver. (#6153)
Aina Niemetz [Thu, 18 Mar 2021 00:28:59 +0000 (17:28 -0700)]
New C++ Api: Comprehensive guards for member functions of class Solver. (#6153)

3 years ago(proof-new) Fixes to set defaults (#6163)
Andrew Reynolds [Wed, 17 Mar 2021 20:45:26 +0000 (15:45 -0500)]
(proof-new) Fixes to set defaults (#6163)

This copies most of the remaining changes to set_defaults.cpp from proof-new.

In particular, it recognizes when proofs must be disabled.

This is required to fix the regressions (locally) and the nightlies.

3 years agoMove utilities for inferred bounds on quantifers to own class (#6159)
Andrew Reynolds [Wed, 17 Mar 2021 18:43:39 +0000 (13:43 -0500)]
Move utilities for inferred bounds on quantifers to own class (#6159)

This also moves some methods from TermEnumeration to QuantifiersBoundInference.

This is required for breaking several cyclic dependencies within quantifiers.

3 years agoNew C++ Api: Comprehensive guards for member functions of class Term. (#6150)
Aina Niemetz [Wed, 17 Mar 2021 18:19:35 +0000 (11:19 -0700)]
New C++ Api: Comprehensive guards for member functions of class Term. (#6150)

3 years agoRename test/unit/expr to test/unit/node. (#6156)
Aina Niemetz [Wed, 17 Mar 2021 18:07:48 +0000 (11:07 -0700)]
Rename test/unit/expr to test/unit/node. (#6156)

This is in preparation for renaming src/expr to src/node.

3 years agoRename fixtures in test/unit/context to conform to naming scheme. (#6158)
Aina Niemetz [Wed, 17 Mar 2021 17:47:39 +0000 (10:47 -0700)]
Rename fixtures in test/unit/context to conform to naming scheme. (#6158)

Naming scheme is `Test<directory><Black|White><name>`.

3 years agoRename fixtures in test/unit/base to conform to naming scheme. (#6157)
Aina Niemetz [Wed, 17 Mar 2021 08:40:21 +0000 (01:40 -0700)]
Rename fixtures in test/unit/base to conform to naming scheme. (#6157)

Naming scheme is `Test<directory><Black|White><name>`.