summaryrefslogtreecommitdiff
path: root/test/regress
AgeCommit message (Collapse)Author
2021-04-02Fix case where RE unfolding generates a trivially true lemma (#6267)Andrew Reynolds
An RE unfolding lemma may rewrite to true for tautological RE memberships that our rewriter does not rewrite the membership to true. An example is (str.in_re x (re.* (re.union (str.to_re "A") (str.to_re x))). This PR ensures we are robust to these cases. This fixes benchmarks 3-5 from #6203. Benchmark 3 is added here, 4-5 time out.
2021-04-01Simplify caching of regular expression unfolding (#6262)Andrew Reynolds
This ensures that we always cache regular expressions in a user-dependent manner. Previously, we were erroneously caching in a SAT-dependent way for very rare cases when non-constant regular expressions were used. Since we never dependent on current assertions for the unfolding, there is no need to cache in the SAT context. This fixes the second benchmark from #6203. This PR also improves our traces for checking models in strings.
2021-04-01Add regression for issue 6191 (#6264)Andrew Reynolds
2021-03-30Implement simple tracking of instantiation lemmas (#6077)Andrew Reynolds
We require tracking of instantiation lemmas for quantifier elimination. Recently, this feature was removed in favor of reconstructing instantiations via substitutions. This does not quite work if instantiation lemmas have more complex post-processing, e.g. virtual term substitution. This PR reimplements a much simpler form of instantiation tracking that simply adds instantiation bodies to a vector, per quantified formula. It uses this vector for quantifier elimination. Fixes #5899.
2021-03-24Only consider relevant terms for integer branches (#6181)Gereon Kremer
Linear arithmetic simply tried to branch on the first integer variable that had a non-integral assignment. If it holds stale variables that are not part of the current input, these branches can be emitted and are processed by the solver, but the resulting new assertions will not be considered relevant and thus not added to the theory. As it still triggers a new theory check, linear arithmetic repeats the same procedure and causes an infinite loop. This PR explicitly tracks the currently relevant nodes by storing all preregistered nodes and only allows branching on variables from this set. Fixes #6146.
2021-03-23Removing unused build options and deprecated proof compile flag (#6195)Haniel Barbosa
2021-03-23Replace old sygus term reconstruction algorithm with a new one. (#5779)Abdalrhman Mohamed
This PR replaces the old algorithm for reconstructing sygus terms with a new "proper" implementation.
2021-03-22Guard for non-unique skolems in term formula removal (#6179)Andrew Reynolds
In rare cases, we may reuse skolems for different terms (those that are the same up to purification) due to recent changes in how skolem are generated. This guards for this case in the term formula remover, which avoids assertion failures in cd insert hash map. Fixes #6132.
2021-03-21Simplify strings term registration (#6174)Andrew Reynolds
String terms may enter into the equality engine without appearing in assertions, due to eager context-dependent simplification internal to the equality engine (--strings-eager-eval). In rare cases, we did not catch when a new string constant appeared in the equality engine, meaning it would not be marked as relevant leading to bogus models in incremental mode. This makes it so that proxy variables are stored in a user-context dependent manner, which impacts when terms marked as having a proxy variable are registered. The PR also simplifies our policies for when string terms are registered slightly. Fixes #6072.
2021-03-18Eliminate more uses of SExpr. (#6149)Abdalrhman Mohamed
This PR eliminates all remaining uses of SExpr outside of statistics.
2021-03-16ci: Enable checking of proofs + unsat cores. (#6088)Mathias Preiner
This commit refactors the run_regression.py script and adds options for enabling/disabling checking of proofs and unsat cores. Both options are enabled by default and disabled for each corresponding CI build.
2021-03-16[proof-new] Renaming proof option to be in sync with SMT-LIB (#6154)Haniel Barbosa
2021-03-16[proof-new] Disabling proofs on regressions with known bug (#6151)Haniel Barbosa
This is so that we can use CI in master for proofs.
2021-03-15Fix rewrite for double replace (#6152)Andrew Reynolds
Fixes #6142.
2021-03-15Make nonlinear extension account for relevant term set (#6147)Andrew Reynolds
This fixes a subtle issue with non-linear and theory combination. It currently could use irrelevant terms preregistered to the ExtTheory for its model-based refinement. This means that the non-linear extension could accidentally modify values for terms that are not included in its term set, violating theory combination. In particular, in the minimized example from #5662, (* a k) was a stale term in ExtTheory, and non-linear extension falsely believed that a was a term whose model value could be modified, since moreover a was not a shared term. In reality, a was not a shared term since it only was registered to UF. Fixes #5662.
2021-03-15Letify quantifier bodies independently (#6112)Andrew Reynolds
This fixes a subtle bug with how quantifier bodies are letified. It makes our letification more conservative so that let symbols are never pushed inside quantifier bodies, instead quantifier bodies are letified independently of the context.
2021-03-10Fix extended equality rewrite involving replace. (#6104)Andrew Reynolds
Fixes #6075.
2021-03-10Fix term registration and non-theory-preprocessed terms in substitutions (#6080)Andrew Reynolds
This fixes two issues for preprocessing: (1) The term preregistration visitor was calling preRegister on terms multiple times in a SAT context, which the linear arithmetic solver is sensitive to. (2) It was possible for non-preprocessed terms to appear in assertions if they were on the RHS of substitutions learned by non-clausal simplification, and substituted into assertions post-theory-preprocessing. To fix (1), the SharedTermsVisitor is update to track which theories has preregistered each term, as is done in the PreRegisterVisitor. To fix (2), we no longer apply-subst after theory preprocessing. These two fixes are required to fix #6071. Note: we should performance test this on SMT-LIB.
2021-03-10Add quant elim regression (#6103)Andrew Reynolds
Fixes #5658. This was fixed by recent refactoring to quantifier elimination, adding the regression to close the issue.
2021-03-09Update copyright headers to 2021. (#6081)Aina Niemetz
2021-03-08Fix handling of negation of Boolean bound variables in FMF (#6066)Andrew Reynolds
Fixes #5922. We were not correctly handling when a Boolean bound variable was negated.
2021-03-06Remove SMT-LIB 2.5 and 2.0 support. (#6068)Mathias Preiner
This commit removes parser and printer support for old SMT-LIB standards and also converts all regression tests to 2.6.
2021-03-03Add tuple projection operator (#5904)mudathirmahgoub
This PR adds tuple projection operator to the theory of data types. It Also adds helper functions for selecting elements from a tuple.
2021-02-26Move (optional) rewrite from TrustSubstitutionMap to SubstitutionMap. (#5992)Gereon Kremer
This PR adds optional rewriting to the SubstitutionMap class. Before, only the new TrustSubstitutionMap added optional rewriting, leading to unexpected inconsistencies between the two. In particular, cases exist where the substitution and the rewriting cancel each other (see #5943). This PR moves the optional rewriting from TrustSubstitutionMap into SubstitutionMap. While the former enables it by default, it is disabled by default for the latter and thus does not change current behavior. We now use this new option in an assertion in the non-clausal simplification. Fixes #5943.
2021-02-25Move slow regressions to regress1 (#5999)Andrew Reynolds
Moves regressions taking >4 seconds (summing all configs) in debug to regress1.
2021-02-25Add regression. (#5994)Gereon Kremer
This PR adds the test case from #5187 as a regression. Fixes #5187.
2021-02-24Ensure static-learning adds rewritten assertions. (#5982)Gereon Kremer
The static-learning preprocessing sometimes added non-rewritten assertions, despite being used in a part of the preprocessor that assumes all assertions to be rewritten. This may then break other passes further down, in the case of #5729 the non-clausal simplification which explicitly asserts that assertions are rewritten. This PR rewrites the respective assertion properly in the static-learning pass. Fixes #5729.
2021-02-22(proof-new) Change proof-new option to proof (#5955)Andrew Reynolds
Also moves several proof-specific options to proof_options.
2021-02-22Require length-in-conclusion form for strings inferences (#5953)Andrew Reynolds
Previously, it was optional whether to put length constraints in conclusion for deq string inferences. However, due to optimizations in skolem caching, it is now required to guard these length constraints. It furthermore changes the policy to not ignore the lengths for the registered skolem, since it may be shared elsewhere. Fixes #5940. Notice that proof-new already requires this option to be enabled when proofs are enabled. Hence, this will simplify proof-new when merged.
2021-02-19Fix rewrite for contains over replace (#5924)Andrew Reynolds
Fixes model soundness issue (fixes #5915).
2021-02-11Fix spurious assertion failure in regexp normalization (#5852)Andrew Reynolds
Fixes #5816.
2021-02-10Fix open proof for factoring lemma (#5885)Andrew Reynolds
We need to add to the current proof, regardless of whether we have used the factor skolem previously. Fixes bugs found by @HanielB on SMT-LIB runs.
2021-02-10Simplify method for inferring proxy lemmas in strings (#5789)Andrew Reynolds
This PR simplifies our heuristic for inferring when an explanation for a strings lemma can be minimized based on proxy variable definitions. In particular, we do not turn solved equalities for proxy variables into substitutions. This aspect of the heuristic is incompatible with the new eager solver work, and moreover is buggy since substitutions should not be applied within string terms. The latter was leading the incorrect models on the 2 issues fixed by this PR. Current results on the eager solver on SMT-LIB shows this change has very little performance impact. Fixes #5692, fixes #5610.
2021-02-09[quantifiers] Fix prenex computation (#5879)Haniel Barbosa
Previously our prenex computation could generate quantifiers of the form forall x y y. F, which would lead to an assertion failure in getFreeVariablesScope, as it assumes that no shadowing occurs. This commit makes the prenex computation take a set rather than a vector, thus avoiding duplications of prenexed variables. It also changes mkForall to take a constant vector, since it does not modify the given vector. Fixes #5693
2021-02-08Fix disequality between seq.unit terms (#5880)Andrew Reynolds
This adds a missing inference for disequality between seq.unit terms, which was not handled previously. Fixes #5666.
2021-02-05Do not combine theories if theory engine needs check (#5861)Andrew Reynolds
In rare cases, theory combination would be run when theory engine still needs check. This was limited to cases where the output channel is used but no lemmas were sent (TheoryEngine::needCheck() vs. d_lemmasAdded). This led to problems in the theory of sets, which does not run a full effort check if theory engine needs check (since it knows it will be called to check again). However, running theory combination in these cases is not safe since theory of sets computes information pertaining to the care graph during its full effort check. Running theory combination otherwise would lead to theory of sets using stale data, leading to crashes due to terms not appearing in the equality engine. This fixes #4124 (which appears not to trigger on master anyways currently). This bug has also appeared on my sat relevancy development branch, hence fixing on master.
2021-02-04[proof-new] Catch trivial cycles in SAT proof generation (#5853)Haniel Barbosa
Evaluating the proof infrastructure in SMT-LIB has uncovered a rare case (i.e., not previously in our regressions!!) in which we generate a trivial cycle during SAT proof generation, which can lead to problematic cycles when expanding MACRO_RESOLUTION steps. For example, we can go from l1 v l2 ~l1 v l3 ~l2 v l3 (ok) ------------------------------ l3 in which l3 = l1 v l2, to l1 v l2 ~l1 v l3 ~l2 v l3 (bad) ------------------------------ l3 v l3 --------- l3 This commit now catches the trivial cycle before it's generated.
2021-02-03[proof-new] Fix MACRO_RESOLUTION expansion for singleton clause corner case ↵Haniel Barbosa
(#5850) Evaluating the proof infrastructure in SMT-LIB has uncovered a rare case (i.e., not previously in our regressions!!) in which the resulting clause from crowding literal elimination is a singleton. This commit makes the expansion code robust to that and adds an example of a problematic benchmark as a regression. Also improves a bit tracing and some comments.
2021-02-02(proof-new) Miscellaneous fixes and regressions (#5841)Andrew Reynolds
2021-02-02Remove quantifiers regression from decision folder (#5830)Andrew Reynolds
This is a duplicate of https://github.com/CVC4/CVC4/blob/master/test/regress/regress1/quantifiers/symmetric_unsat_7.smt2 and moreover is slow on proof-new.
2021-02-02[proof-new] Fix bug in expansion of MACRO_RESOLUTION (#5845)Haniel Barbosa
Evaluating the proof infrastructure in SMT-LIB has uncovered a rare case (i.e., not previously in our regressions!!) in which a crowding literal occurs in an OR node that represents a single-literal clause subsequent to the last clause that includes the crowding literal. This was leading to the clause that eliminates the crowding literal not being found. The commit fixes this issue by excluding single-literal clauses from those that can introduce crowding literals (which was already marked as necessary but not properly enforced).
2021-01-30Fix unguarded call to get representative (#5838)Andrew Reynolds
Introduced in 3234db4. Fixes #5837, that benchmark is now unknown. Adds an SMT-LIB benchmark that also crashes.
2021-01-29[proof-new] Connecting new unsat cores (#5834)Haniel Barbosa
Allows one to generate unsat cores from the new proof infrastructure. For new this is controlled by a new option, --check-unsat-cores-new.
2021-01-29Add bag inferences for operators: intersection, duplicate_removal, and empty ↵mudathirmahgoub
bags (#5832) This PR adds inferences for operators: intersection, duplicate_removal, and empty bags during post check. It also fixes a bug in SolverState::getElements
2021-01-28Always theory-preprocess lemmas (#5817)Andrew Reynolds
This PR makes it so that theory-preprocessing is always called on lemmas. It simplifies the proof production in the theory preprocessor accordingly. Additionally, it ensures that our theory-preprocessor is run on lemmas that are generated from term formula removal. Previously, this was not the case and in fact certain lemmas (e.g. literals within witness terms that are not in preprocessed form) would escape and be asserted to TheoryEngine. This was uncovered by a unit test failure, the corresponding regression is added in this PR. It adds a new interface removeItes to PropEngine which is required for the (deprecated) preprocessing pass removeItes. This PR now makes the lemma propery PREPROCESS obsolete. Further simplification is possible after this PR in non-linear arithmetic and quantifiers, where it is not necessary to distinguish 2 caches for preprocessed vs. non-preprocessed lemmas.
2021-01-27(proof-new) Improvements to quantifiers engine and instantiate interfaces ↵Andrew Reynolds
(#5814) This makes printing instantiations done at the SmtEngine level instead of deeply embedded within the Instantiate module. This provides much better flexibility for future uses of instantiations (e.g. how they are minimized in the new proof infrastructure). Note this PR breaks the functionality that instantiations are minimized based on the old unsat cores infrastructure (see the disabled regression). This will be fixed once proof-new is fully merged.
2021-01-26Remove deprecated quantifiers modules (#5820)Andrew Reynolds
2021-01-26Reestablishing support for define-sort (#5810)Haniel Barbosa
Presumable broken since 3ed42d7ab. This extends the API to have a substitute method for Sort that in needed for doing the Sort substitution in the case of define-sort. This fixes issue #5809.
2021-01-25Refactor bags::SolverState (#5783)mudathirmahgoub
Couple of changes: SolverState now keep tracks of elements per bag instead of per type. bags::InferInfo now stores multiple conclusions (conjuncts). BagSolver applies upward/downward closures for bag elements
2021-01-25Ensure uses of ground terms in triggers are preprocessed and registered (#5808)Andrew Reynolds
This ensures ground terms in triggers are preprocessed and registered in the master equality engine. This avoids cases where our E-matching algorithm is incomplete where it should not be. Positive impact (+222-69) on SMT-LIB, 30 second timeout
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback