cvc5.git
3 years agoRefactor initial phase of transcendental solver (#5599)
Gereon Kremer [Mon, 7 Dec 2020 19:59:10 +0000 (20:59 +0100)]
Refactor initial phase of transcendental solver (#5599)

This PR refactors the initialization of the transcendental solver, decoupling the setup of generic caches from initial lemmas for exponential and sine functions.

3 years agoDo not expand theory definitions at the beginning of preprocessing (#5544)
Andrew Reynolds [Mon, 7 Dec 2020 15:51:32 +0000 (09:51 -0600)]
Do not expand theory definitions at the beginning of preprocessing (#5544)

This updates the preprocessor so that expand definitions does not expand theory symbols at the beginning of preprocessing.

This also restores the previous expandDefinitions method in arithmetic, which is required for correctly interpreting division by zero in models, but should not be applied at the beginning of preprocessing. Moreover it ensures that only partial operators are eliminated in arithmetic expandDefinitions, which required an additional argument partialOnly to arith::OperatorElim.

This adds -q to suppress warnings for many quantified regressions which now emit warnings with --check-model. This will be addressed later as part of CVC4/cvc4-wishues#43.

The purpose of this PR is two-fold:
(1) Currently our responses to get-value are incorrect for partial operators like div, mod, seq.nth since partial operators can be left unevaluated.
(2) The preprocessor should have the opportunity to rewrite and eliminate extended operators before they are expanded. This is required for addressing performance issues for non-linear arithmetic. It is also required for ensuring that trigger selection can be done properly for datatype selectors (to be addressed on a later PR).

3 years ago (proof-new) Split proof ensure closed checks to own file (#5522)
Andrew Reynolds [Mon, 7 Dec 2020 13:55:30 +0000 (07:55 -0600)]
 (proof-new) Split proof ensure closed checks to own file (#5522)

Split proof ensure closed checks to own file

3 years agoAdd regression from #4927 (#5556)
Gereon Kremer [Mon, 7 Dec 2020 13:25:08 +0000 (14:25 +0100)]
Add regression from #4927 (#5556)

The error from #4927 has been fixed in the meantime, this PR adds the example as regression.
Closes #4927.

3 years agoFix bugs in getFreeVariables (#5601)
Andrew Reynolds [Mon, 7 Dec 2020 11:26:13 +0000 (05:26 -0600)]
Fix bugs in getFreeVariables (#5601)

Did not consider scopes properly, which would fail to say that formulas with escaped variables (both bound and unbound) in formula had free variables.

3 years agoChange generated options to be thread_local. (#5583)
Everett Maus [Sat, 5 Dec 2020 01:09:54 +0000 (17:09 -0800)]
Change generated options to be thread_local. (#5583)

Signed-off-by: Everett Maus <evmaus@google.com>
3 years agogoogle test: expr: Migrate attribute_black. (#5598)
Aina Niemetz [Fri, 4 Dec 2020 20:47:30 +0000 (12:47 -0800)]
google test: expr: Migrate attribute_black. (#5598)

3 years agogoogle test: context: Migrate cdo_black. (#5586)
Aina Niemetz [Fri, 4 Dec 2020 20:07:51 +0000 (12:07 -0800)]
google test: context: Migrate cdo_black. (#5586)

3 years agogoogle test: context: Migrate cdmap_white. (#5585)
Aina Niemetz [Fri, 4 Dec 2020 18:54:46 +0000 (10:54 -0800)]
google test: context: Migrate cdmap_white. (#5585)

3 years agoFix bug in hasBoundVar (#5600)
Andrew Reynolds [Fri, 4 Dec 2020 18:26:12 +0000 (12:26 -0600)]
Fix bug in hasBoundVar (#5600)

Led to issues while debugging another issue related to free variables in assumptions.

3 years agogoogle test: api: Migrate sort_black. (#5594)
Aina Niemetz [Fri, 4 Dec 2020 16:54:32 +0000 (08:54 -0800)]
google test: api: Migrate sort_black. (#5594)

3 years agogoogle test: context: Migrate cdmap_black. (#5584)
Aina Niemetz [Fri, 4 Dec 2020 16:16:37 +0000 (08:16 -0800)]
google test: context: Migrate cdmap_black. (#5584)

3 years agogoogle test: context: Migrate cdlist_black. (#5582)
Aina Niemetz [Fri, 4 Dec 2020 15:07:22 +0000 (07:07 -0800)]
google test: context: Migrate cdlist_black. (#5582)

3 years agoUse NodeDfsIterable for makeBinary (#5595)
Alex Ozdemir [Fri, 4 Dec 2020 07:42:34 +0000 (23:42 -0800)]
Use NodeDfsIterable for makeBinary (#5595)

Replaces the manual dag traversal in BVToInt::makeBinarywith NodeDfsIterable.

This is a subset of the changes in #4176, updated to apply to master.

3 years agoupdate-copyright: Preserve file permissions. (#5597)
Mathias Preiner [Fri, 4 Dec 2020 06:32:17 +0000 (22:32 -0800)]
update-copyright: Preserve file permissions. (#5597)

When updating the copyright headers file permissions were not preserved. In some cases this results in losing the permission to execute scripts. This commit makes sure to preserve the file permissions for updated files.

3 years ago(proof-new) Updates to SMT proof manager and SmtEngine (#5446)
Andrew Reynolds [Thu, 3 Dec 2020 22:14:59 +0000 (16:14 -0600)]
(proof-new) Updates to SMT proof manager and SmtEngine (#5446)

This PR adds infrastructure in SmtEngine and ProofManager for checking and printing proofs. It updates a previous interface that used ProofGenerator in favor of ProofNode.

This makes it so that it only remains to make PropEngine to be proof producing.

3 years agogoogle test: api: Migrate solver_black. (#5570)
Aina Niemetz [Thu, 3 Dec 2020 21:29:48 +0000 (13:29 -0800)]
google test: api: Migrate solver_black. (#5570)

3 years agoUse mkAnd where the number of children may be less than two. (#5551)
Gereon Kremer [Thu, 3 Dec 2020 20:55:16 +0000 (21:55 +0100)]
Use mkAnd where the number of children may be less than two. (#5551)

An AND was constructed from a vector that may only hold a single or no element.
This PR uses mkAnd instead.
Fixes #5550 .

3 years agoModels as (#5581)
yoni206 [Thu, 3 Dec 2020 20:18:10 +0000 (12:18 -0800)]
Models as (#5581)

This PR relates to #4987 .
Our plan is to:

delete the model keyword (done in #5415 )
avoid printing extra declarations by default (done in #5432 )
wrap UF values with as expressions.
This PR does step 3, fixes a regression accordingly, and adds the formula from #4987 and a variant of it to the regressions.

3 years agogoogle test: Add fixture for context tests. (#5590)
Aina Niemetz [Thu, 3 Dec 2020 19:29:58 +0000 (11:29 -0800)]
google test: Add fixture for context tests. (#5590)

Context test PRs will be updated to use this after this is merged to
master.

3 years agoRefactor handling of global declarations (#5577)
Andrew Reynolds [Thu, 3 Dec 2020 16:49:08 +0000 (10:49 -0600)]
Refactor handling of global declarations (#5577)

This refactors how global declarations are handled in the parser. In particular, we do not push/pop user contexts in the symbol table and manager when global declarations are true, which is an equivalent behavior to declaring symbols globally.

This further refactors to not use ExprManager flags, thus breaking most of the dependencies on the old API.

This is work towards fixing global declarations in the smt2 parser. The parser still does not behave correctly for overloaded symbols + global declarations (e.g. see #4767), which require further refactoring.

This is also work towards migrating the parser not to depend on the old API. There are a few miscellaneous things to change after this PR, but we are very close to breaking this dependency now.

3 years agoMake run_regression.py executable. (#5588)
Gereon Kremer [Thu, 3 Dec 2020 15:58:48 +0000 (16:58 +0100)]
Make run_regression.py executable. (#5588)

3 years agoUpdate copyright headers.
Aina Niemetz [Thu, 3 Dec 2020 03:55:00 +0000 (19:55 -0800)]
Update copyright headers.

3 years agogoogle test: base: Migrate map_util_black. (#5580)
Aina Niemetz [Thu, 3 Dec 2020 00:37:26 +0000 (16:37 -0800)]
google test: base: Migrate map_util_black. (#5580)

3 years agoFix RoundingMode mapping in API. (#5578)
Aina Niemetz [Wed, 2 Dec 2020 23:34:13 +0000 (15:34 -0800)]
Fix RoundingMode mapping in API. (#5578)

Fixes #5524.

3 years agoRemove Record object and convert to Node-level API (#5575)
Andrew Reynolds [Wed, 2 Dec 2020 22:59:11 +0000 (16:59 -0600)]
Remove Record object and convert to Node-level API (#5575)

Required for detangling NodeManager from the Expr layer.

3 years agoRename macro Message to CVC4Message. (#5576)
Aina Niemetz [Wed, 2 Dec 2020 22:24:52 +0000 (14:24 -0800)]
Rename macro Message to CVC4Message. (#5576)

3 years agoRemove dagification visitor (#5574)
Andrew Reynolds [Wed, 2 Dec 2020 22:09:28 +0000 (16:09 -0600)]
Remove dagification visitor (#5574)

This has fully been replaced by the new let binding.

3 years agogoogle test: api: Migrate term_black. (#5571)
Aina Niemetz [Wed, 2 Dec 2020 21:55:19 +0000 (13:55 -0800)]
google test: api: Migrate term_black. (#5571)

3 years agogoogle test: api: Use individual fixture for datatype_black. (#5568)
Aina Niemetz [Wed, 2 Dec 2020 20:51:06 +0000 (12:51 -0800)]
google test: api: Use individual fixture for datatype_black. (#5568)

This is to prevent name clashes with other tests.

3 years agoAdd associative utilities to node manager (#5530)
Andrew Reynolds [Wed, 2 Dec 2020 19:03:54 +0000 (13:03 -0600)]
Add associative utilities to node manager (#5530)

Required for updating the new API to use Node utilites as backend.

These utilities are copied directly from ExprManager and converted Expr -> Node.

3 years agogoogle test: api: Migrate op_black. (#5567)
Aina Niemetz [Wed, 2 Dec 2020 18:13:54 +0000 (10:13 -0800)]
google test: api: Migrate op_black. (#5567)

3 years agogoogle test: api: Migrate grammar_black. (#5566)
Aina Niemetz [Wed, 2 Dec 2020 17:13:34 +0000 (09:13 -0800)]
google test: api: Migrate grammar_black. (#5566)

3 years agoUse new let binding for cvc printer (#5561)
Andrew Reynolds [Wed, 2 Dec 2020 16:17:09 +0000 (10:17 -0600)]
Use new let binding for cvc printer (#5561)

Also changes names slightly to avoid accidental uses of toStream, which can lead to infinite loops if the wrong version is used.

3 years ago(proof-new) Proofs for expand definitions (#5562)
Andrew Reynolds [Wed, 2 Dec 2020 15:41:31 +0000 (09:41 -0600)]
(proof-new) Proofs for expand definitions (#5562)

3 years agoAdd regressions from #3687. (#5553)
Gereon Kremer [Wed, 2 Dec 2020 05:22:56 +0000 (06:22 +0100)]
Add regressions from #3687. (#5553)

The error from #3687 has been fixed in the meantime.
This PR adds the two examples from this issue as regressions.
Closes #3687

3 years agogoogle test: api: Migrate result_black. (#5569)
Aina Niemetz [Wed, 2 Dec 2020 02:24:21 +0000 (18:24 -0800)]
google test: api: Migrate result_black. (#5569)

google test: api: Migrate result_black.

3 years agoRemove use of this-> in FP literal. (#5565)
Aina Niemetz [Wed, 2 Dec 2020 02:05:27 +0000 (18:05 -0800)]
Remove use of this-> in FP literal. (#5565)

3 years agoRemove assertion related to CEGQI dependency lemmas (#5559)
Andrew Reynolds [Wed, 2 Dec 2020 01:12:01 +0000 (19:12 -0600)]
Remove assertion related to CEGQI dependency lemmas (#5559)

This assertion does not hold when we mix --sygus-inst with normal CEGQI.

Should fix the nightlies.

3 years agogoogle test: Infrastructure and first api test. (#5548)
Aina Niemetz [Wed, 2 Dec 2020 00:30:33 +0000 (16:30 -0800)]
google test: Infrastructure and first api test. (#5548)

This sets up the infrastructure for migrating unit tests from CxxTest to
Google Test. It further migrates api/datatype_api_black to the new
infrastructure.

3 years agoFix issues related to model declarations (#5560)
Andrew Reynolds [Wed, 2 Dec 2020 00:00:49 +0000 (18:00 -0600)]
Fix issues related to model declarations (#5560)

This corrects two issues related to model declarations:
(1) model declaration terms were mistaken not cleared,
(2) the model needs to be explicitly destructed before the node manager because it contains references to Node.

Fixes #5540

3 years agoImprove rewriting of str.<= (#4848)
Andres Noetzli [Tue, 1 Dec 2020 16:58:06 +0000 (08:58 -0800)]
Improve rewriting of str.<= (#4848)

This commit improves our rewriting of str.<= slightly. If we have
constant prefixes that are different, we can always rewrite the term to
a constant. Previously, we were only doing so when the result was
false.

3 years agoRefactor transcendental solver (#5539)
Gereon Kremer [Tue, 1 Dec 2020 15:44:32 +0000 (16:44 +0100)]
Refactor transcendental solver (#5539)

This PR does another round of refactoring on the transcendental solver. It cleans up some variable names, introduces an enum type for Convexity and passes both the intended taylor degree and the actual taylor degree (which will be needed for proofs).

3 years agoAdd regressions from #5099 (#5557)
Gereon Kremer [Tue, 1 Dec 2020 15:08:07 +0000 (16:08 +0100)]
Add regressions from #5099 (#5557)

The issue from #5099 has been fixed in the meantime, this PR adds the examples as regressions.
Closes #5099.

3 years agoAdd regression for #4335. (#5554)
Gereon Kremer [Tue, 1 Dec 2020 14:36:37 +0000 (15:36 +0100)]
Add regression for #4335. (#5554)

The error from #4335 has been fixed in the meantime, this PR adds a regression for this issue.
Closes #4335.

3 years agoAdd regressions for #4707. (#5555)
Gereon Kremer [Tue, 1 Dec 2020 14:03:50 +0000 (15:03 +0100)]
Add regressions for #4707. (#5555)

The error from #4707 has been fixed in the meantime, this PR adds the example inputs as regressions.
Closes #4707.

3 years agoMore fixes for quantifier elimination (#5533)
Andrew Reynolds [Tue, 1 Dec 2020 04:22:24 +0000 (22:22 -0600)]
More fixes for quantifier elimination (#5533)

Fixes #5506, fixes #5507.

3 years agofix metadata for a test (#5546)
yoni206 [Tue, 1 Dec 2020 02:42:19 +0000 (18:42 -0800)]
fix metadata for a test (#5546)

A COMMAND was used instead of COMMAND-LINE.

3 years agofp_converter: Properly separate out symbolic glue code. (#5501)
Aina Niemetz [Mon, 30 Nov 2020 23:26:33 +0000 (15:26 -0800)]
fp_converter: Properly separate out symbolic glue code. (#5501)

File fp_converter.h encapsulates the symbolic glue code for symFPU and
implements the actual word-blaster (class FpConverter).
This header should not be included in any other headers in order to no
pull in symFPU headers where it's not needed. However, it was included
in src/theory/fp/theory_fp.h.

This properly separates it out and does some clean up in TheoryFP, which
still needs more love to conform to code style guidelines, and also
more documentation. More love and documentation is postponed to future
PRs to make reviewing easier.

3 years agoUse new let binding in AST printer (#5529)
Andrew Reynolds [Mon, 30 Nov 2020 22:50:09 +0000 (16:50 -0600)]
Use new let binding in AST printer (#5529)

Required for removing the old DagificationVisitor

3 years agofloatingpoint: Use unique_ptr for FloatingPointLiteral pointer. (#5503)
Aina Niemetz [Mon, 30 Nov 2020 20:17:43 +0000 (12:17 -0800)]
floatingpoint: Use unique_ptr for FloatingPointLiteral pointer. (#5503)

3 years agoEliminate uses of SExpr from the parser. (#5496)
Abdalrhman Mohamed [Mon, 30 Nov 2020 19:32:51 +0000 (13:32 -0600)]
Eliminate uses of SExpr from the parser. (#5496)

This is a step towards migrating Commands to the API. SExpr is an internal module that's not used by the API but is used by the parser and some commands. This PR replaces SExpr with terms of kind SEXPR in the parser and strings in commands (which brings them more inline with the API).

3 years agoRemove includes for old API from internal code (#5536)
Andrew Reynolds [Mon, 30 Nov 2020 16:56:28 +0000 (10:56 -0600)]
Remove includes for old API from internal code (#5536)

The only code including the old API now are in parser/ and main/ which will require further untangling.

3 years ago(proof-new) Proofs for regular expression elimination (#5361)
Andrew Reynolds [Mon, 30 Nov 2020 15:41:37 +0000 (09:41 -0600)]
(proof-new) Proofs for regular expression elimination (#5361)

Adds support for proofs for regular expression elimination in TheoryStrings::ppRewrite via a coarse-grained rule RE_ELIM.
This rule is updated by this PR to distinguish whether we apply aggressive elimination. Aggressive elimination is not currently supported, since it is non-deterministic due to generating fresh BOUND_VARIABLE.

3 years agoMake CAD solver work for empty set of assertions (#5535)
Gereon Kremer [Thu, 26 Nov 2020 16:02:16 +0000 (17:02 +0100)]
Make CAD solver work for empty set of assertions (#5535)

When called with no assertions, the CAD solver would still go to work and then segfault when trying to access the first variable.
This PR adds an explicit check for this case and adds a regression.
Fixes #5534 .

3 years agoRemoving infrastructure related to SMT model (#5527)
Andrew Reynolds [Thu, 26 Nov 2020 15:15:30 +0000 (09:15 -0600)]
Removing infrastructure related to SMT model (#5527)

Now, SMT models do not store an internal list of commands, and are not dependent on a reference to SmtEngine.

The next cleanup step will be to merge OutputManager, DumpManager, and SmtEngineNodeListener.

3 years agoMove expand definitions to its own file (#5528)
Andrew Reynolds [Thu, 26 Nov 2020 10:43:19 +0000 (04:43 -0600)]
Move expand definitions to its own file (#5528)

We are changing our policy on how expand definitions is handled during preprocessing.

This will require some additions to expand definitions handling. This PR makes a standalone module for expanding definitions.

3 years agoFully decouple SmtEngine and the Expr layer (#5532)
Andrew Reynolds [Thu, 26 Nov 2020 05:03:11 +0000 (23:03 -0600)]
Fully decouple SmtEngine and the Expr layer (#5532)

This removes the remaining dependencies of SmtEngine on the Expr layer. It now takes a NodeManager instead of a ExprManager.

3 years agoFix missed case of theory preprocessing (#5531)
Andrew Reynolds [Thu, 26 Nov 2020 03:00:13 +0000 (21:00 -0600)]
Fix missed case of theory preprocessing (#5531)

This fixes a rare case of theory preprocessing where rewriting a quantified formula would introduce a term that would not be preprocessed. This led to solution unsoundness on a branch where the relationship between expand definitions and preprocessing is modified.

This is required for updating to the new policy for expand definitions.

3 years agoDisable fact vs lemma optimization in datatypes for now (#5521)
Andrew Reynolds [Thu, 26 Nov 2020 02:37:23 +0000 (20:37 -0600)]
Disable fact vs lemma optimization in datatypes for now (#5521)

This optimization needs more work to determine its correctness. It is currently leading to incorrect candidate models on Facebook benchmarks.

3 years agoAdd regressions for closed issues (#5526)
Andrew Reynolds [Wed, 25 Nov 2020 19:35:58 +0000 (13:35 -0600)]
Add regressions for closed issues (#5526)

We can close #5520, we can close #5378.

3 years agoFix transcendental secant plane lemmas (#5525)
Gereon Kremer [Wed, 25 Nov 2020 18:07:54 +0000 (19:07 +0100)]
Fix transcendental secant plane lemmas (#5525)

The refactoring of the transcendental solver introduced a subtle issue that lead to incorrect secant plane lemmas.
This PR fixes this issue, so that we now produce the correct lemmas again.

3 years agoUse symbol manager for printing responses get-model (#5516)
Andrew Reynolds [Wed, 25 Nov 2020 16:46:41 +0000 (10:46 -0600)]
Use symbol manager for printing responses get-model (#5516)

This makes symbol manager be in charge of determining which sorts and terms to print in response to get-model. This eliminates the need for the parser to call ExprManager::mkVar (and similar methods) with custom flags.

This requires significant simplifications to the printers for models, where instead of a NodeCommand, we take a Sort or Term to print in the model.

This is one of the last remaining steps for migrating the parser to the new API.

The next step will be to remove a lot of the internal infrastructure for managing expression names, commands to print in models, node commands, node listeners, etc.

3 years agoAllow printing of null node in let binder (#5523)
Andrew Reynolds [Wed, 25 Nov 2020 06:30:56 +0000 (00:30 -0600)]
Allow printing of null node in let binder (#5523)

3 years agoRefactor transcendental solver (#5514)
Gereon Kremer [Wed, 25 Nov 2020 00:07:42 +0000 (01:07 +0100)]
Refactor transcendental solver (#5514)

The transcendental solver has grown over time, and a refactoring was due.
This PR splits the transcendental solver into five components:

a utility to compute taylor approximations
a common state for transcendental solvers
a solver for exponential function
a solver for sine function
a solver that wraps everything to a transcendental solver.

3 years agoFix regular expression consume for nested star (#5518)
Andrew Reynolds [Mon, 23 Nov 2020 22:09:20 +0000 (16:09 -0600)]
Fix regular expression consume for nested star (#5518)

The issue was caused by simple regular expression consume being too aggressive when a recursive call was made to the method. In particular, we were assuming that the body of the star must be unrolled to fully consume a string, when it can be skipped if we are not at top level.

Fixes #5510.

3 years agoChange UF ho to ppRewrite instead of expand definition (#5499)
Andrew Reynolds [Mon, 23 Nov 2020 17:49:59 +0000 (11:49 -0600)]
Change UF ho to ppRewrite instead of expand definition (#5499)

UF uses expandDefinitions to convert fully applied HO_APPLY to APPLY_UF. The more appropriate place to do this is in Theory::ppRewrite.

3 years agoFix for sygusToBuiltinEval for non-ground composite terms (#5466)
Andrew Reynolds [Mon, 23 Nov 2020 16:34:53 +0000 (10:34 -0600)]
Fix for sygusToBuiltinEval for non-ground composite terms (#5466)

There was a bug in the method for computing the evaluation of a sygus term applied to arguments.

The case that was wrong was for (DT_SYGUS_EVAL t c1 ... cn) where t contained a subterm (op t1 ... tn) where:
(1) (op t1 ... tn) is a non-ground sygus datatype term
(2) op was an operator of the form (lambda ((z T)) (g z xi)) where xi is a variable from the formal argument list of the function to synthesize.
In this case, xi was not getting replaced by ci.

This bug appears when using sygus repair for grammars with composite term that involve variables from the formal argument list of the synth-fun.

3 years ago(proof-new) Miscellaneous changes from proof-new (#5445)
Andrew Reynolds [Mon, 23 Nov 2020 16:23:00 +0000 (10:23 -0600)]
(proof-new) Miscellaneous changes from proof-new (#5445)

3 years agoAdd declare model symbol methods to SymbolManager and Model (#5480)
Andrew Reynolds [Mon, 23 Nov 2020 12:40:47 +0000 (06:40 -0600)]
Add declare model symbol methods to SymbolManager and Model (#5480)

This is in preparation for the symbol manager determining which symbols are printed in the model.

3 years agoAdd get-info :time. (#5485)
Gereon Kremer [Mon, 23 Nov 2020 07:55:03 +0000 (08:55 +0100)]
Add get-info :time. (#5485)

This PR adds the new info `:time` that can be queried with `(get-info :time)` and returns the spent CPU time (as returned by `std::clock()`.
 @pjljvandelaar
Fixes CVC4/CVC4-projects#102

3 years agoFix quantifiers scope issue in strings preprocessor (#5491)
Andrew Reynolds [Mon, 23 Nov 2020 01:41:23 +0000 (19:41 -0600)]
Fix quantifiers scope issue in strings preprocessor (#5491)

Leads to free variables in assertions when using `str.<=` whose reduction uses EXISTS not FORALL.

Fixes #5483.

3 years agoAdd posRewriteEqual to bags rewriter (#5498)
mudathirmahgoub [Sat, 21 Nov 2020 01:54:40 +0000 (19:54 -0600)]
Add posRewriteEqual to bags rewriter (#5498)

This PR fixes #5460 by adding posRewriteEqual to bags rewriter

3 years agoRename symfpu_literal.(h.in|cpp) -> floatingpoint_literal_symfpu.(h.in|cpp). (#5502)
Aina Niemetz [Sat, 21 Nov 2020 01:30:43 +0000 (17:30 -0800)]
Rename symfpu_literal.(h.in|cpp) -> floatingpoint_literal_symfpu.(h.in|cpp). (#5502)

3 years agoRename floatingpoint.h.in -> floatingpoin.h. (#5500)
Aina Niemetz [Sat, 21 Nov 2020 00:32:03 +0000 (16:32 -0800)]
Rename floatingpoint.h.in -> floatingpoin.h. (#5500)

3 years agoFix remove term formula policy for terms beneath quantifiers (#5497)
Andrew Reynolds [Fri, 20 Nov 2020 23:49:27 +0000 (17:49 -0600)]
Fix remove term formula policy for terms beneath quantifiers (#5497)

Now that extended arithmetic symbols are not eliminated during expandDefinitions, this allowed for a chain of events that would not apply theory preprocessing on certain terms.

In particular, a term t would not have theory preprocessing applied to it if it was a strict subterm of ITE-term s that occurred in a term position in a quantified formula body, and s did not have free variables. In this case, term formula removal would add a lemma corresponding to the ITE skolem definition, whose subterms did not have theory preprocessing applied. This meant that a (div a d) term was not being preprocessed in #5482, leading to solution unsoundness.

This changes the policy in term formula removal to be in sync with theory preprocessing: term formula removal and theory preprocessing only apply to terms that are not beneath quantifiers. In particular, this means that ground terms in quantifier bodies are left untouched until they are introduced e.g. by instantiation.

This fixes the solution soundness issue (fixes #5482).

3 years agoRoundingMode: Rename enum values to conform to code style guidelines. (#5494)
Aina Niemetz [Fri, 20 Nov 2020 23:11:39 +0000 (15:11 -0800)]
RoundingMode: Rename enum values to conform to code style guidelines. (#5494)

3 years agoFloatingPoint: Separate out symFPU glue code. (#5492)
Aina Niemetz [Fri, 20 Nov 2020 22:30:57 +0000 (14:30 -0800)]
FloatingPoint: Separate out symFPU glue code. (#5492)

This works towards having the symFPU headers only included where it's
absolutely needed (only in the .cpp files, not in any other headers).

Note: src/util/floatingpoint.h.in will be converted to a regular .h file
      in the next step to simplify reviewing.

3 years agoFix #5493. (#5495)
Aina Niemetz [Fri, 20 Nov 2020 21:55:42 +0000 (13:55 -0800)]
Fix #5493. (#5495)

3 years agoSupport nested quantifier elimination for get-qe command (#5490)
Andrew Reynolds [Fri, 20 Nov 2020 21:19:40 +0000 (15:19 -0600)]
Support nested quantifier elimination for get-qe command (#5490)

Uses new nested-qe utility for eliminating nested quantification before doing quantifier elimination.

Fixes CVC4/cvc4-wishues#26

Fixes #5484.

3 years agoUpdates to API in preparation for using symbol manager for model (#5481)
Andrew Reynolds [Fri, 20 Nov 2020 20:49:55 +0000 (14:49 -0600)]
Updates to API in preparation for using symbol manager for model (#5481)

printModel no longer makes sense if the list of declared symbols is managed outside the solver.

Also, mkConst needs a variant to distinguish a provided name of "" vs. a name that is not provided.

3 years agoFix compiler warnings. (#5493)
Aina Niemetz [Fri, 20 Nov 2020 20:06:23 +0000 (12:06 -0800)]
Fix compiler warnings. (#5493)

3 years agoFix use of declaration sequence command in cvc parser (#5479)
Andrew Reynolds [Fri, 20 Nov 2020 19:51:07 +0000 (13:51 -0600)]
Fix use of declaration sequence command in cvc parser (#5479)

This is required to make the cvc parser work properly with the new version of getting models based on the symbol manager.

3 years ago(proof-new) Replace LazyCDProofSet by generic CDProofSet (#5487)
Gereon Kremer [Fri, 20 Nov 2020 19:04:37 +0000 (20:04 +0100)]
(proof-new) Replace LazyCDProofSet by generic CDProofSet (#5487)

This PR replaces the LazyCDProofSet, that was hardcoded to use LazyCDProof objects, by a templated CDProofSet.

3 years agoAllow to pass ProofGenerator to arithmetic inference manager. (#5488)
Gereon Kremer [Fri, 20 Nov 2020 13:08:45 +0000 (14:08 +0100)]
Allow to pass ProofGenerator to arithmetic inference manager. (#5488)

This PR prepares the addition of proofs for the arithmetic theory by making addPendingArithLemma() accept a ProofGenerator*.

3 years agoEnable new implementation of CEGQI based on nested quantifier elimination (#5477)
Andrew Reynolds [Thu, 19 Nov 2020 22:53:48 +0000 (16:53 -0600)]
Enable new implementation of CEGQI based on nested quantifier elimination (#5477)

This replaces the old implementation of CEGQI based on nested quantifier elimination (--cegqi-nested-qe) with the new implementation.

The previous implementation used some convoluted internal attributes to manage dependencies between quantified formulas, the new implementation is much simpler: it simply eliminates nested quantification eagerly.

Fixes #5365, fixes #5279, fixes #4849, fixes #4433.

This PR also required fixes related to how quantifier elimination is computed.

3 years agofloatingpoint.h: Split in preparation to cleanly separate symFPU glue code. (#5478)
Aina Niemetz [Thu, 19 Nov 2020 22:05:31 +0000 (14:05 -0800)]
floatingpoint.h: Split in preparation to cleanly separate symFPU glue code. (#5478)

3 years agoUse new let binding utility in smt2 printer (#5472)
Andrew Reynolds [Thu, 19 Nov 2020 21:06:41 +0000 (15:06 -0600)]
Use new let binding utility in smt2 printer (#5472)

Also fixes some whitespace issues in printing quantified formulas.

3 years agoInclude stddef.h (needed for size_t) in cvc4_public.h (#5476)
Aina Niemetz [Thu, 19 Nov 2020 19:30:52 +0000 (11:30 -0800)]
Include stddef.h (needed for size_t) in cvc4_public.h (#5476)

This further removes obsolete explicit includes of stdint.h.

3 years agoAdd nested quantifier elimination module (#5422)
Andrew Reynolds [Thu, 19 Nov 2020 18:27:40 +0000 (12:27 -0600)]
Add nested quantifier elimination module (#5422)

This has static utilities for doing nested quantifier elimination and some data structures for maintaining a context-dependent set of quantified formulas that have been processed.

This is work towards CVC4/cvc4-wishues#26, and work reimplementation of the option --ceqgi-nested-qe.

3 years agoFix issues related to eliminating extended arithmetic operators (#5475)
Andrew Reynolds [Thu, 19 Nov 2020 17:44:35 +0000 (11:44 -0600)]
Fix issues related to eliminating extended arithmetic operators (#5475)

This fixes 2 issues related to eliminating arithmetic operators:
(1) counterexample lemmas in CEGQI were not being preprocessed
(2) ensureLiteral was not doing term formula removal.
This corrects these two issues. Now ensureLiteral does full theory preprocessing on the term we are ensuring literal for, meaning this may trigger lemmas if the term contains extended arithmetic operators like div.

Fixes #5469, fixes #5470, fixes #5471.

This adds --sygus-inst to 2 of these benchmarks which moreover makes them solvable.

This also improves our assertions and trace messages.

3 years agoUse symbol manager for unsat cores (#5468)
Andrew Reynolds [Thu, 19 Nov 2020 12:42:04 +0000 (06:42 -0600)]
Use symbol manager for unsat cores (#5468)

This PR uses the symbol manager for handling names for unsat cores.

This replaces interfaces in SmtEngine for managing expression names. It removes the SetExpressionName command.

3 years agoAdd -> operator overload for cd* iterators. (#5464)
Mathias Preiner [Wed, 18 Nov 2020 22:45:52 +0000 (14:45 -0800)]
Add -> operator overload for cd* iterators. (#5464)

3 years agoDisable slow nl regression (#5467)
Andrew Reynolds [Wed, 18 Nov 2020 21:45:16 +0000 (15:45 -0600)]
Disable slow nl regression (#5467)

3 years agoAdd let binding utility (#5444)
Andrew Reynolds [Wed, 18 Nov 2020 20:30:07 +0000 (14:30 -0600)]
Add let binding utility (#5444)

This utility will replace the dagification visitor for printing lets for Node in the smt2 printer, and will be used further in e.g. LFSC proof printing.

3 years agoMinor cleanup of SmtEngine (#5450)
Andrew Reynolds [Wed, 18 Nov 2020 16:20:18 +0000 (10:20 -0600)]
Minor cleanup of SmtEngine (#5450)

3 years agoDo not expand definitions of extended arithmetic operators (#5433)
Andrew Reynolds [Wed, 18 Nov 2020 15:07:08 +0000 (09:07 -0600)]
Do not expand definitions of extended arithmetic operators (#5433)

This PR makes it so that extended arithmetic operators are not expanded during expand definitions. Instead they are eliminated at theory preprocessing, which occurs as the last step of preprocessing.

The motivation for this is three fold:
(1) Some quantified LIA benchmarks lead to CVC4 failing to eliminate div functions from quantifier instantiation, this leads to spurious logic failures. A regression is included, which now is correctly solved.
(2) We should allow better rewriting and preprocessing for extended arithmetic functions, especially for div/mod which is important for many users of QF_NIA.
(3) More generally,Theory::expandDefinitions will be deleted. All functionalities in expandDefinitions should move to Theory::ppRewrite.

This changes impacts many benchmarks that involve non-linear and quantifiers:

Many benchmarks (as expected) give a warning during check-models since (/ n 0) cannot be evaluated. I've added -q to disable these warnings. Fully addressing this is part of an agenda to improve our support for --check-models.
Several fuzzing benchmarks involving NL+quantifiers now time out. However, several can be solved by --sygus-inst, which is now the preferred instantiation strategy for NL+quantifiers.
2 other non-linear regressions time out, which are disabled in this PR.
one sygus-inference benchmark (regress1/sygus/issue3498.smt2), now correctly times out (previously it did not timeout since the preprocessor was unable to apply sygus-inference and resorted to normal methods, now sygus-inference can apply but as expected times out).
Fixes #5237.

3 years agoUse symbol manager for get assignment (#5451)
Andrew Reynolds [Wed, 18 Nov 2020 14:34:12 +0000 (08:34 -0600)]
Use symbol manager for get assignment (#5451)

This replaces the previous methods for get-assignment which involving making a DefinedNamedFunctIonCommand and storing the expression names map in the SmtEngine.

Note: we now limit :named terms to those not beneath quantifiers and let-bindings.

3 years agoFix asan issues related to solver and symbol manager (#5457)
Andrew Reynolds [Wed, 18 Nov 2020 14:05:31 +0000 (08:05 -0600)]
Fix asan issues related to solver and symbol manager (#5457)

Should fix the nightlies.

3 years agoFloatingPoint: Use uint32_t instead of unsigned. (#5459)
Aina Niemetz [Wed, 18 Nov 2020 01:54:19 +0000 (17:54 -0800)]
FloatingPoint: Use uint32_t instead of unsigned. (#5459)