cvc5.git
2 years ago[proofs] Alethe: Rename DUPLICATED_LITERALS (#7661)
Lachnitt [Thu, 18 Nov 2021 14:44:48 +0000 (06:44 -0800)]
[proofs] Alethe: Rename DUPLICATED_LITERALS (#7661)

In the Alethe specification the DUPLICATED_LITERALS rule was renamed to CONTRACTION. This PR renames the rule to be consistent with the standard.

2 years agoapi: Fix kind documentation for BAG_MAKE. (#7663)
Aina Niemetz [Thu, 18 Nov 2021 01:18:06 +0000 (17:18 -0800)]
api: Fix kind documentation for BAG_MAKE. (#7663)

2 years agoImprove naming in term canonization when handling HO variables (#7660)
Haniel Barbosa [Wed, 17 Nov 2021 22:12:22 +0000 (19:12 -0300)]
Improve naming in term canonization when handling HO variables (#7660)

Previously all higher-order variables would me named with "-" followed by the index, since the method did not account for functional types (which are printed as with (-> ...)). This commit changes it so that it takes the return type, which will always be atomic, thus giving more meaningful names to the canonical variables.

2 years ago[sat] Fix indentation in "reason" (#7662)
Haniel Barbosa [Wed, 17 Nov 2021 21:07:58 +0000 (18:07 -0300)]
[sat] Fix indentation in "reason" (#7662)

2 years agoAdd documentation for z3py compatibility API (#7652)
Gereon Kremer [Wed, 17 Nov 2021 19:40:49 +0000 (11:40 -0800)]
Add documentation for z3py compatibility API (#7652)

This PR includes documentation for the z3py compatibility API into our general API.
It does so by adding the z3py compatibility API as an external project to download it and then have sphinx document it via the autodoc extension that we already use for our regular python API.
Right now we simply show everything on one page, which should be refactored in the future.

2 years agoPreparations for eliminating arithmetic subtyping (#7637)
Andrew Reynolds [Wed, 17 Nov 2021 19:07:14 +0000 (13:07 -0600)]
Preparations for eliminating arithmetic subtyping (#7637)

Adds TypeNode::isArithmetic, NodeManager::mkConstReal and NodeManager::mkConstInt.

The first method (for now) is equivalent to TypeNode::isReal, and the latter 2 are equivalent to NodeManager::mkConst(CONST_RATIONAL, ...).

This furthermore distinguishes all uses of isReal: all that intend to be isArithmetic are changed in this PR. Redundant uses of isReal() || isInteger() are merged to isArithmetic().

Due to the above, there are no behavior changes in this PR.

2 years agoRevert change and clean datatypes cons candidate generator (#7645)
Andrew Reynolds [Wed, 17 Nov 2021 12:29:14 +0000 (06:29 -0600)]
Revert change and clean datatypes cons candidate generator (#7645)

PR #7600 refactored and optimized candidate generator. This PR actually corrected an issue where the datatypes constructor expansion candidate generator did not generate instances for triggers whose top symbol is a constructor. However, fixing it to generate instances led to a performance regression on Facebook benchmarks.

This PR reverts the behavior change from that PR, and moreover makes it explicit that we do not generate instances in this case.

2 years agoImplement aggressive pruning in CAD solver (#7650)
Gereon Kremer [Wed, 17 Nov 2021 06:41:51 +0000 (22:41 -0800)]
Implement aggressive pruning in CAD solver (#7650)

This PR implements a more aggressive pruning of redundant intervals, namely intervals that are covered by two other intervals, but not a single one. As already discussed in the respective paper, it is not entirely clear whether this is beneficial as removing such an interval may make the "overlap" smaller and thus the generated interval in the lower dimension may become smaller as well. It is thus only enabled via a (new) option.
Experiments show that such redundant intervals are relatively common (878 benchmarks on QF_NRA), the impact of this option is very limited and not strictly beneficial.

2 years agoUpdate Python packaging infrastructure (#7654)
Alex Ozdemir [Wed, 17 Nov 2021 02:19:05 +0000 (18:19 -0800)]
Update Python packaging infrastructure (#7654)

- Stop passing --lib-only (it no longer exists)
- Fix the regex search for the cvc5 version
- Take a version suffix as an (optional) environmental variable

2 years agomake default and modes strings instead of enum values (#7656)
Gereon Kremer [Wed, 17 Nov 2021 01:45:32 +0000 (17:45 -0800)]
make default and modes strings instead of enum values (#7656)

For mode options, getOptionInfo would hold the name of the enum values for the default value and the available modes. This PR changes this to hold the string values instead, which is what users can actually use via the API.

2 years agoFix binding of quoted symbols in `define-fun` (#7655)
Andres Noetzli [Wed, 17 Nov 2021 01:31:32 +0000 (17:31 -0800)]
Fix binding of quoted symbols in `define-fun` (#7655)

Our `DefineFunctionCommand` was binding the string representation of the
function symbol including the `|` quotes instead of the symbol without
the quotes. This commit fixes the issue.

2 years agoRemove documentation for --lib-only (#7648)
Alex Ozdemir [Wed, 17 Nov 2021 01:18:46 +0000 (17:18 -0800)]
Remove documentation for --lib-only (#7648)

The feature was removed in #7258.

2 years agoUpdate SimpleVC.java (#7647)
mudathirmahgoub [Wed, 17 Nov 2021 01:01:13 +0000 (19:01 -0600)]
Update SimpleVC.java (#7647)

Update SimpleVC.java with try with resource missed in previous PR

2 years agoTranslating API tests to Python — part 1 (#7597)
yoni206 [Tue, 16 Nov 2021 18:56:37 +0000 (20:56 +0200)]
Translating API tests to Python — part 1 (#7597)

This PR translates some of the API tests from here to Python. The other tests are translated in a private branch and will be added in a separate PR.

2 years agoFix compile errors with java examples (#7646)
mudathirmahgoub [Tue, 16 Nov 2021 18:13:19 +0000 (12:13 -0600)]
Fix compile errors with java examples (#7646)

Fix compile errors with java examples

2 years ago[proofs] Make sure --proof-check=... is no-op when not checking proofs (#7638)
Haniel Barbosa [Tue, 16 Nov 2021 17:51:25 +0000 (14:51 -0300)]
[proofs] Make sure --proof-check=... is no-op when not checking proofs (#7638)

Fixes cvc5/cvc5-projects#342

2 years agoRefactor `metakind` (#7639)
Andres Noetzli [Tue, 16 Nov 2021 15:59:04 +0000 (07:59 -0800)]
Refactor `metakind` (#7639)

This is a first attempt of refactoring our `metakind` definitions and
declarations. The commit removes unnecessary code that was being
generated, moves code from header to source files (primarily code that
was only relevant to the source file), and gets rid of some hacks
related to circular dependencies.

2 years agoapi: Rename BOUND_VAR_LIST to VARIABLE_LIST. (#7632)
Aina Niemetz [Mon, 15 Nov 2021 16:10:26 +0000 (08:10 -0800)]
api: Rename BOUND_VAR_LIST to VARIABLE_LIST. (#7632)

2 years ago[Strings] Minor refactor of eager solver (#7628)
Andres Noetzli [Mon, 15 Nov 2021 15:49:26 +0000 (07:49 -0800)]
[Strings] Minor refactor of eager solver (#7628)

This moves code that is not strictly related to the eager solver out of
the eager solver and into TheoryStrings. This is cleaner and makes it
easier to enable/disable the eager solver.

2 years agoAdd documentation for theory_bags_type_rules.h (#7642)
mudathirmahgoub [Mon, 15 Nov 2021 15:16:20 +0000 (09:16 -0600)]
Add documentation for theory_bags_type_rules.h (#7642)

This PR adds documentation for theory_bags_type_rules.h, and updates the type rule for rel.join_image to ensure tuple elements in the binary relation have the same sort.

2 years agoSkip `str.code` inferences for sequence eqcs (#7644)
Andres Noetzli [Sat, 13 Nov 2021 20:24:44 +0000 (12:24 -0800)]
Skip `str.code` inferences for sequence eqcs (#7644)

Fixes cvc5/cvc5-projects#340. Type checking
failed because cvc5 was trying to construct a term (str.to_code (seq.unit false)). We do not allow the construction of terms
(str.to_code t) where t is not of type string. This commit fixes the
issue by skipping sequence equivalence classes when doing inferences
related to str.to_code.

Note that the regression test is slightly different from the original
unit test. It asserts that the index passed to seq.nth is
non-negative, which ensures that we can check the resulting model. I
have checked that the modified regression test triggers the issue before
the change in this commit.

2 years agoFix type error for rewriting bag.map bag.union_disjoint (#7640)
mudathirmahgoub [Sat, 13 Nov 2021 19:33:34 +0000 (13:33 -0600)]
Fix type error for rewriting bag.map bag.union_disjoint (#7640)

Fix type error for rewriting bag.map bag.union_disjoint

2 years agoAdd operator set.map to theory of sets (#7641)
mudathirmahgoub [Sat, 13 Nov 2021 18:51:27 +0000 (12:51 -0600)]
Add operator set.map to theory of sets (#7641)

Towards supporting set.map operator in the sets solver.

2 years agobags: Rename kinds with a more consistent naming scheme (#7611)
mudathirmahgoub [Fri, 12 Nov 2021 21:33:16 +0000 (15:33 -0600)]
bags: Rename kinds with a more consistent naming scheme (#7611)

2 years ago[proofs] Cancel SYMM in CDProof, throw an error for cyclic proofs during double SYMM...
Andrew Reynolds [Fri, 12 Nov 2021 21:09:11 +0000 (15:09 -0600)]
[proofs] Cancel SYMM in CDProof, throw an error for cyclic proofs during double SYMM elimination (#7630)

This fixes the potential for cyclic proofs in CDProof when P and (SYMM P) are added as proofs to a CDProof with automatic managing of symmetry.

This manifested as non-termination on the seqArray branch with proofs enabled, instead, if this were to occur, we should throw an error, which is easy to catch.

2 years agoFix redundant definitions of `NodeValue::getConst` (#7636)
Andres Noetzli [Fri, 12 Nov 2021 16:25:01 +0000 (08:25 -0800)]
Fix redundant definitions of `NodeValue::getConst` (#7636)

If multiple kinds have the same payload, cvc5 is currently generating
multiple copies of NodeValue::getConst() with the same template
argument, which results in a redefinition of the same function. This
commit modifies the mkmetakind script to avoid emitting redundant
definitions of NodeValue::getConst().

2 years agoAdd some basic rewrites for regular expression intersection (#7629)
Andrew Reynolds [Fri, 12 Nov 2021 15:02:43 +0000 (09:02 -0600)]
Add some basic rewrites for regular expression intersection (#7629)

Adds some basic rewrites for re.inter and re.union involving children of the form (str.to_re c) for constants c.

This is towards addressing bottlenecks for Zelkova benchmarks.

2 years agoRemove `ConstantMap<Rational>` (#7635)
Andres Noetzli [Fri, 12 Nov 2021 14:14:49 +0000 (06:14 -0800)]
Remove `ConstantMap<Rational>` (#7635)

This is in preparation of having two different kinds (CONST_RATIONAL
and CONST_INT) share the same payload. To do so, we cannot rely on
ConstantMap<Rational> anymore to map the payload type to a kind. This
commit extends support in the mkmetakind script to deal with such
payloads by adding a + suffix to the type. The commit also does some
minor refactoring of NodeManager::mkConst() and
NodeManager::mkConstInternal() to support setting the kind explicitly.
Finally, the commit addresses all instances where mkConst<Rational>()
is used, including the API.

2 years agoVarious minor docs improvements (#7626)
Gereon Kremer [Fri, 12 Nov 2021 02:27:53 +0000 (18:27 -0800)]
Various minor docs improvements (#7626)

This PR does a number of minor improvements to the docs.

2 years agoAdd an API method to get the raw name of a term. (#7618)
Abdalrhman Mohamed [Thu, 11 Nov 2021 22:01:24 +0000 (16:01 -0600)]
Add an API method to get the raw name of a term. (#7618)

2 years agoGeneralize front-end checks to check for shadowed variables (#7634)
Andrew Reynolds [Thu, 11 Nov 2021 21:39:37 +0000 (15:39 -0600)]
Generalize front-end checks to check for shadowed variables (#7634)

When using the API, we currently check for free variables in assertions and in terms passed to get-value.

We also require checking for variable shadowing.

This generalizes the utility method so that both free variables and shadowed variables are checked and reported to the user.

2 years agoAdd lazy approach for handling lambdas in the HO extension (#7625)
Andrew Reynolds [Thu, 11 Nov 2021 19:41:14 +0000 (13:41 -0600)]
Add lazy approach for handling lambdas in the HO extension (#7625)

This adds a new option --uf-lazy-ll for not applying lambda lifting eagerly. This is motivated by HO operators in theory of bags, e.g. bag.map, which cannot answer "sat" for simple problems where lambdas are mapped to bags, due to the introduction of quantified formulas for eliminating lambdas.

It moves lambda lifting from term formula removal to a utility module within TheoryUF. If lazy lambda lifting is enabled, this module does not introduce quantified formulas for lambdas eagerly.

It adds 2 lemma schemas for reasoning about quantifier-free constraints with lambdas natively in TheoryUF. It extends the model construction in the HoExtension to assign lambdas in the case that an equivalence class contains a variable that is defined by a lambda.

2 years agoFixes for update/nth over constant sequences (#7631)
Andrew Reynolds [Thu, 11 Nov 2021 16:24:38 +0000 (10:24 -0600)]
Fixes for update/nth over constant sequences (#7631)

This includes fixes related to how we process seq.update / seq.nth applied to sequence constants.

2 years agoapi: Add Solver::mkRegexpAll(). (#7614)
Aina Niemetz [Wed, 10 Nov 2021 21:10:16 +0000 (13:10 -0800)]
api: Add Solver::mkRegexpAll(). (#7614)

2 years ago[proofs] Alethe: Translate of Arithmetic rules (#7613)
Lachnitt [Wed, 10 Nov 2021 12:54:09 +0000 (04:54 -0800)]
[proofs] Alethe: Translate of Arithmetic rules (#7613)

Implementation of the translation of MACRO_ARITH_SCALE_SUM_UB, INT_TIGHT_UB and INT_TIGHT_LB into the Alethe calculus.

Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
2 years ago[proofs] Alethe: Translate INSTANTIATE rule (#7607)
Lachnitt [Wed, 10 Nov 2021 12:16:55 +0000 (04:16 -0800)]
[proofs] Alethe: Translate INSTANTIATE rule  (#7607)

Implementation of the translation of INSTANTIATE rules into the Alethe calculus.

Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
2 years agodocs: Also create javadoc for generated Kind.java (#7624)
Mathias Preiner [Wed, 10 Nov 2021 03:42:31 +0000 (19:42 -0800)]
docs: Also create javadoc for generated Kind.java (#7624)

2 years agoFix soundness issue of missing premises for count bag lemmas (#7615)
mudathirmahgoub [Wed, 10 Nov 2021 02:31:49 +0000 (20:31 -0600)]
Fix soundness issue of missing premises for count bag lemmas (#7615)

This PR fixes soundness issues found by cvc5 fuzzy sygus when it answers unsat for sat problems.
The error is related to a previous fix which did not include the required antecedent in the two lemmas:

(=>  (= e x)
        (=
              (bag.count e (bag x c))
             (ite (>= c 1) c 0)))

and

(=>  (distinct x e))  (= (bag.count e (bag x c)) 0))

2 years agojava: Fix building cvc5.jar for cmake 3.16. (#7623)
Mathias Preiner [Wed, 10 Nov 2021 01:58:36 +0000 (17:58 -0800)]
java: Fix building cvc5.jar for cmake 3.16. (#7623)

Fixes #7579.

2 years agoFix parsing array constants (#7617)
Andrew Reynolds [Wed, 10 Nov 2021 01:13:22 +0000 (19:13 -0600)]
Fix parsing array constants (#7617)

This generalizes a fix for parsing array constants.

Fixes #7596.

2 years agosets: Rename set.intersection to set.inter. (#7622)
Aina Niemetz [Wed, 10 Nov 2021 00:36:33 +0000 (16:36 -0800)]
sets: Rename set.intersection to set.inter. (#7622)

This further renames kind SET_INTERSECTION to SET_INTER.

2 years agoReorganize test/unit/api directory. (#7612)
Aina Niemetz [Wed, 10 Nov 2021 00:08:29 +0000 (16:08 -0800)]
Reorganize test/unit/api directory. (#7612)

This moves .cpp files to directory test/unit/api/cpp and python files in
test/python/unit/api to test/unit/api/python.

2 years ago[proofs] Alethe: Translate Further Equality rules (#7606)
Lachnitt [Tue, 9 Nov 2021 22:37:35 +0000 (14:37 -0800)]
[proofs] Alethe: Translate Further Equality rules (#7606)

Implementation of the translation of FALSE_INTRO, FALSE_ELIM, TRUE_INTRO and TRUE_ELIM rules into the Alethe calculus.

Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
2 years ago[proofs] Alethe: Translate Equality rules (#7605)
Lachnitt [Tue, 9 Nov 2021 22:10:32 +0000 (14:10 -0800)]
[proofs] Alethe: Translate Equality rules (#7605)

Implementation of the translation of SYMM, TRANS and CONG rules into the Alethe calculus.

Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
2 years agoOnly eliminate lambdas in higher-order elimination if ho-elim is enabled (#7603)
Andrew Reynolds [Tue, 9 Nov 2021 21:40:36 +0000 (15:40 -0600)]
Only eliminate lambdas in higher-order elimination if ho-elim is enabled (#7603)

Required for lazy lambdas in HO.

Also properly guards the case when the preprocessing pass is a no-op.

2 years agoMinor optimizations for term database (#7600)
Andrew Reynolds [Tue, 9 Nov 2021 21:19:48 +0000 (15:19 -0600)]
Minor optimizations for term database (#7600)

A few minor optimizations for term database.

Also collects private/public blocks in quantifiers engine.

2 years agoClean up ctest configuration and CI test configuration. (#7620)
Aina Niemetz [Tue, 9 Nov 2021 20:21:08 +0000 (12:21 -0800)]
Clean up ctest configuration and CI test configuration. (#7620)

Previously, on CI, unit tests and api tests were run twice since we use
a ctest exclude rule based on labels (-LE) which includes unit and api
tests, but then run them separately again. This cleans up the CI test
configuration.

Further, unit gtest unit tests were added with gtest_add_tests, which
adds every test of a unit test binary as a single test target to ctest.
In theory, this may speed up testing (because more parallelism) but in
practice it slows it down due to the start up overhead. It also clutters
CI output. This cleans up the gtest configuration to add the gtest unit
tests per test binary rather then per test of a test binary.

2 years ago[proofs] Generalize trivial cycle detection in LazyCDProofChain (#7619)
Haniel Barbosa [Tue, 9 Nov 2021 19:35:38 +0000 (16:35 -0300)]
[proofs] Generalize trivial cycle detection in LazyCDProofChain (#7619)

Previously the trivial cycle check only covered the case in which the currently-being-expanded assumption `A` had as its stored proof node `pf` an assumption proof justifying itself. However, it can be the case that `pf` is not an assumption proof, but a proof that nevertheless has `A` as one of its free assumptions. This commit generalizes the trivial cycle check to account for this.

2 years ago[proofs] Alethe: Translate REORDERING rule (#7533)
Lachnitt [Tue, 9 Nov 2021 18:29:54 +0000 (10:29 -0800)]
[proofs] Alethe: Translate REORDERING rule (#7533)

Implementation of the translation of REORDERING rules into the Alethe calculus.

Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
2 years agosets: Update theory reference and smt2 examples. (#7602)
Aina Niemetz [Tue, 9 Nov 2021 18:07:11 +0000 (10:07 -0800)]
sets: Update theory reference and smt2 examples. (#7602)

2 years agoPreparation for non-constant lambda models (#7604)
Andrew Reynolds [Tue, 9 Nov 2021 17:17:22 +0000 (11:17 -0600)]
Preparation for non-constant lambda models (#7604)

This makes our core model construction amenable to (non-constant) lambdas as assignments to function equivalence classes for higher-order.

We currently only generate almost constant functions for values of functions. After this PR, we allow explicitly provided lambdas as representatives provided by a theory, which will be used by the higher-order extension.

It also makes some improvements to debug check models regarding checking when representatives are equal to their model values.

2 years agoMake secant points user context dependent (#7567)
Gereon Kremer [Tue, 9 Nov 2021 16:34:31 +0000 (08:34 -0800)]
Make secant points user context dependent (#7567)

This PR fixes an issue where the secant points associated with certain transcendental lemmas were not properly cleared when leaving a user context.
Closes #4694.

2 years agoRemove redundant rules for generating Java and Python kinds. (#7616)
Abdalrhman Mohamed [Tue, 9 Nov 2021 16:15:23 +0000 (10:15 -0600)]
Remove redundant rules for generating Java and Python kinds. (#7616)

This PR addresses an issue where the Ninja build generator errors when either Java or Python bindings are enabled. As shown in the error message below, the error occurs because the build.ninja file generated by CMake contains multiple rules for generating OUTPUT and BYPRODUCTS files.

2 years agoAdd LFSC signature for strings (#7523)
Andrew Reynolds [Tue, 9 Nov 2021 15:58:30 +0000 (09:58 -0600)]
Add LFSC signature for strings (#7523)

This includes the currently supported rules and cases, although it is highly incomplete.

2 years agoregex: Rename REGEXP_EMPTY and REGEXP_SIGMA to match SMT-LIB. (#7609)
Aina Niemetz [Tue, 9 Nov 2021 02:51:58 +0000 (18:51 -0800)]
regex: Rename REGEXP_EMPTY and REGEXP_SIGMA to match SMT-LIB. (#7609)

This renames kinds REGEXP_EMPTY to REGEXP_NONE and REGEXP_SIGMA to
REGEXP_ALLCHAR to match their SMT-LIB representation (re.none,
re.allchar). It further renames api::Solver::mkRegexpEmpty() to
mkRegexpNone and api::Solver::mkRegexpSigma to mkRegexpAllchar.

2 years agoRemove `CVC5Message` (#7610)
Gereon Kremer [Tue, 9 Nov 2021 01:55:09 +0000 (17:55 -0800)]
Remove `CVC5Message` (#7610)

This PR removes the few remaining usages of the CVC5Message() and gets rid of the whole thing.

2 years agoRemove antlr_tracing.h (#7608)
Gereon Kremer [Tue, 9 Nov 2021 01:19:42 +0000 (17:19 -0800)]
Remove antlr_tracing.h (#7608)

This PR removes the long obsolete antlr_tracing.h. The file contains an ugly hack to make lexer tracing work for ANTLR 3.2. It has been obsolete since ANTLR 3.3 (April 2011). Note that the code is only enabled with -DCVC5_TRACE_ANTLR, a flag that is never used.

2 years agoRemove more static option accesses (#7582)
Gereon Kremer [Tue, 9 Nov 2021 01:00:35 +0000 (17:00 -0800)]
Remove more static option accesses (#7582)

This PR removes more than half of the remaining static option accesses options::foo() from the theory solvers.

2 years agoRemove command-verbosity option (#7581)
Gereon Kremer [Tue, 9 Nov 2021 00:17:58 +0000 (16:17 -0800)]
Remove command-verbosity option (#7581)

This PR removes the command-verbosity option. It is implemented as a weird special case, and nobody seems to use it anyway.

2 years agocmake: Use fastcov for generating coverage reports. (#7594)
Mathias Preiner [Tue, 9 Nov 2021 00:01:18 +0000 (16:01 -0800)]
cmake: Use fastcov for generating coverage reports. (#7594)

fastcov is a parallelized gcov wrapper.

2 years agoImprove rendering of expert options. (#7589)
Gereon Kremer [Mon, 8 Nov 2021 23:37:10 +0000 (15:37 -0800)]
Improve rendering of expert options. (#7589)

The way expert-only options have been rendered in the documentation emphasized those options, which is exactly what should not be done. This PR changes the rendering to make those options slightly opaque instead.

2 years agoexpand bag.choose operator (#7481)
mudathirmahgoub [Mon, 8 Nov 2021 23:13:27 +0000 (17:13 -0600)]
expand bag.choose operator (#7481)

This PR expands bag.choose operator as a preprocessing step.
It also refactors the implementation of choose operator for sets

2 years agoAdd lambda lift utility (#7601)
Andrew Reynolds [Mon, 8 Nov 2021 21:59:06 +0000 (15:59 -0600)]
Add lambda lift utility (#7601)

Towards a lazy approach for handling lambdas in the higher-order extension.

2 years agosets: Rename kinds with a more consistent naming scheme. (#7595)
Aina Niemetz [Mon, 8 Nov 2021 20:49:14 +0000 (12:49 -0800)]
sets: Rename kinds with a more consistent naming scheme. (#7595)

This prefixes sets kinds with SET_ and relation kinds with
RELATION_. It also prefixes the corresponding SMT-LIB operators with
'set.' and relation operators with 'rel.'.

2 years agoEvaluate cast-to-real operator (#7599)
Andrew Reynolds [Mon, 8 Nov 2021 18:57:12 +0000 (12:57 -0600)]
Evaluate cast-to-real operator (#7599)

Fixes cvc5/cvc5-projects#341.

2 years ago[proofs] Adding NoSubtype node converter to Alethe (#7587)
Haniel Barbosa [Mon, 8 Nov 2021 17:25:26 +0000 (14:25 -0300)]
[proofs] Adding NoSubtype node converter to Alethe (#7587)

Initial version. It'll be improved on demand according to new cases that may lead to issues.

2 years ago[proofs] Method to convert node representation of Alethe rule (#7598)
Haniel Barbosa [Mon, 8 Nov 2021 16:52:59 +0000 (13:52 -0300)]
[proofs] Method to convert node representation of Alethe rule (#7598)

2 years agoIntegrate java unit tests into ctest (#7593)
Gereon Kremer [Sat, 6 Nov 2021 21:43:43 +0000 (14:43 -0700)]
Integrate java unit tests into ctest (#7593)

This PR properly integrates the java api unit tests into ctest.

2 years agoPrint `unsupported` for unrecognized flags. (#7384)
Abdalrhman Mohamed [Sat, 6 Nov 2021 03:30:23 +0000 (22:30 -0500)]
Print `unsupported` for unrecognized flags. (#7384)

Fixes #7374.

2 years agobetter traces in node converter (#7590)
Haniel Barbosa [Sat, 6 Nov 2021 03:14:34 +0000 (00:14 -0300)]
better traces in node converter (#7590)

2 years agoDo not use extended rewrites on recursive function definitions (#7549)
Andrew Reynolds [Sat, 6 Nov 2021 01:26:33 +0000 (20:26 -0500)]
Do not use extended rewrites on recursive function definitions (#7549)

Leads to potential non-idempotent behavior in the rewriter.

The issue cannot be replicated on master, but this safe guards this case anyways.

Fixes #5278.

2 years agoOnly run regress0 for static build (#7592)
Gereon Kremer [Sat, 6 Nov 2021 01:05:58 +0000 (18:05 -0700)]
Only run regress0 for static build (#7592)

It is surprisingly tricky to call ctest properly with multiple -LE arguments (and I actually doubt that the CI version of ctest adheres to its documentation). This PR avoid calling make check (which sets -LE regress[3-4] as a default) and calls ctest directly.

2 years agoRemove `Notice()` in favor of new `verbose()` (#7588)
Gereon Kremer [Sat, 6 Nov 2021 00:27:08 +0000 (17:27 -0700)]
Remove `Notice()` in favor of new `verbose()` (#7588)

This PR removes the remaining usages of the Notice() macros and uses verbose() instead.

2 years agoDisable regress2 test. (#7591)
Mathias Preiner [Sat, 6 Nov 2021 00:03:15 +0000 (17:03 -0700)]
Disable regress2 test. (#7591)

2 years agoFix exclusion criteria for codatatype model values (#7546)
Andrew Reynolds [Fri, 5 Nov 2021 23:37:36 +0000 (18:37 -0500)]
Fix exclusion criteria for codatatype model values (#7546)

This fixes codatatype model value construction.

Model construction for codatatypes is non-standard since it requires analyzing whether (possibly recursively defined) terms are alpha equivalent to others during model construction. This is currently handled as a special case within the theory model builder. (This should eventually be moved somewhere more appropriate via a new callback to theory).

This fixes the criteria which was too permissive about which values can be used in models. We now exclude values that match the skeleton of representative codatatype terms. Previously we additionally required that the terms were bisimilar.

Fixes #4851.

2 years ago[proofs] Fix open sat proof (#7509)
Haniel Barbosa [Fri, 5 Nov 2021 22:48:22 +0000 (19:48 -0300)]
[proofs] Fix open sat proof (#7509)

Improves how LazyCDProofChain handles cycles, which fixes a particular case triggered by the added regression. Also makes LazyCDProofChain::getProofFor more robust in that when it can't connect the requested fact it yields an assumption proof node.

Fixes cvc5/cvc5-projects#324

2 years agoEliminate a level of nesting of traversals in theory preprocessing (#7345)
Andrew Reynolds [Fri, 5 Nov 2021 21:45:13 +0000 (16:45 -0500)]
Eliminate a level of nesting of traversals in theory preprocessing (#7345)

This simplifies the theory preprocessor so that it does not rely on the term formula removal to do a nested traversal. Instead, it only relies on its "runCurrent" method.

Notice that this PR essentially replaces TheoryPreprocessor's theoryPreprocess method with TermFormulaRemoval's runInternal method, while adding the required call to rewriteWithProof and preprocessWithProof as post-rewrites. This is far simpler than the previous method, which invoked nested traversals using TermFormulaRemoval::run.

There are two things that will be improved in follow up PRs:

The initial full rewrite step in the theory preprocessor can be merged into the main traversal of theory preprocess (I believe this is why we are slower on nec benchmark than we were previously),
We should eliminate the traversal methods from TermFormulaRemoval altogether, as they are now subsumed by the theory preprocessors main traversal. This will require refactoring how "early ITE removal" works, as this is the only user now of TermFormulaRemoval::run.
Note we should probably performance test this change.

This incidentally fixes #6973, as the previous theory preprocessing code was to blame for that issue.

2 years agoRemove `Chat()` in favor of new `verbose()` (#7586)
Gereon Kremer [Fri, 5 Nov 2021 20:52:04 +0000 (13:52 -0700)]
Remove `Chat()` in favor of new `verbose()` (#7586)

This PR completely removes the first of several logging macros. Instead of Chat(), we now use verbose(2).

2 years agoMove functions and lambdas from builtin to uf (#7570)
Andrew Reynolds [Fri, 5 Nov 2021 20:12:22 +0000 (15:12 -0500)]
Move functions and lambdas from builtin to uf (#7570)

This is in preparation for adding better native support for handling lambdas in the higher-order extension of the UF theory.

We require that LAMBDA and function types belong to theory UF so that the theory solver is properly notified.

This also splits the utility methods for computing whether a function is "constant" to its own file.

This PR is code move only.

2 years ago[FP] Do not assert that model has shared term (#7585)
Andres Noetzli [Fri, 5 Nov 2021 19:18:02 +0000 (12:18 -0700)]
[FP] Do not assert that model has shared term (#7585)

Fixes #7569. Currently, the FP solver asserts that
m->hasTerm(sharedTerm) is always true for the real term in the
conversion from real to floating-point value. This is not necessarily
the case because the arithmetic solver computes values for the variables
in the shared terms but not necessarily for the terms themselves. This
commit removes the assertion and instead relies on the fact that a later
assertion checks that m->getValue(sharedTerm).isConst(), which is the
property that we are actually interested in.

2 years agoFix some issues with the java api (#7583)
Gereon Kremer [Fri, 5 Nov 2021 18:53:54 +0000 (11:53 -0700)]
Fix some issues with the java api (#7583)

This PR fixes two issues with the java api:
- the JNI_HEADERS variable was set to a non-existent file, which caused the generate-jni-headers target to always rebuilt.
- the directory structure was unnecessarily nested (probably because we use CMAKE_CURRENT_BINARY_DIR instead of CMAKE_BINARY_DIR).

2 years agoAlethe: Translate CNF rules (#7532)
Lachnitt [Fri, 5 Nov 2021 18:35:05 +0000 (11:35 -0700)]
Alethe: Translate CNF rules (#7532)

Implementation of the translation of various CNF rules into the Alethe calculus.

Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
2 years agoMinor changes to circuit propagator (#7584)
Haniel Barbosa [Fri, 5 Nov 2021 17:45:00 +0000 (14:45 -0300)]
Minor changes to circuit propagator (#7584)

Previously in a given part of the code a proof would be retrieved only so that it'd be printed. This commit guards that part of the code with whether the trace is on and gives more information in what is printed.

Also changes the style of a call.

2 years agoRemove many static calls to rewrite (#7580)
Andrew Reynolds [Fri, 5 Nov 2021 16:54:30 +0000 (11:54 -0500)]
Remove many static calls to rewrite (#7580)

This is the result of a global replace Rewriter::rewrite( -> rewrite( + patching the results.

It makes several classes into EnvObj. Many calls to Rewriter::rewrite remain (that are embedded in classes that should not be EnvObj).

2 years agoRemove quadratic solving in NlModel (#7542)
Gereon Kremer [Fri, 5 Nov 2021 14:15:49 +0000 (07:15 -0700)]
Remove quadratic solving in NlModel (#7542)

This PR removes obsolete code from NlModel concerned with solving quadratic equations. This code is only used on nonlinear real problems where the cad solver is not used.

2 years agoEliminate `Warning` macro in favor of `EnvObj::warning` (#7575)
Gereon Kremer [Fri, 5 Nov 2021 01:16:12 +0000 (18:16 -0700)]
Eliminate `Warning` macro in favor of `EnvObj::warning` (#7575)

This PR eliminates almost all usages of the Warning macro, replacing it mostly by calling EnvObj::warning.

2 years agoRemove a bunch of debugging/logging code from the linear solver (#7576)
Gereon Kremer [Fri, 5 Nov 2021 00:42:06 +0000 (17:42 -0700)]
Remove a bunch of debugging/logging code from the linear solver (#7576)

This PR removes old debugging code from the linear solver.
The removed code was either redundant, already in comments, or manually disabled by a constant false.

2 years agoAdd -o sygus-grammar to print auto-generated SyGuS grammars (#7573)
Andrew Reynolds [Thu, 4 Nov 2021 23:50:55 +0000 (18:50 -0500)]
Add -o sygus-grammar to print auto-generated SyGuS grammars (#7573)

Fixes #5341.

2 years agoImprove defaults for sygus default grammars (#7553)
Andrew Reynolds [Thu, 4 Nov 2021 21:01:41 +0000 (16:01 -0500)]
Improve defaults for sygus default grammars (#7553)

We now add constants from the conjecture to default grammars by default. We also ensure that integer constants are used as real constants when applicable.

2 years agoReplace the old dump infrastructure (#7572)
Andrew Reynolds [Thu, 4 Nov 2021 19:55:13 +0000 (14:55 -0500)]
Replace the old dump infrastructure (#7572)

This deletes the old dumping infrastructure, which due to changes in our usage of SolverEngine does not print valid benchmarks.

This eliminates the concept of a "NodeManagerListener" which has been problematic to maintain.

This PR reimplements the --dump=assertions:pre-X and --dump=assertions:post-X as -t assertions::pre-X and -t assertions::post-X. This is done in a self contained utility method in ProcessAssertions using smt::PrintBenchmark and does not require keeping the rest of the code in sync.

The other dumping tags are deleted for now, and will be reimplemented as needed.

2 years agoStart refactoring of `-o` and `-v` (#7449)
Gereon Kremer [Thu, 4 Nov 2021 19:15:28 +0000 (12:15 -0700)]
Start refactoring of `-o` and `-v` (#7449)

This PR does the first step in consolidating our various output mechanisms. The goal is to have only three major ways to output information:
- verbose(level) prints log-like information to the user via stderr, -v and -q increase and decrease the verbosity, respectively.
- output(tag) prints structured information (as s-expressions) to the user via stdout, -o enables individual tags.
- Trace(tag) prints log-like information to the developer via stdout, -t enables individual tags.
While Debug and Trace (and eventually Dump) will be combined within Trace, all of Warning, Message, Notice and Chat will be combined into verbose.

2 years agoRefactor cmake to build either static or shared (#7534)
Gereon Kremer [Thu, 4 Nov 2021 18:43:42 +0000 (11:43 -0700)]
Refactor cmake to build either static or shared (#7534)

This PR simplifies the cmake setup to only build either shared or statically. It also attempts to fix windows builds, both shared and static.

2 years ago Fix links in README.md (#7568)
Gereon Kremer [Thu, 4 Nov 2021 18:23:36 +0000 (11:23 -0700)]
 Fix links in README.md (#7568)

This PR fixes links to releases and nightly builds. Fixes #7016.

2 years agoEnable CDCAC solver for selected quantified logics (#7571)
Gereon Kremer [Thu, 4 Nov 2021 17:59:14 +0000 (10:59 -0700)]
Enable CDCAC solver for selected quantified logics (#7571)

This PR enables the CDCAC solver for quantified logics with reals, but no integers. Also, it disables SyGuS if no integers are used. The regression is a benchmark that is only solved with this new configuration.

2 years agoAdd support for special tag collectors (#7562)
Gereon Kremer [Thu, 4 Nov 2021 15:58:24 +0000 (08:58 -0700)]
Add support for special tag collectors (#7562)

This PR makes the collection of trace and debug tags more flexible by allowing for "special tag collectors". They can be used to inject tags that are not used as constant strings, but only assembled dynamically at runtime.
One example is the set of assertions::pre-X and assertions::post-X tags. They are currently handled by Dump, and will be migrated to Trace.

2 years agoMinor cleanup in SolverEngine::setInfo() (#7566)
Gereon Kremer [Thu, 4 Nov 2021 15:31:31 +0000 (08:31 -0700)]
Minor cleanup in SolverEngine::setInfo() (#7566)

This does a bit of cleanup by properly calling the option handler instead of trying to manually replicating it. This is way more robust in the face of modifications to the option handlers.

2 years agoMake `Theory::get()` private (#7518)
Andres Noetzli [Thu, 4 Nov 2021 14:44:43 +0000 (07:44 -0700)]
Make `Theory::get()` private (#7518)

Now that theories have been refactored to use common interfaces, they
should not access Theory::get() anymore because facts are consumed by
Theory::check().

2 years agoapi: Rename some separation logic functions for consistency. (#7564)
Aina Niemetz [Wed, 3 Nov 2021 22:04:34 +0000 (15:04 -0700)]
api: Rename some separation logic functions for consistency. (#7564)

This renames Solver::getSeparationHeap to Solver::getValueSepHeap,
Solver::getSeparationNilTerm to Solver::getSepNil and
Solver::declareSeparationHeap to Solver::declareSepHeap.

@mudathirmahgoub @alex-ozdemir @yoni206

2 years agoAdd unit test to cover previous failure with second solver instance. (#7565)
Aina Niemetz [Wed, 3 Nov 2021 21:52:36 +0000 (14:52 -0700)]
Add unit test to cover previous failure with second solver instance. (#7565)

Fixes #5893.

2 years agoEnable CI for Junit tests (#7436)
mudathirmahgoub [Wed, 3 Nov 2021 21:32:10 +0000 (16:32 -0500)]
Enable CI for Junit tests (#7436)

This PR enables CI for java tests by adding --java-bindings to ci.yml.
It also replaces the unreliable finalize method and instead uses AutoCloseable and explicit close method to clean up dynamic memory allocated by java native interface.
The PR fixes compile errors for SolverTest.java and runtime errors for Solver.defineFun.