cvc5.git
2 years agoClean enumerative instantiation options (#7947)
Andrew Reynolds [Fri, 14 Jan 2022 22:56:46 +0000 (16:56 -0600)]
Clean enumerative instantiation options (#7947)

--full-saturate-quant is kept as a generic option, and implies --enum-inst.

2 years agoImplement -o subs to show learned top-level substitutions (#7944)
Andrew Reynolds [Fri, 14 Jan 2022 22:17:57 +0000 (16:17 -0600)]
Implement -o subs to show learned top-level substitutions (#7944)

Also adds substitutions as part of the output of -o learned-lits for completeness.

2 years agoRename python APIs (#7950)
Alex Ozdemir [Fri, 14 Jan 2022 21:45:19 +0000 (13:45 -0800)]
Rename python APIs (#7950)

Rename python APIs to "base" and "pythonic"

2 years agoPreprare central model building for RANs (#7951)
Gereon Kremer [Fri, 14 Jan 2022 21:05:03 +0000 (13:05 -0800)]
Preprare central model building for RANs (#7951)

This PR uses a new utility isEvaluationResult() instead of isConst() within the core model building. This prepares model building for model values that are not constants (in the sense of isConst()) but still constant-lilke values, like real algebraic numbers.

2 years agorefactor div rewriter, add support for ran (#7941)
Gereon Kremer [Fri, 14 Jan 2022 20:27:50 +0000 (12:27 -0800)]
refactor div rewriter, add support for ran (#7941)

This extends the rewriter for division to also support real algebraic numbers.

2 years agoFix learned rewrite pass for non-real equalties (#7936)
Andrew Reynolds [Fri, 14 Jan 2022 20:00:37 +0000 (14:00 -0600)]
Fix learned rewrite pass for non-real equalties (#7936)

Fixes #7918.

2 years agoAdd operator<<(RewriteStatus) (#7952)
Gereon Kremer [Fri, 14 Jan 2022 19:16:47 +0000 (11:16 -0800)]
Add operator<<(RewriteStatus) (#7952)

Adds a streaming operator for RewriteStatus. I found it helpful while refactoring / debugging the rewriter.

2 years agoWeaken assertion in relevance manager (#7943)
Andrew Reynolds [Fri, 14 Jan 2022 17:05:20 +0000 (11:05 -0600)]
Weaken assertion in relevance manager (#7943)

Fixes #7937.

2 years agoRefactor arithmetic pre-rewriter for multiplication (#7930)
Gereon Kremer [Fri, 14 Jan 2022 16:30:14 +0000 (08:30 -0800)]
Refactor arithmetic pre-rewriter for multiplication (#7930)

This PR refactors the pre-rewrite stage for multiplication.

2 years agoAdd support for RANs in rewriter for `MULT` (#7940)
Gereon Kremer [Fri, 14 Jan 2022 15:57:24 +0000 (07:57 -0800)]
Add support for RANs in rewriter for `MULT` (#7940)

This PR refactors the post rewriter for multiplication. It now supports real algebraic numbers and tries a bit harder to avoid the overhead of the normal form abstraction.

2 years agoAdd RAN support in UMINUS rewriter (#7933)
Gereon Kremer [Fri, 14 Jan 2022 15:36:17 +0000 (07:36 -0800)]
Add RAN support in UMINUS rewriter (#7933)

This adds rewriting for UMINUS of real algebraic numbers

2 years agoAdd arithmetic rewriter for RAN (#7929)
Gereon Kremer [Thu, 13 Jan 2022 21:53:16 +0000 (13:53 -0800)]
Add arithmetic rewriter for RAN (#7929)

This adds a rewriter for real arithmetic constants, possibly rewriting them to a rational.

2 years agoFix bug in evaluator for division by zero (#7942)
Andrew Reynolds [Thu, 13 Jan 2022 19:18:07 +0000 (13:18 -0600)]
Fix bug in evaluator for division by zero (#7942)

Fixes #7917.

2 years agoUnify abstract values and uninterpreted constants (#7424)
Andres Noetzli [Thu, 13 Jan 2022 01:42:26 +0000 (17:42 -0800)]
Unify abstract values and uninterpreted constants (#7424)

This commit unifies abstract values and "uninterpreted constants" into a
single kind. Note that "uninterpreted constants" is a bit of a misnomer
in the context of the new API, since they do not correspond to the
equivalent of a declare-const command, but instead are values for
symbols of an uninterpreted sort (and thus special cases of abstract
values). Instead of treating "uninterpreted constants" as a separate
kind, this commit extends abstract values to hold a type (instead of
marking their type via attribute in NodeManager::mkAbstractValue())
and uses the type of the abstract values to determine whether they are a
value for a constant of uninterpreted sort or not. Unifying these
representations simplifies code and brings the terminology more in line
with the SMT-LIB standard.

This commit also updates the APIs to remove support for creating
abstract values and "uninterpreted constants". Users should never create
those. They can only be returned as a value for a term after a
satisfiability check.

Finally, the commit removes code in the parser for parsing abstract
values and updates the code for getting values involving abstract
values. Since the parser does not allow the declaration/definition of
abstract values, and determining whether a symbol is an abstract value
was broken (not all symbols starting with an @ are abstract values),
the code was effectively dead. Getting values involving "uninterpreted
constants" now no longer requires parsing the string of the values, but
instead, we can use existing API functionality.

2 years agoRefactor post rewriter for addition (#7931)
Gereon Kremer [Thu, 13 Jan 2022 00:55:46 +0000 (16:55 -0800)]
Refactor post rewriter for addition (#7931)

This makes the post rewriter for addition aware of real algebraic numbers. Also, it tries a bit harder to avoid the normal_form utilities if only constants are present.

2 years agoFix check whether we have a tag (#7901)
Gereon Kremer [Thu, 13 Jan 2022 00:14:06 +0000 (16:14 -0800)]
Fix check whether we have a tag (#7901)

This PR fixes a subtle issue with the docs upload for releases. While most of the context of the original action is passed into the docs upload action, the git ref changes from refs/tags/... to refs/heads/.... However, we still can check the current ref against the head_branch of the original workflow.

2 years agoAdd -o learned-lits to output learned literals (#7934)
Andrew Reynolds [Wed, 12 Jan 2022 23:28:02 +0000 (17:28 -0600)]
Add -o learned-lits to output learned literals (#7934)

Prints both literals learned during preprocessing, and during search.

This feature was recently requested by Cetora.

2 years agoRefactor atom rewriting to be RAN-aware (#7928)
Gereon Kremer [Wed, 12 Jan 2022 22:51:29 +0000 (14:51 -0800)]
Refactor atom rewriting to be RAN-aware (#7928)

This PR starts refactoring the arithmetic rewriter by making rewriting of atoms aware of real algebraic numbers.
It also is slightly more aggressive now, directly rewriting relational operators where lhs = rhs in the preRewrite stage.

2 years agoRefactor rewriteMinus (#7932)
Gereon Kremer [Wed, 12 Jan 2022 22:19:31 +0000 (14:19 -0800)]
Refactor rewriteMinus (#7932)

Refactors rewriteMinus to be generally simpler and explicitly rely on rewriting addition.
Note that rewriteMinus would almost never be called in post rewrite anyway, as it would rewrite to addition in pre rewrite.

2 years agoEnsure configuration of shared selectors is consistent in SyGuS subsolver (#7927)
Andrew Reynolds [Wed, 12 Jan 2022 21:46:38 +0000 (15:46 -0600)]
Ensure configuration of shared selectors is consistent in SyGuS subsolver (#7927)

This prevents the SyGuS subsolver from having a different configuration of dt-share-sel than the main SyGuS solver. Having this mismatch can lead to incorrect synthesis results.

Fixes #7925.

2 years agoAlways enable RAN, but disable its implementation without poly (#7910)
Gereon Kremer [Wed, 12 Jan 2022 18:59:29 +0000 (10:59 -0800)]
Always enable RAN, but disable its implementation without poly (#7910)

This PR makes sure that the RealAlgebraicNumber class is always visible, but its implementation is only enabled when libpoly is available. This allows us to use this class in more places of cvc5.

2 years agoAdd mkRealAlgebraicNumber (#7923)
Gereon Kremer [Wed, 12 Jan 2022 18:18:19 +0000 (10:18 -0800)]
Add mkRealAlgebraicNumber (#7923)

This PR adds the convenience function NodeManager::mkRealAlgebraicNumber().

2 years agoAlways use partial function for sqrt (#7926)
Andrew Reynolds [Wed, 12 Jan 2022 17:52:07 +0000 (11:52 -0600)]
Always use partial function for sqrt (#7926)

Fixes the behavior reported in #7924.

2 years agoEliminate use of subtyping from results of quantifier elimination (#7885)
Andrew Reynolds [Wed, 12 Jan 2022 15:58:14 +0000 (09:58 -0600)]
Eliminate use of subtyping from results of quantifier elimination (#7885)

Fixes #7870.

Notice this node converter is potentially unnecessary if we ever get rid of arithmetic subtyping.

2 years agoAdds a kind to hold RealAlgebraicNumber constants (#7908)
Gereon Kremer [Tue, 11 Jan 2022 22:44:43 +0000 (14:44 -0800)]
Adds a kind to hold RealAlgebraicNumber constants (#7908)

This PR adds a new kind that holds RealAlgebraicNumber constants. As it can not be a constant in the sense of isConst(), it is wrapped within an operator, similar to IAND or CARDINALITY_CONSTRAINT.

2 years agoDisable filtering of shapes in sygus-rcons pool. (#7922)
Abdalrhman Mohamed [Tue, 11 Jan 2022 21:58:17 +0000 (15:58 -0600)]
Disable filtering of shapes in sygus-rcons pool. (#7922)

This PR disables filtering of enumerated shapes in the pool of the Sygus reconstruction algorithm.

2 years agoFix `TypeNode::substitute()` for type constants (#7920)
Andres Noetzli [Tue, 11 Jan 2022 17:19:15 +0000 (09:19 -0800)]
Fix `TypeNode::substitute()` for type constants (#7920)

Fixes cvc5/cvc5-projects#395. The
TypeNode::substitute() method did not account for type constants such
as the Boolean type and was trying to use a NodeBuilder to build such
constants instead. This commit fixes the issue by adding a special case
for types without children.

2 years agoapi: Fix formatting of docs for Term::getSetValue(). (#7914)
Aina Niemetz [Tue, 11 Jan 2022 16:25:00 +0000 (08:25 -0800)]
api: Fix formatting of docs for Term::getSetValue(). (#7914)

2 years agoRemove static accesses to options (#7913)
Gereon Kremer [Tue, 11 Jan 2022 16:03:41 +0000 (08:03 -0800)]
Remove static accesses to options (#7913)

This PR removes some more calls like options::foo() in favor of options().module.foo.

2 years agoTighten policy for unsat cores in sygus core connective (#7911)
Andrew Reynolds [Tue, 11 Jan 2022 15:10:41 +0000 (09:10 -0600)]
Tighten policy for unsat cores in sygus core connective (#7911)

Previous policy was due to limitations on options on subsolvers, which no longer exist.

Fixes cvc5/cvc5-projects#354.
Fixes #7902.

2 years agoGuard use of unsat core mode pp-only (#7899)
Andrew Reynolds [Tue, 11 Jan 2022 14:48:14 +0000 (08:48 -0600)]
Guard use of unsat core mode pp-only (#7899)

Fixes cvc5/cvc5-projects#366. Now gives
(error "Error in option parsing: Unsat core mode pp-only is for internal use only.")

2 years agoFix `TypeNode::substitute()` (#7916)
Andres Noetzli [Tue, 11 Jan 2022 14:29:49 +0000 (06:29 -0800)]
Fix `TypeNode::substitute()` (#7916)

Fixes cvc5/cvc5-projects#397. Fixes
cvc5/cvc5-projects#399. After performing the
substitution on the child node, the result was not added as a child to
the node under construction, resulting in nodes with too few children.
This commit fixes that issue.

2 years agoCheck the synthesized funs of `check-synth-next`. (#7915)
Abdalrhman Mohamed [Tue, 11 Jan 2022 06:36:20 +0000 (00:36 -0600)]
Check the synthesized funs of `check-synth-next`. (#7915)

This PR ensures that the functions synthesized by cvc5 with check-synth-next command(s) are different from the preceding ones.

2 years agoAdd new idiomatic examples (#7912)
Alex Ozdemir [Tue, 11 Jan 2022 00:49:02 +0000 (16:49 -0800)]
Add new idiomatic examples (#7912)

2 years ago[Win64] Link LibPoly statically for static builds (#7891)
Andres Noetzli [Tue, 11 Jan 2022 00:15:03 +0000 (16:15 -0800)]
[Win64] Link LibPoly statically for static builds (#7891)

Fixes #7861. LibPoly was not getting linked statically for Windows
builds, even when building a static version of cvc5. This commit fixes
the issue.

2 years agoFix internal type error when printing lambdas with more than one variable in LFSC...
Andrew Reynolds [Mon, 10 Jan 2022 22:53:40 +0000 (16:53 -0600)]
Fix internal type error when printing lambdas with more than one variable in LFSC (#7909)

2 years agoCheck arity in Sort::instantiate (#7897)
Andrew Reynolds [Mon, 10 Jan 2022 22:19:00 +0000 (16:19 -0600)]
Check arity in Sort::instantiate (#7897)

Fixes cvc5/cvc5-projects#386.

2 years agoAdd new methods for RealAlgebraicNumber (#7907)
Gereon Kremer [Mon, 10 Jan 2022 21:29:45 +0000 (13:29 -0800)]
Add new methods for RealAlgebraicNumber (#7907)

This PR adds some new methods for the RealAlgebraicNumber class: division, computing the (multiplicative) inverse and a specialization of std::hash.

2 years agoUpdate to latest libpoly version (#7906)
Gereon Kremer [Mon, 10 Jan 2022 20:14:59 +0000 (12:14 -0800)]
Update to latest libpoly version (#7906)

This PR updates to the latest libpoly version. It contains a bugfix and adds division and inverse operations for algebraic numbers.

2 years agoapi: Remove Sort::isComparableTo(). (#7903)
Aina Niemetz [Mon, 10 Jan 2022 19:27:04 +0000 (11:27 -0800)]
api: Remove Sort::isComparableTo(). (#7903)

Since we do not support arithmetic subtyping on the API level anymore,
this function is obsolete. Consequently, this now requires that
replacement terms as arguments to Term::substitute() are of the same
sort as the replaced terms.

2 years agoAvoid gcc/10.1.0 bug by moving some configuration into a namespace
Matthew Sotoudeh [Mon, 10 Jan 2022 18:29:10 +0000 (10:29 -0800)]
Avoid gcc/10.1.0 bug by moving some configuration into a namespace

Eventually there is intention to move all of cvc5::Configuration into
cvc5::configuration, this is a first step that also has the nice side-effect of
letting it build under an otherwise-buggy version of gcc/10.1.0 that was
causing issues.

Signed-off-by: Matthew Sotoudeh <sotoudeh@stanford.edu>
2 years agoStart post-release for 0.0.5
Mathias Preiner [Sat, 8 Jan 2022 00:00:41 +0000 (16:00 -0800)]
Start post-release for 0.0.5

2 years agoBump version to 0.0.5
Mathias Preiner [Sat, 8 Jan 2022 00:00:41 +0000 (16:00 -0800)]
Bump version to 0.0.5

2 years agoImprove docs extension for examples (#7900)
Gereon Kremer [Fri, 7 Jan 2022 22:25:38 +0000 (14:25 -0800)]
Improve docs extension for examples (#7900)

We recently added automatic download links for examples in our documentation, however they assumed everything to live inside the main cvc5 repo while, e.g., the examples for the z3py compat API do not. While #7896 provided a very simple fix, it mixes different concerns (rendering of tabs vs. locating the input files, though they should coincide right now).
This PR takes a more fundamental approach by extending the current pattern mechanism to allow for explicit url specification.

Closes #7896.

2 years agoPython Idomatic API: Document solver, results, utilities, and fns (#7882)
Alex Ozdemir [Fri, 7 Jan 2022 20:42:28 +0000 (12:42 -0800)]
Python Idomatic API: Document solver, results, utilities, and fns (#7882)

I put fns into "Core & Booleans".

2 years agoRemove CDDenseSet data structure (#7890)
Matthew Sotoudeh [Fri, 7 Jan 2022 20:12:18 +0000 (12:12 -0800)]
Remove CDDenseSet data structure (#7890)

It was not used anywhere, and does not appear to build under, at least,
GCC/9.1.0.

Signed-off-by: Matthew Sotoudeh <sotoudeh@stanford.edu>
2 years agoFix eager string preprocessing in incremental mode (#7895)
Andrew Reynolds [Fri, 7 Jan 2022 19:30:36 +0000 (13:30 -0600)]
Fix eager string preprocessing in incremental mode (#7895)

Fixes #5780.

Issue was caused by reintroducing skolems during preprocessing that were already solved for.

2 years agoSome minor improvements to the theory references (#7881)
Gereon Kremer [Fri, 7 Jan 2022 17:49:22 +0000 (09:49 -0800)]
Some minor improvements to the theory references (#7881)

2 years agoAdd regressions for array sequence solver (#7874)
Andrew Reynolds [Fri, 7 Jan 2022 16:32:34 +0000 (10:32 -0600)]
Add regressions for array sequence solver (#7874)

This closes the seqArray branch.

2 years agoDocument quantifiers in idiomatic python API (#7880)
Alex Ozdemir [Fri, 7 Jan 2022 04:37:08 +0000 (20:37 -0800)]
Document quantifiers in idiomatic python API (#7880)

2 years ago[Regressions] Add directive for disabling testers (#7892)
Andres Noetzli [Fri, 7 Jan 2022 04:13:56 +0000 (20:13 -0800)]
[Regressions] Add directive for disabling testers (#7892)

This commit adds a directive for regressions (`DISABLE-TESTER`) that
allows disabling a given tester for a regression. Currently, we disable
testers based on properties such as command line arguments, which can be
error prone.

2 years agoMake alpha equivalence user context dependent (#7889)
Andrew Reynolds [Thu, 6 Jan 2022 23:42:14 +0000 (17:42 -0600)]
Make alpha equivalence user context dependent (#7889)

Fixes #5373

Issues were occurring due to using quantified formulas in alpha equivalence that were stale.

This also removes spurious warnings from quantifier elimination (dropping the "strict" requirement, which unnecessarily warns if we are in a non-arithmetic logic).

2 years agoDisallow separation logic in incremental mode (#7888)
Andrew Reynolds [Thu, 6 Jan 2022 23:26:10 +0000 (17:26 -0600)]
Disallow separation logic in incremental mode (#7888)

Fixes #5541. Fixes #5607.

2 years agoImprove theory combination in the presence of real algebraic numbers (#7883)
Gereon Kremer [Thu, 6 Jan 2022 21:09:10 +0000 (13:09 -0800)]
Improve theory combination in the presence of real algebraic numbers (#7883)

This PR changes how we handle real algebraic numbers in theory combination and model construction.
The goal is to improve getEqualityStatus() and produce proper models more often.
We now use a RAN-aware evaluator for getEqualityStatus() and change the way how the nonlinear extension finalizes its model.

2 years agoFix non-idempotent rewrite in arrays (#7887)
Andrew Reynolds [Thu, 6 Jan 2022 20:25:19 +0000 (14:25 -0600)]
Fix non-idempotent rewrite in arrays (#7887)

Fixes #6807.

2 years agoMinor cleaning of non-clausal simplification (#7886)
Andrew Reynolds [Thu, 6 Jan 2022 20:05:04 +0000 (14:05 -0600)]
Minor cleaning of non-clausal simplification (#7886)

2 years agocppapi: Remove Datatype::hasNestedRecursion(). (#7878)
Aina Niemetz [Wed, 5 Jan 2022 21:20:05 +0000 (13:20 -0800)]
cppapi: Remove Datatype::hasNestedRecursion(). (#7878)

Datatypes with nested recursion are a highly experimental feature and we
currentle don't even have a decision procedure for them.

2 years agoPy idiomatic API: Doc sets, datatypes, FP (#7877)
Alex Ozdemir [Wed, 5 Jan 2022 20:47:09 +0000 (12:47 -0800)]
Py idiomatic API: Doc sets, datatypes, FP (#7877)

2 years agoapi: Add missing guard for Datatype::isFinite(). (#7879)
Aina Niemetz [Wed, 5 Jan 2022 20:23:17 +0000 (12:23 -0800)]
api: Add missing guard for Datatype::isFinite(). (#7879)

2 years agoProperly parse arithmetic values (#7876)
Andrew Reynolds [Wed, 5 Jan 2022 18:58:10 +0000 (12:58 -0600)]
Properly parse arithmetic values (#7876)

This makes our parser correct for arithmetic values e.g. (- n) is parsed as a value not UMINUS when n is a numeral, as indicated in SMT-LIB. Similarly for (/ m n) and (/ (- m) n) we parse as values and not DIVISION.

This subsumes a patch for constructing array constants where this led to issues.

2 years agoTrack input list for atoms in difficulty manager (#7851)
Andrew Reynolds [Wed, 5 Jan 2022 18:01:25 +0000 (12:01 -0600)]
Track input list for atoms in difficulty manager (#7851)

This makes our support for get-difficulty faster by tracking the set of input formulas that atoms occur in, which is highly important for benchmarks with many assertions and where many lemmas are added at standard effort.

This is work towards making get-difficulty scale on a large benchmark from Certora.

2 years agoDon't use python's collections.Set (#7875)
Alex Ozdemir [Wed, 5 Jan 2022 17:19:03 +0000 (09:19 -0800)]
Don't use python's collections.Set (#7875)

We used to use collections.Set.

Apparently this was an alias for collections.abc.Set. I can't find it
documented anywhere though, going as far back as Python 3.5. Perhaps it
was an undocumented left-over from when the collections.abc module was
split out from collections in Python 3.3?

At any rate, the alias appears broken in Python version 3.10.1.

Now we just use the builtin set type, which is what we wanted anyway,
I think.

2 years agoProperly set __file__ in python bindings (#7867)
yoni206 [Wed, 5 Jan 2022 16:26:00 +0000 (18:26 +0200)]
Properly set __file__ in python bindings (#7867)

When running make docs after changing the documentation in cvc5.pxi, the html files are not updated. This PR fixes this issue.

Co-authored-by: Gereon Kremer gereon.kremer@cs.rwth-aachen.de
2 years agoFix proofs for datatype purify (#7841)
Andrew Reynolds [Tue, 4 Jan 2022 21:50:17 +0000 (15:50 -0600)]
Fix proofs for datatype purify (#7841)

Previously we were failing to produce proofs for purification lemmas (= t witness_form(t)) from datatypes.

2 years agoChange default granularity of proofs to macro (#7855)
Andrew Reynolds [Tue, 4 Jan 2022 21:22:20 +0000 (15:22 -0600)]
Change default granularity of proofs to macro (#7855)

Also changes the name "off" to "macro" to be more consistent.

2 years agoReorder NodeManager class according to code guidelines. (#7873)
Aina Niemetz [Tue, 4 Jan 2022 20:15:53 +0000 (12:15 -0800)]
Reorder NodeManager class according to code guidelines. (#7873)

This only moves code, and removes some redundant inline keywords.

2 years agoAdd utility expr::isBooleanConnective (#7869)
Andrew Reynolds [Tue, 4 Jan 2022 19:38:51 +0000 (13:38 -0600)]
Add utility expr::isBooleanConnective (#7869)

2 years agoRemove spurious call to applySubs (#7871)
Andrew Reynolds [Tue, 4 Jan 2022 19:04:53 +0000 (13:04 -0600)]
Remove spurious call to applySubs (#7871)

This call is preceded by another call to `apply-subs` at the beginning of preprocessing.

This is motivated by very large input benchmarks from Cetora where this preprocessing pass can take up to 5 seconds.

2 years agoRemove unused shutdown infrastructure (#7872)
Andrew Reynolds [Tue, 4 Jan 2022 18:07:42 +0000 (12:07 -0600)]
Remove unused shutdown infrastructure (#7872)

2 years agoFix int blaster (#7856)
Andrew Reynolds [Tue, 4 Jan 2022 17:35:49 +0000 (11:35 -0600)]
Fix int blaster (#7856)

2 years agoAdd bag.member operator to theory of bags (#7857)
mudathirmahgoub [Tue, 4 Jan 2022 16:49:00 +0000 (10:49 -0600)]
Add bag.member operator to theory of bags (#7857)

This PR adds the predicate bag.member to be analogous to predicate set.member.
The PR is motivated by converting regressions for sets to bags, which avoids defining a predicate for each set type

(define-fun bag.member ((e E) (B (Bag E))) Bool (>= (bag.count e B) 1))

2 years ago[proofs] [sat] Add manager for optimized clauses and their proofs (#7824)
Haniel Barbosa [Tue, 4 Jan 2022 16:16:39 +0000 (13:16 -0300)]
[proofs] [sat] Add manager for optimized clauses and their proofs (#7824)

This utility is going to be used by both the proof cnf stream and the sat proof manager to re-add to their respective internal proofs the proof nodes that were stored for clauses saved within the SAT solver at an assertion level below the current user level.

The utility is a context notify object, which means that it can be called when the tracked context pops.

2 years agoRefactor bag solver (#7770)
mudathirmahgoub [Tue, 4 Jan 2022 15:39:33 +0000 (09:39 -0600)]
Refactor bag solver (#7770)

2 years agoAdding interpolation and abduction to the python API (#7868)
yoni206 [Tue, 4 Jan 2022 15:18:41 +0000 (17:18 +0200)]
Adding interpolation and abduction to the python API (#7868)

This PR adds getAbduct, getAbductNext, getInterpol, and getInterpolNext to the python API.
Tests and documentation are added as well.

2 years agoapi: Add unit test for null case of Sort::toString(). (#7865)
Aina Niemetz [Tue, 4 Jan 2022 01:37:47 +0000 (17:37 -0800)]
api: Add unit test for null case of Sort::toString(). (#7865)

2 years agoapi: Remove redundant check in Term::toString(). (#7866)
Aina Niemetz [Tue, 4 Jan 2022 01:00:06 +0000 (17:00 -0800)]
api: Remove redundant check in Term::toString(). (#7866)

2 years agoUpdate quantifiers compute elim symbols to be iterative dag traversal (#7822)
Andrew Reynolds [Mon, 3 Jan 2022 23:56:18 +0000 (17:56 -0600)]
Update quantifiers compute elim symbols to be iterative dag traversal (#7822)

Fixes cvc5/cvc5-projects#389.

2 years ago[BV] Remove non-existent `friend` class (#7864)
Andres Noetzli [Mon, 3 Jan 2022 21:59:47 +0000 (13:59 -0800)]
[BV] Remove non-existent `friend` class (#7864)

2 years agoAdd download link for examples in documentation (#7836)
Gereon Kremer [Mon, 3 Jan 2022 21:25:00 +0000 (13:25 -0800)]
Add download link for examples in documentation (#7836)

This PR adds a download link to all examples in the documentation
(that are included via the examples extension). I think we should do
this, as we have text like "download the example here" at several
places already...

2 years agoapi: Remove redundant check in Sort::toString(). (#7863)
Aina Niemetz [Mon, 3 Jan 2022 21:08:53 +0000 (13:08 -0800)]
api: Remove redundant check in Sort::toString(). (#7863)

2 years agoRemove static options from sat solver. (#7790)
Gereon Kremer [Mon, 3 Jan 2022 18:29:52 +0000 (10:29 -0800)]
Remove static options from sat solver. (#7790)

This PR removes options::foo() from minisat.

2 years agoExecute `(reset)` command in parse-only mode (#7862)
Andres Noetzli [Mon, 3 Jan 2022 17:35:13 +0000 (09:35 -0800)]
Execute `(reset)` command in parse-only mode (#7862)

This commit fixes an issue where `--parse-only` would not execute
`(reset)` commands, leading to issues with symbols being defined
multiple times.

2 years ago[Regressions] Support more complex scrubbers (#7819)
Andres Noetzli [Thu, 23 Dec 2021 22:33:57 +0000 (14:33 -0800)]
[Regressions] Support more complex scrubbers (#7819)

Currently, we only support single commands in our `SCRUBBER` directives
for regression tests. This commit adds support for executing more
complex commands, including pipes. It also updates the regression script
to use the more modern, higher-level `subprocess.run()` instead of
`subprocess.Popen()`.

2 years agoRemove most uses of mkRationalNode (#7854)
Andrew Reynolds [Wed, 22 Dec 2021 17:17:52 +0000 (11:17 -0600)]
Remove most uses of mkRationalNode (#7854)

Towards eliminating arithmetic subtyping.

2 years agoAdd support for incremental + interpolants (#7853)
Andrew Reynolds [Wed, 22 Dec 2021 16:56:51 +0000 (10:56 -0600)]
Add support for incremental + interpolants (#7853)

Adds support for incrementality + get-interpol, including the get-interpol-next command.

2 years agoSupport get-abduct-next (#7850)
Andrew Reynolds [Tue, 21 Dec 2021 18:21:40 +0000 (12:21 -0600)]
Support get-abduct-next (#7850)

Adds support for incremental abduction, adds regression for using push/pop in combination with get-abduct, and a use of get-abduct-next.

Adds this method to C++, java API.

Interpolation/abduction not yet supported in Python API, I'm waiting for @yoni206 to add this; getAbductNext will be added to Python API in followup PR.

2 years agoEliminate remaining calls to callExtendedRewrite (#7839)
Andrew Reynolds [Tue, 21 Dec 2021 17:03:24 +0000 (11:03 -0600)]
Eliminate remaining calls to callExtendedRewrite (#7839)

2 years agoRewrite (pow2 x) to (pow 2 x) when x is a constant (#7849)
yoni206 [Tue, 21 Dec 2021 14:49:35 +0000 (16:49 +0200)]
Rewrite (pow2 x) to (pow 2 x) when x is a constant (#7849)

Fixes https://github.com/cvc5/cvc5-projects/issues/371.
Fixes https://github.com/cvc5/cvc5-projects/issues/339.
Fixes https://github.com/cvc5/cvc5-projects/issues/333.

Variants of the tests in the above issues are added to this PR. In them, we expect to get an exception because the constant is too big.

2 years agoDisable unit tests without poly (#7844)
Gereon Kremer [Tue, 21 Dec 2021 00:49:12 +0000 (16:49 -0800)]
Disable unit tests without poly (#7844)

This PR disables the new unit tests from #7829 when poly is not available.

2 years agoConnect sequences array solver to strategy in theory of strings (#7847)
Andrew Reynolds [Tue, 21 Dec 2021 00:30:43 +0000 (18:30 -0600)]
Connect sequences array solver to strategy in theory of strings (#7847)

Also corrects an issue with model construction, where SEQ_NTH should be assignable in addition to SEQ_NTH_TOTAL.

seqArray branch (which has regressions) can be merged to master after this PR.

2 years agoEliminating some uses of const rational in arithmetic (#7846)
Andrew Reynolds [Mon, 20 Dec 2021 19:10:30 +0000 (13:10 -0600)]
Eliminating some uses of const rational in arithmetic (#7846)

Note that there are several nested dependencies in arithmetic for constructing constants Constant::mkConstant ---> mkRationalNode ---> mkConst(CONST_RATIONAL, r)

This starts to disambiguate these calls.

2 years agoUpdates to LFSC signatures (#7840)
Andrew Reynolds [Mon, 20 Dec 2021 15:49:58 +0000 (09:49 -0600)]
Updates to LFSC signatures (#7840)

Includes the addition of print 2 rules from Amazon benchmarks, and updates to the names of functions.

2 years agoAllow SyGuS subsolver to be reused in incremental mode (#7785)
Andrew Reynolds [Mon, 20 Dec 2021 15:23:16 +0000 (09:23 -0600)]
Allow SyGuS subsolver to be reused in incremental mode (#7785)

This allows SyGuS subsolvers to be called multiple times to produce solutions for a given set of SyGuS constraints using a new command check-synth-next.

By default, the SyGuS subsolver will generate a new solution for each successive check-synth.

This simplifies the internal SyGuS solver in several ways for this purpose. It also ensures that solutions are cached; current master may recompute solutions in the same state more than once if asked, which is no longer the case.

This completes our support for incremental SyGuS.

2 years ago[Sequences/Array Solver] Minor refactoring (#7843)
Andres Noetzli [Mon, 20 Dec 2021 14:41:06 +0000 (06:41 -0800)]
[Sequences/Array Solver] Minor refactoring (#7843)

This commit performs a minor refactoring of our array core solver. It
adds more comments and avoids sending the
STRINGS_ARRAY_NTH_TERM_FROM_UPDATE lemma more than once in a given
user context.

2 years ago[proofs] Fix helper LFSC script (#7845)
Haniel Barbosa [Mon, 20 Dec 2021 14:03:29 +0000 (11:03 -0300)]
[proofs] Fix helper LFSC script (#7845)

2 years agoapi: java: Support default arity for Solver::mkUnresolvedSort(). (#7842)
Aina Niemetz [Fri, 17 Dec 2021 23:50:59 +0000 (15:50 -0800)]
api: java: Support default arity for Solver::mkUnresolvedSort(). (#7842)

2 years ago[Strings] Minor fixes/improvements (#7837)
Andres Noetzli [Fri, 17 Dec 2021 23:19:46 +0000 (15:19 -0800)]
[Strings] Minor fixes/improvements (#7837)

This is a quick follow-up for PR #7815. My comments didn't make it in
before the PR was merged, so this commit fixes some of the minor issues
I found.

2 years agoArray-inspired Sequence Solver - Fixing several issues in the ArrayCoreSolver class...
Ying Sheng [Fri, 17 Dec 2021 22:28:12 +0000 (14:28 -0800)]
Array-inspired Sequence Solver - Fixing several issues in the ArrayCoreSolver class and options (#7820)

This commit fixes several issues in the ArrayCoreSolver class and the options:
1. Add range checking for an update rule.
2. Assign different inference ids to different rules.
3. small syntax optimizations.

2 years agoSimplify contrib/get-lfsc-checker and use cvc5 repo for LFSC signatures (#7835)
Andrew Reynolds [Fri, 17 Dec 2021 22:07:04 +0000 (16:07 -0600)]
Simplify contrib/get-lfsc-checker and use cvc5 repo for LFSC signatures (#7835)

2 years agoFix rewrite for `str.update(str.rev(s), n, t))` (#7838)
Andres Noetzli [Fri, 17 Dec 2021 21:46:14 +0000 (13:46 -0800)]
Fix rewrite for `str.update(str.rev(s), n, t))` (#7838)

Fixes https://github.com/cvc5/cvc5-projects/issues/390. This commit
fixes two issues with the rewrite: (1) the rewrite should only apply if
the update is of size 1 and (2) the `str.rev(...)` should be removed
inside the `str.update(...)`.