mudathirmahgoub [Tue, 15 Mar 2022 19:28:41 +0000 (14:28 -0500)]
Add skolem lemmas for bags card terms (#7995)
This PR refactors the way skolem lemmas are generated for bags, count terms, and card terms.
As a side effect, this refactoring fixed cvc5/cvc5-projects#481
Andrew Reynolds [Tue, 15 Mar 2022 18:47:36 +0000 (13:47 -0500)]
Properly guard sort instantiate (#8247)
Fixes cvc5/cvc5-projects#387.
Adds a prefix of that unit test before the first exception.
Gereon Kremer [Tue, 15 Mar 2022 18:25:21 +0000 (19:25 +0100)]
Enable nl-cov-var-elim by default, but disable with proofs (#8310)
This changes our policy for --nl-cov-var-elim. It is now enabled by default (it is only used when the coverings solver is used, though), but then disabled when proofs are enabled. Before, it was forced to be enabled when coverings were enabled in set_defaults.
Fixes cvc5/cvc5-projects#489
Andrew Reynolds [Tue, 15 Mar 2022 17:07:14 +0000 (12:07 -0500)]
Remove unecessary separation logic options (#8269)
Code changed indentation and was cleaned slightly.
Andres Noetzli [Tue, 15 Mar 2022 16:07:44 +0000 (09:07 -0700)]
Simplify `Scope` (#8307)
Previously, we were using an std::unique_ptr<std::vector<ContextObj*>>
to store the list of ContextObjs to be garbage collected before the
destruction of the Scope. Lazily allocating that vector is a
micro-optimization that is not worth the trouble.
Andrew Reynolds [Tue, 15 Mar 2022 03:16:41 +0000 (22:16 -0500)]
Fix to consider leafs of theory sets to be variables (#8305)
Fixes cvc5/cvc5-projects#494.
With this fix, we now properly consider terms that belong to other theories that are of set type, e.g. (select x (as set.universe (Set RoundingMode)) in this example to be "variables" according to the theory of sets procedure.
The benchmark is unsat because there are 5 rounding modes and we are selecting an index in a sequence storing "false" at the first 6 indices.
Andrew Reynolds [Tue, 15 Mar 2022 01:11:12 +0000 (20:11 -0500)]
Simplify reductions for set and bag choose (#8304)
Ensures that the reductions are deterministic, thus fixes cvc5/cvc5-projects#493.
The reductions can be further simplified to not introduce UF. This will be addressed in a later PR.
Aina Niemetz [Tue, 15 Mar 2022 00:18:52 +0000 (17:18 -0700)]
Rename TO_FP operator kinds. (#8285)
FLOATINGPOINT_TO_FP_FP -> FLOATINGPOINT_TO_FP_FROM_FP
FLOATINGPOINT_TO_FP_IEEE_BITVECTOR -> FLOATINGPOINT_TO_FP_FROM_IEEE_BV
FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR -> FLOATINGPOINT_TO_FP_FROM_SBV
FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR -> FLOATINGPOINT_TO_FP_FROM_UBV
FLOATINGPOINT_TO_FP_REAL -> FLOATINGPOINT_TO_FP_FROM_REAL
Andrew Reynolds [Mon, 14 Mar 2022 21:02:40 +0000 (16:02 -0500)]
Fixes for skolem definition management (#8301)
Fixes two issues with how we manage skolem definitions (used for tracking which assertions are relevant for the decision engine).
First, the theory proxy must be notified of skolem definitions before we have assertions involving them, or else hasSkolems is wrong. This was previously done incorrectly for lemmas. This PR changes the order in PropEngine::assertLemmasInternal.
Second, skolem definitions are local to a solver instance and should not be managed by attributes, moreover they are user-context dependent. This changes it to a local user-context dependent map in Skolem.
Fixes #8296.
Andrew Reynolds [Mon, 14 Mar 2022 18:29:30 +0000 (13:29 -0500)]
Remove unecessary methods from the API (#8260)
Removes checkEntailed from Solver.
Removes isEntailed, isNotEntailed, isEntailedUnknown from Result.
Removes isSubsortOf, isFunctionLike, getUninterpretedSortName, getSortConstructorName from Sort.
Updates examples and unit tests.
Andrew Reynolds [Mon, 14 Mar 2022 18:02:09 +0000 (13:02 -0500)]
Add rewrite for allchar beneath union + star (#8299)
Addresses the issue on #8295.
The re elimination module was assuming that a trivial RE was rewritten when it was not.
Andrew Reynolds [Mon, 14 Mar 2022 16:56:52 +0000 (11:56 -0500)]
Run preprocess rewrite on equalities until fixed point (#8291)
Previously we were only running once, while strings assumed this was run on what it returned.
This should significantly improve our performance on the benchmarks from SMT-LIB that involving looping word equations.
Andrew Reynolds [Sun, 13 Mar 2022 01:31:56 +0000 (19:31 -0600)]
Minor sync from proof-new (#8293)
Andrew Reynolds [Sat, 12 Mar 2022 23:21:02 +0000 (17:21 -0600)]
Introduce new splitting inference in sets + cardinality (#8290)
Fixes cvc5/cvc5-projects#486.
This introduces a new strategy which splits on whether Venn regions are equal to each other before it splits them into sub-Venn regions.
The issue in the above was caused by a case where the sets solver decided to make 2 Venn regions of the same equivalence class disjoint. By splitting on their equality first, this should introduce the necessary information to discover this is a conflict (via disequality witnessing). It should also be more efficient since we introduce new set terms lazier.
Andrew Reynolds [Sat, 12 Mar 2022 04:18:12 +0000 (22:18 -0600)]
Add algorithm for finding pairs of paths in a node trie (#8286)
This is in preparation for cleaning our implementation of care graph computations.
Right now, UF, datatypes, sets, and strings all have copy/pasted versions of an algorithm that creates an index of operators and run the algorithm in the PR for computing care graphs.
Followup PRs will extend the theory interface and add an instance of this class for computing care graphs. Then, we will add optimized care graph computation for bags (which is missing right now), and then perhaps revisit arrays, which appears to have issues in its computeCareGraph method.
Mathias Preiner [Sat, 12 Mar 2022 03:54:49 +0000 (19:54 -0800)]
cmake: Do not require googletest if unit tests are disabled. (#8271)
Fixes #8088
Andrew Reynolds [Sat, 12 Mar 2022 03:29:23 +0000 (21:29 -0600)]
Improvements for sygus query generation (#8224)
Makes the two sygus query generators have a common base class, which makes it so that they both can dump queries.
Also fixes the expression miner to use user-level sygus terms, otherwise we can make queries using invalid internal terms, e.g. SEQ_NTH_OOB skolem.
The majority of the diff in this PR is moving query_generator to query_generator_sample_sat, and adding a basic version of query generation.
Andrew Reynolds [Sat, 12 Mar 2022 01:09:54 +0000 (19:09 -0600)]
Document type rules (#8248)
Fixes cvc5/cvc5-projects#272.
Fixes cvc5/cvc5-projects#270.
Fixes cvc5/cvc5-projects#269.
Fixes cvc5/cvc5-projects#268.
Also makes a few minor internal fixes to type rules.
Andrew Reynolds [Sat, 12 Mar 2022 00:26:37 +0000 (18:26 -0600)]
Always ensure literal when requiring phase via inference manager (#8292)
Also to be safe, ensures we clear pending in quantifiers engine.
Fixes cvc5/cvc5-projects#484.
Andres Noetzli [Fri, 11 Mar 2022 23:46:38 +0000 (15:46 -0800)]
[API/Python] Add support for `Solver::getModel()` (#8267)
This commit implements support for Solver::getModel() in the Python API,
which was missing before.
Aina Niemetz [Fri, 11 Mar 2022 23:08:31 +0000 (15:08 -0800)]
api: Make checks header private. (#8283)
Andrew Reynolds [Fri, 11 Mar 2022 22:11:07 +0000 (16:11 -0600)]
Remove old decision justification heurstic (#8275)
Fixes cvc5/cvc5-projects#374.
Andrew Reynolds [Fri, 11 Mar 2022 21:41:54 +0000 (15:41 -0600)]
Update abduction and interpolation API to not use pass/return by reference (#8263)
Andrew Reynolds [Fri, 11 Mar 2022 21:09:53 +0000 (15:09 -0600)]
Fix maximum value for pedantic proof level (#8246)
Fixes cvc5/cvc5-projects#357.
Now gives:
(error "Error in option parsing: proof-pedantic =
5773657586652532005 is not a legal setting, value should be at most 100.")
Andrew Reynolds [Fri, 11 Mar 2022 20:49:36 +0000 (14:49 -0600)]
Guard parametric datatypes instantiated by non-first-class sorts (#8277)
Fixes cvc5/cvc5-projects#471.
Gereon Kremer [Fri, 11 Mar 2022 20:09:45 +0000 (21:09 +0100)]
Add first step for proofs documentation (#8193)
This PR initializes some documentation for our proofs. It adds some almost empty files and makes sure that we can show documentation for the PfRule enum.
Andrew Reynolds [Fri, 11 Mar 2022 19:41:46 +0000 (13:41 -0600)]
Remove unecessary CEGQI options (#8281)
Code changed indenting, but did not change otherwise.
Andrew Reynolds [Fri, 11 Mar 2022 18:03:09 +0000 (12:03 -0600)]
Consider APPLY_CONSTRUCTOR applied to values to be a value (#8284)
Fixes cvc5/cvc5-projects#474.
Previously TheoryModel::isModelValue was incorrect for APPLY_CONSTRUCTOR.
Andrew Reynolds [Fri, 11 Mar 2022 17:40:16 +0000 (11:40 -0600)]
Fix reduction for arc trig functions (#8289)
We were not guarding the case where the argument was out of the bounds, e.g. arccos(x) requires -1 <= x <= 1.
Fixes cvc5/cvc5-projects#485.
Andres Noetzli [Fri, 11 Mar 2022 14:48:39 +0000 (06:48 -0800)]
[CI] Make building static/shared configurable (#8272)
This commit changes our CI workflow to actually pass through
build-shared and build-static to the configure-and-build action
and fixes how the condition is checked there. If we just pass through
the inputs, then the condition "${{ inputs.build-shared }}" != "true"
would be true (i.e., the step would be skipped) if
build-shared/build-static are not set explicitly in ci.yml because
of the default values for build-shared/build-static in ci.yml.
Andres Noetzli [Fri, 11 Mar 2022 01:54:33 +0000 (17:54 -0800)]
Refactor kinds parser (#8287)
This commit does a minor refactoring of the kinds parser. It moves the
Python name formatting out of parsekinds.py, adds parsekinds.py as a
dependency for the Java kinds generator, and reformats the scripts using
YAPF.
This is the first step towards generalizing the scripts for other enums.
Andrew Reynolds [Thu, 10 Mar 2022 22:30:10 +0000 (16:30 -0600)]
Fix issue with subtyping from set membership in models (#8282)
Fixes cvc5/cvc5-projects#480.
That benchmark now times out.
Andrew Reynolds [Thu, 10 Mar 2022 20:41:26 +0000 (14:41 -0600)]
Fix theoryOf call in get equality status (#8279)
Should depend on uninterpreted sort owner.
Fixes cvc5/cvc5-projects#476.
Andrew Reynolds [Thu, 10 Mar 2022 19:20:35 +0000 (13:20 -0600)]
Eliminate unecessary datatype options (#8280)
mudathirmahgoub [Thu, 10 Mar 2022 18:49:31 +0000 (12:49 -0600)]
Fix cvc5-projects issue 475 (#8278)
Fixes cvc5/cvc5-projects#475.
Andrew Reynolds [Thu, 10 Mar 2022 18:28:54 +0000 (12:28 -0600)]
Add output -o pre-asserts (#8270)
Analogous to -o post-asserts.
Andrew Reynolds [Thu, 10 Mar 2022 17:02:14 +0000 (11:02 -0600)]
Disable timing out regressions (#8273)
Fixes several of the nightly failures.
Both benchmarks involve undecidable logics and are delicate.
Also should fix the errors involving (missing) SyGuS warnings in the nightlies, which requires competition build to be disabled.
Mathias Preiner [Thu, 10 Mar 2022 00:28:44 +0000 (16:28 -0800)]
Fix regression errors for arm64 nightlies. (#8268)
Gereon Kremer [Wed, 9 Mar 2022 23:40:43 +0000 (00:40 +0100)]
Rename expert statistics to internal, add documentation (#8262)
We decided to rename statistics from "public / expert" to "public / internal". Also, this adds some reasonable documentation about statistics to our online docs.
Gereon Kremer [Wed, 9 Mar 2022 16:37:13 +0000 (17:37 +0100)]
Clear obsolete pending lemmas in arithmetic (#8236)
Arithmetic generally generates nonlinear lemmas as full effort checks, but only sends them out in the subsequent last call effort check. If this one does not happen, the next full effort check still has pending lemmas that may not only be irrelevant now, but possibly carry proofs that are already out of scope.
This PR makes sure that such lemmas are always pruned.
Fixes cvc5/cvc5-projects#465
Andrew Reynolds [Wed, 9 Mar 2022 14:58:27 +0000 (08:58 -0600)]
Change interface for printing instantiations in the API (#8251)
Furthermore note that this should take several modes, similar to the discussion with `blockModel` / `getLearnedLiterals`. It is currently limited to a fixed print mode.
Andrew Reynolds [Wed, 9 Mar 2022 11:42:01 +0000 (05:42 -0600)]
Use expression mining independent of whether sygus stream is enabled (#8250)
Since it is possible to use SyGuS in incremental mode, e.g. for `get-abduct-next`, our expression mining, e.g. for filtering weak solutions, should apply independent of whether sygusStream is enabled. This refactors the SyGuS solver so that we do so.
Andrew Reynolds [Wed, 9 Mar 2022 10:14:39 +0000 (04:14 -0600)]
Add REGEXP_ALL kind to API (#8264)
Previously was immediately converted to (re.* re.allchar) upon construction.
Andrew Reynolds [Wed, 9 Mar 2022 01:42:37 +0000 (19:42 -0600)]
Add regression for fixed issue 6700 (#8265)
Fixes #6700.
Andrew Reynolds [Wed, 9 Mar 2022 00:21:34 +0000 (18:21 -0600)]
Eliminate the APPLY_SELECTOR_TOTAL kind (#8266)
Gereon Kremer [Tue, 8 Mar 2022 23:19:36 +0000 (00:19 +0100)]
Produce intermediate json output for coverage (#8252)
This splits the generation of coverage information into two steps, generating an intermediate json file. This allows further tooling to used this json information: we plan to check whether the APIs (and their tests) are complete by looking at their code coverage within the cpp api.
Andrew Reynolds [Tue, 8 Mar 2022 22:38:20 +0000 (16:38 -0600)]
Do not expand APPLY_SELECTOR (#8174)
Currently we expand (sel_C_n x) to (ite (is-C x) (sel_C_n_total x) (uf x)) during ppRewrite. This introduces ITEs very eagerly and moreover is not necessary since we do congruence over selectors.
This makes it so that we don't do this expansion. The code changes to use APPLY_SELECTOR everywhere instead of APPLY_SELECTOR_TOTAL, which can be deleted in a followup PR. It makes some of the datatype utilities more robust and independent of options.
This required changing one detail of the sygus solver to not do evaluation unfolding in cases where a selector chain was wrongly applied, as this now will not rewrite to a constant.
Andres Noetzli [Tue, 8 Mar 2022 22:02:50 +0000 (14:02 -0800)]
[API/Python] Add support for `Solver::getProof()` (#8259)
This commit implements support for Solver::getProof() in the Python
API, which was missing before.
Andrew Reynolds [Tue, 8 Mar 2022 21:17:32 +0000 (15:17 -0600)]
Guard another case of non-termination in quantifiers rewriting (#8255)
Fixes cvc5/cvc5-projects#152.
Gereon Kremer [Tue, 8 Mar 2022 20:34:48 +0000 (21:34 +0100)]
Make one CI job not use libpoly (#8261)
This PR fixes a regression that was missing the REQUIRES: poly annotation. To avoid these issues in the future, we add --no-poly to one of the CI jobs.
Andrew Reynolds [Tue, 8 Mar 2022 18:29:06 +0000 (12:29 -0600)]
Fixes and additions to LFSC signature (#8205)
Includes:
Proper printing of various FP terms and constants.
Distinguishing "variants" of overloaded symbols, in case a user declares 2 symbols with the same name.
Miscellaneous fixes for printing terms.
Andrew Reynolds [Tue, 8 Mar 2022 07:12:23 +0000 (01:12 -0600)]
Eliminate shadowing in the quantifiers rewriter (#8244)
Fixes #8227.
Recently, we allowed unevaluatable terms to be in the range of substitutions solved during preprocess.
In very rare cases, it may be the case that a quantified formula is substituted into itself, e.g.:
forall x. P(x, b) where b was solved to be forall x. P(x, c)
This leads to forall x. P(x, forall x. P(x, c)) where x is shadowed.
To resolve this issue, we eliminate shadowing in the quantifiers rewriter, e.g. we rewrite the above to forall x. P(x, forall y. P(y, c)).
An alternative solution would be to ensure we use capture avoiding substitutions, but this severely complicates our usage of substitutions throughout the preprocessor / proof system.
This PR also eliminates some dead code in the quantifiers rewriter.
Andrew Reynolds [Tue, 8 Mar 2022 02:53:18 +0000 (20:53 -0600)]
Add unit for fixed project issue (#8253)
Fixes cvc5/cvc5-projects#377.
Was not able to reproduce this on master.
Gereon Kremer [Tue, 8 Mar 2022 02:13:43 +0000 (03:13 +0100)]
Script to list not covered API functions (#8254)
Adds a script that lists all functions from the cpp API not covered by the current coverage information.
Gereon Kremer [Tue, 8 Mar 2022 01:29:03 +0000 (02:29 +0100)]
Rerun failed tests in CI (#8258)
This commit makes our CI rerun failed tests to have the error output at the bottom of the log. This simplifies retrieving the errors from CI logs.
Gereon Kremer [Tue, 8 Mar 2022 00:49:15 +0000 (01:49 +0100)]
Don't run the pypi packaging job on forks (#8256)
Right now, the nightly pypi packaging job runs on all forks. This commit disabled this.
See https://github.community/t/do-not-run-cron-workflows-in-forks/17636
Andres Noetzli [Mon, 7 Mar 2022 22:11:55 +0000 (14:11 -0800)]
Update documentation of `Solver::getUnsatCore()` (#8239)
Fixes https://github.com/cvc5/cvc5-projects/issues/308. This commit adds
documentation for the differences between `Solver::getUnsatCore()` and
SMT-LIB's `(get-unsat-core)`.
Gereon Kremer [Mon, 7 Mar 2022 21:22:44 +0000 (22:22 +0100)]
Fix docs warnings (#8019)
This fixes a bunch of warnings when generating our sphinx documentation.
They are mostly related to incorrect indentation/spacing, line breaks where
no line breaks should be, or missing code blocks.
Note that running clang-format causes some of these issues.
Andrew Reynolds [Mon, 7 Mar 2022 20:33:52 +0000 (14:33 -0600)]
Proper error message for non-first-class sets (#8245)
Fixes cvc5/cvc5-projects#347.
Gereon Kremer [Mon, 7 Mar 2022 15:31:07 +0000 (16:31 +0100)]
Try harder to show that a RAN is rational (#8230)
We try to rewrite real algebraic numbers to rationals. This is important to, e.g., allow the linear solver to see rational constants at all. Refining real algebraic numbers is done lazily, and (almost) any operation may trigger a refinement that makes libpoly realize it actually is rational. Thus, even the mere act of creating a node out of a real algebraic number may do this (it hashes it).
This PR thus introduces a fixed-point loop into the RAN node constructor that defends against this case.
Fixes #8226.
Andres Noetzli [Sun, 6 Mar 2022 16:02:26 +0000 (08:02 -0800)]
Disallow models with `--arrays-weak-equiv` (#8217)
Fixes #2007. We currently do not support generating models when
`--arrays-weak-equiv` is enabled. This commit adds a corresponding
user-facing error message.
Andrew Reynolds [Sat, 5 Mar 2022 20:50:25 +0000 (14:50 -0600)]
Unit tests for fixed projects issues (#8229)
Fixes cvc5/cvc5-projects#421.
Fixes cvc5/cvc5-projects#361.
Andrew Reynolds [Sat, 5 Mar 2022 19:43:43 +0000 (13:43 -0600)]
Make seq.unit robust wrt subtyping (#8209)
Fixes cvc5/cvc5-projects#384.
Fixes cvc5/cvc5-projects#426.
Fixes cvc5/cvc5-projects#427.
Fixes cvc5/cvc5-projects#429.
Issue cvc5/cvc5-projects#423 still remains, to be addressed in a followup PR.
Also fixes issues with subtyping in how sequence constants are printed.
Note this solution is required since we are not ready to eliminate arithmetic subtyping in the short term. These changes will be unnecessary when this happens.
Andres Noetzli [Sat, 5 Mar 2022 18:00:42 +0000 (10:00 -0800)]
[Docs] Add missing requirement (#8238)
Our docs do not build without the `sphinx-rtd-theme` package. This
commit adds the module as an explicit requirement such that if the
module is missing, building the docs fails when configuring and with a
useful error message.
Gereon Kremer [Sat, 5 Mar 2022 01:46:57 +0000 (02:46 +0100)]
Add regressions for fixed issue (#8237)
Adds regressions for an issue that has been fixed in the meantime.
Fixes #4334
Andrew Reynolds [Sat, 5 Mar 2022 00:47:13 +0000 (18:47 -0600)]
Enable NL tangent planes by default (#8233)
Fixes cvc5/cvc5-projects#215
Fixes cvc5/cvc5-projects#291
Fixes cvc5/cvc5-projects#292
Fixes cvc5/cvc5-projects#294
Fixes cvc5/cvc5-projects#297
Previously the concern was that this would interfere with e.g. quantifiers + non-linear. However, our strategy is now fair wrt other theories as we send lemmas at LAST_CALL effort, and is properly restricted by the nl-ext mode.
Moreover, this option increases our ability to solve problems (instead of saying "unknown") significantly, even for quantified logics like UFNIA.
mudathirmahgoub [Fri, 4 Mar 2022 23:33:47 +0000 (17:33 -0600)]
Fix bag.map upwards inferences (#8232)
Gereon Kremer [Fri, 4 Mar 2022 23:09:49 +0000 (00:09 +0100)]
Add unit test for fixed issue (#8235)
This unit test exercised a non-idempotent rewrite for RANs before the rewriter was fully refactored.
Fixed cvc5/cvc5-projects#455
Gereon Kremer [Fri, 4 Mar 2022 22:31:10 +0000 (23:31 +0100)]
Remove spurious assertion in linear solver (#8231)
This PR removes a spurious assertion about how integer equality should look like. It actually requires that the coefficients of the leading terms on both sides of the equation are positive, which can't be true in general anyway. Note that the regression failed before we refactored the arithmetic rewriter.
Fixes cvc5/cvc5-projects#469
Gereon Kremer [Fri, 4 Mar 2022 21:50:32 +0000 (22:50 +0100)]
Guard recursion into terms during substitution in arithmetic utility (#8234)
This PR fixes an issue during variable elimination using equalities in the nonlinear arithmetic solver. We need to make sure that we don't apply the substitutions within terms that are not native arithmetic terms. While we already did that whenever we actually used the resulting term, we did not when we just checked for a possible loop.
Although we always invalidate the substitution cache, the apply method also poisons the actual substitution map. By protecting the calls to apply where we don't actually store the result as well, we avoid this type of "poisoning".
Fixes #8161.
Andrew Reynolds [Fri, 4 Mar 2022 19:40:30 +0000 (13:40 -0600)]
Fix rewrite rule synthesis for 0-ary operators (#8221)
Fixes cvc5/cvc5-projects#422.
Also changes the default setting for rewrite rule synthesis to check correct of rewrite rules by default.
Andrew Reynolds [Fri, 4 Mar 2022 19:12:52 +0000 (13:12 -0600)]
Logic exception when using solution filtering for non-Boolean grammars (#8225)
Fixes cvc5/cvc5-projects#464.
Gereon Kremer [Fri, 4 Mar 2022 18:19:39 +0000 (19:19 +0100)]
Only build wheels nightly and for releases (#8223)
We accidentally enabled building the python wheels with every commit. This fixes it to only build them once at night and for releases.
Andrew Reynolds [Fri, 4 Mar 2022 17:22:18 +0000 (11:22 -0600)]
Add regressions for fixed projects issues (#8228)
Fixes cvc5/cvc5-projects#119
Fixes cvc5/cvc5-projects#135
Fixes cvc5/cvc5-projects#139
Fixes cvc5/cvc5-projects#151
Fixes cvc5/cvc5-projects#155
Fixed cvc5/cvc5-projects#158
Fixes cvc5/cvc5-projects#161
Fixes cvc5/cvc5-projects#165
Fixes cvc5/cvc5-projects#177
Fixes cvc5/cvc5-projects#231
Fixes cvc5/cvc5-projects#232
Fixes cvc5/cvc5-projects#251
Fixes cvc5/cvc5-projects#253
Fixes cvc5/cvc5-projects#264
Fixes cvc5/cvc5-projects#280
Fixes cvc5/cvc5-projects#281
Fixes cvc5/cvc5-projects#282
Fixes cvc5/cvc5-projects#285
Fixes cvc5/cvc5-projects#286
Fixes cvc5/cvc5-projects#290
Fixes cvc5/cvc5-projects#295
Andrew Reynolds [Fri, 4 Mar 2022 14:37:54 +0000 (08:37 -0600)]
Add support for get learned literals in the API (#8099)
This command will eventually take a mode; for now it assumes a default implementation. I've opened cvc5/cvc5-wishues#104 to track this.
This is a feature requested by Certora.
Andrew Reynolds [Thu, 3 Mar 2022 22:54:27 +0000 (16:54 -0600)]
Fix datatype declaration printing in LFSC printer (#8222)
Gereon Kremer [Thu, 3 Mar 2022 18:39:16 +0000 (19:39 +0100)]
Build python wheels in our CI (#8087)
This PR integrates building and publishing cvc5 with its base and pythonic python APIs as a package to PyPi into our CI.
We build wheels for Linux and macOS for CPython 3.6 to 3.10 and PyPy 3.7 and 3.8.
The job is run nightly and for a release, and only published to PyPi for a release (as long as there is no reasonable way to automatically prune nightly builds from either PyPi or TestPyPi).
Andrew Reynolds [Thu, 3 Mar 2022 15:59:04 +0000 (09:59 -0600)]
Generalize LFSC string signature to sequences (#8220)
Lachnitt [Thu, 3 Mar 2022 12:57:14 +0000 (04:57 -0800)]
[proofs] Alethe: Removed Steps that are Double-Printed (#7754)
This PR fixes that some steps are printed more than once. To this end, it deletes that the reference maps in which the steps are stored are constant and optimizes where the steps are added to the maps. It also stores ProofNodes instead of Nodes in the maps.
Co-authored-by: Haniel Barbosa <hanielbbarbosa@gmail.com>
Andrew Reynolds [Thu, 3 Mar 2022 05:00:32 +0000 (23:00 -0600)]
Throw logic exception if a transcendental function is encountered when nl-ext is not full (#8212)
Fixes cvc5/cvc5-projects#376.
Andrew Reynolds [Thu, 3 Mar 2022 04:26:54 +0000 (22:26 -0600)]
Add regression for fixed issue (#8213)
Fixes #5815.
This adds the regression, in theory I still think it is possible for the assertion to fail, but I don't think it is worth pursuing right now.
Andrew Reynolds [Thu, 3 Mar 2022 03:51:42 +0000 (21:51 -0600)]
Improve error for higher-order logic (#8207)
Makes the error more informative when a higher-order function variable is encountered.
Fixes cvc5/cvc5-projects#450.
Mathias Preiner [Thu, 3 Mar 2022 02:57:09 +0000 (18:57 -0800)]
cmake: Fix murxla setup. (#8215)
Gereon Kremer [Thu, 3 Mar 2022 02:16:09 +0000 (03:16 +0100)]
Integrate pythonic api (#8131)
We decided we want to ship the pythonic API together with our base python API.
This PR adds a new target cvc5_python_api that first builds the base python API and then copies the pythonic API over. Furthermore we now use the cvc5.pythonic module to generate the corresponding documentation.
Gereon Kremer [Thu, 3 Mar 2022 00:37:05 +0000 (01:37 +0100)]
Fix rewriting of mixed-integer atoms (#8214)
The sixth input from #8159 revealed a subtle issue in our rewriting of arithmetic atoms. As real and integer atoms are rewritten differently, we check this and then call different functions. However, we check this on the original input, although this property can change during rewriting, e.g., when the only real variable vanishes.
This PR fixes this issue.
Andrew Reynolds [Wed, 2 Mar 2022 23:09:24 +0000 (17:09 -0600)]
Fix issue with dropping non-reduced sine terms (#8211)
Fixes #8208.
A spurious "break" was leftover from when this code was a loop, this meant when the first reduced term was encountered, it ignored the remainder.
Andrew Reynolds [Wed, 2 Mar 2022 22:36:05 +0000 (16:36 -0600)]
Fix models involving cardinality of sets of finite type (#8206)
Was caused by a flag not being reset, thus making it so that subsequent models did not use exclusion sets.
Fixes #5402. (Fixes the last benchmark on that issue, the first two are fixed by #8201).
Andrew Reynolds [Wed, 2 Mar 2022 21:55:52 +0000 (15:55 -0600)]
Always purify universe from set minus (#8201)
This fixes a bug in our handling of set cardinality + set universe (also used for set complement).
The bug was caused by using the rewritten form of terms to compute siblings in the cardinality graph. This is problematic for
(set.minus set.universe t) whose sibling was computed to be rewrite( (set.inter set.universe t) ) = t.
To avoid the issue, we now purify the argument of set.minus to avoid this behavior.
Fixes #5400.
Fixes the first benchmark on #5402.
This also eliminates a spurious lemma schema for set universe that was leftover from handling set subtyping.
Andrew Reynolds [Wed, 2 Mar 2022 21:11:05 +0000 (15:11 -0600)]
Eliminate CDHashMap::insertAtContextLevelZero (#8173)
This method unnecessarily complicates the usage of CDHashMap. It had one usage in the current code, for dealing with global declarations. However, this was an entirely artificial use case, as one should properly manage scopes when this option is true (i.e. global-declarations simply disables user-level scoping in the symbol table).
It also simplifies the symbol table so that it doesn't automatically push a global outermost scope. Instead, this scope is pushed when the logic is declared, so that background symbols are correctly added at level 0.
Fixes #4767.
Andrew Reynolds [Wed, 2 Mar 2022 20:36:36 +0000 (14:36 -0600)]
Fix incorrect assertion in prop engine proofs (#8204)
Leftover from when unsat cores mode was tied to proof mode.
Fixes cvc5/cvc5-projects#462.
Andrew Reynolds [Wed, 2 Mar 2022 18:59:56 +0000 (12:59 -0600)]
Clean usage of options in regressions (#8190)
We now support tester annotations, thus it is best practice not to use check-unsat-cores or check-models explicitly in the regressions.
This changes regressions to not use these options, where these options are either:
removed entirely (the benchmark was fixed in the meantime)
changed to -q (the benchmark succeeds with a warning)
changed to produce- instead of check- if the option on the benchmark is required to ensure a configuration of models/unsat-cores is run. This is done for unsat-cores on sat benchmarks and models on unsat benchmarks.
replaced by DISABLE-TESTER: model.
one spurious regression is deleted, which was identical to another + check-models.
It also makes some fixes to enable more benchmarks succeed with check-models, and adds a warning when fmf-fun is combined with check-model.
Andrew Reynolds [Wed, 2 Mar 2022 18:16:20 +0000 (12:16 -0600)]
Improve error message when not using strings-exp (#8203)
Fixes #6005.
Also improves smt2 printing of sequences so that we print the compliant kinds, which is work towards cvc5/cvc5-wishues#106.
Gereon Kremer [Wed, 2 Mar 2022 17:21:32 +0000 (18:21 +0100)]
Move libpoly <-> CoCoA conversion to new utility (#8199)
This PR factors the conversion between libpoly and CoCoA out of the LazardEvaluation class into a new utility. The goal is to make it reusable for other applications of CoCoA within cvc5, for example to replace the (rather naive) equality substitution utility by a new simplification technique based on CoCoAs Gröbner bases. This PR merely moves code around and should not actually change anything.
Gereon Kremer [Wed, 2 Mar 2022 16:37:03 +0000 (17:37 +0100)]
Refactor rewriting of arithmetic division (#8195)
This PR does minor refactoring of how we rewrite division. Also, it moves some functions around to reconcile the order in header and source file.
Andrew Reynolds [Wed, 2 Mar 2022 15:48:54 +0000 (09:48 -0600)]
Add utility to access how to print floating point (#8141)
This makes the code for printing a floating point based on its BV components accessible as a utility.
This is required for proper printing of FP constants in LFSC.
Andrew Reynolds [Wed, 2 Mar 2022 05:12:08 +0000 (23:12 -0600)]
Make blockModelValues robust to non-closed enumerable types (#8055)
Fixes cvc5/cvc5-projects#420.
Also fixes the trivial case where there is nothing to block, in which case we should add false (via mkOr) not true.
Andrew Reynolds [Wed, 2 Mar 2022 02:38:21 +0000 (20:38 -0600)]
Add regressions for fixed issues (#8202)
Fixes #4463.
Fixes cvc5/cvc5-projects#403.
Gereon Kremer [Wed, 2 Mar 2022 01:27:02 +0000 (02:27 +0100)]
Prune spurious roots in lazard evaluation of coverings solver (#8200)
This PR fixes a subtle issue in the Lazard evaluation used in the coverings solver if --nl-cov-lift=lazard is used.
When isolating real roots (over a partial assignment that contains real algebraic number), the core root solver may find roots that are spurious, i.e., they are not actually roots of the input polynomial. This is due to the way how the multivariate polynomial is "partially evaluated" before calling the univariate real root isolation.
When using the libpoly real root isolation, this is all done internally. For the Lazard evaluation, however, we explicitly call the libpoly real root isolation on a univariate polynomial that already has these spurious roots, hence we need to remove them ourselves.
While debugging this issue, another weird oversight was detected (and fixed): for some reason we expected the vanishing factor (after factoring the defining polynomial when constructing the next field extension) to only have two term. There is no reason for this restriction, and the code below works just fine.
Gereon Kremer [Wed, 2 Mar 2022 00:44:03 +0000 (01:44 +0100)]
Add standard theories to documentation (#8192)
This PR adds the standardized theories to our theories overview.
Andrew Reynolds [Tue, 1 Mar 2022 21:14:16 +0000 (15:14 -0600)]
Fix issue involving dropped purification lemmas for transcendental functions (#8198)
Fixes #4693.
Fixes #8181 (which now times out).
The issue was caused by purification lemmas being dropped, often in incremental mode. This meant that we were replacing sin(t) by sin(k) when checking models, but not having any information about sin(k).
We now are more robust and send the purification lemmas for transcendental functions based on checking whether it is necessary to do so.