summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-06-21fixstratRe-062019_expAndres Noetzli
2019-06-21different heuristicAndres Noetzli
2019-06-20Stratify unfolding of regular expressions based on polarityajreynol
2019-06-18 Strings: More aggressive skolem normalization (#2761)Andres Noetzli
This PR makes the skolem normalization in the string solver quite a bit more aggressive by reducing more skolems to prefix and suffix skolems. Experiments show that this PR significantly improves performance on CMU benchmarks.
2019-06-15Use Ubuntu 16.04 on Travis (#3059)Andres Noetzli
Travis has started to switch to Ubuntu 16.04 [0]. We were explicitly specifying 14.04 as the `dist` in our `.travis.yml`. This commit changes that specification to 16.04, updates the Java version, and removes a workaround for an old Travis issue. [0] https://changelog.travis-ci.com/xenial-as-the-default-build-environment-99476
2019-06-13Add lemma for the range of values of str.indexof (#3054)Andres Noetzli
This commit adds a lemma that the value of `str.indexof(x, y, n)` must be between -1 and `str.len(x)`.
2019-06-13 Shorten explanation for strings inference I_Norm_S (#3051)Andrew Reynolds
2019-06-12Fix warning (#3053)Haniel Barbosa
2019-06-12Refactor parser to define fewer tokens for symbols (#2936)Andres Noetzli
2019-06-11Disable dumping regression for non-dumping builds (#3046)Andres Noetzli
`let_shadowing.smt2` uses dumping to test our printing infrastructure. Since some builds do not support dumping, this commit disables that regression for non-dumping builds. Additionally, it enables an error message when trying to dump with a muzzled build and corrects the output of `--show-config` to indicate that muzzled builds cannot dump. Previously, the dumping output of a muzzled build was just silently empty. Most of the changes in `dump.cpp` are due to reformatting.
2019-06-11Fix compilation issue for Java bindings + CLN (#3045)Andres Noetzli
Fixes #3044. When using CLN instead of GMP, SWIG produces different Java files for the CLN classes. The bindings expected the GMP files even when building with CLN, so compilation failed. This commit fixes the issue by changing the list of files depending on whether we build with CLN or GMP.
2019-06-11NA Tangent reverse implication (#3050)Ahmed Irfan
2019-06-11 Minor cleaning of conflict-based instantiation (#2966)Andrew Reynolds
2019-06-11Do not require sygus constructors to be flattened (#3049)Andrew Reynolds
2019-06-11 Fix spurious assertion in get-value (#3052)Andrew Reynolds
2019-06-10Optimization for negative concatenation membership. (#3048)Andrew Reynolds
2019-06-10Optimization for strings normalize disequalities (#3047)Andrew Reynolds
2019-06-05Prevent letification from shadowing variables (#3042)Andres Noetzli
Fixes #3005. When printing nodes, we introduce `let` expressions on the fly. However, when doing that, we have to be careful that we don't shadow existing variables with the same name. When quantifiers are involved, we do not descend into the quantifiers to avoid letifying terms with bound variables that then go out of scope (see #1863). Thus, to avoid shadowing variables appearing in quantifiers, we have to collect all the variables appearing in that term to make sure that the let does not shadow them. In #3005, the issue was caused by a `let` that was introduced outside of a quantifier and then was shadowed in the body of the quantifier by another `let` introduced for that body.
2019-06-05DRAT-Optimization (#2971)Alex Ozdemir
This commit enables DRAT-optimization, which consists of two sub-processes: 1. removing unnecessary instructions from DRAT-proofs and 2. not proving clauses which are not needed by DRAT proofs. These changes have the effect of dramatically shortening some some bit-vector proofs. Specifically, proofs using lemmas in the ER, DRAT, and LRAT formats, since proofs in any of these formats are derived from a (now optimized!) DRAT proof produced by CryptoMiniSat. What follows is a description of the main parts of this PR: ## DRAT Optimization The DRAT-optimization is done by `drat-trim`, which is bundled with `drat2er`. The (new) function `ClausalBitVectorProof::optimizeDratProof` is our interface to the optimization machinery, and most of the new logic in this PR is in that function. ## CNF Representation The ability to not prove unused clauses requires a slight architectural change as well. In particular, we need to be able to describe **which** subset of the original clause set actually needs to be proved. To facilitate this, when the clause set for CryptoMiniSat is first formed it is represented as a (a) map from clause indices to clauses and (b) a list of indices. Then, when the CNF is optimized, we temporarily store a new list of the clauses in the optimized formula. This change in representation requires a number of small tweaks throughout the code. ## Small Fixes to Signatures When we decided to check and accept two different kinds of DRAT, some of our DRAT-checking broke. In particular, when supporting one kind of DRAT, it is okay to `fail` (crash) when a proof fails to check. If you're supporting two kinds of DRAT, crashing in response to the first checker rejecting the proof denies the second checker an opportunity to check the proof. This PR tweaks the signatures slightly (and soundly!) to do something else instead of `fail`ing.
2019-06-05Add support for SWIG 4 (#3041)Andres Noetzli
SWIG 4 seems to change the name for `std::map<CVC4::Expr, CVC4::Expr>` to include the implicit template argument for comparisons. To make the code compatible with both SWIG 4.0.0 and older versions, this commit creates an explicit instance of the template.
2019-06-04Enable proof checking for QF_LRA benchmarks (#2928)Andres Noetzli
Due to issues in the current proof code, this commit also disables proof checking for five QF_LRA benchmarks (see issue #2855).
2019-06-04Add check that result matches benchmark status (#3028)Andres Noetzli
This commit adds a check to make sure that the result of a `(check-sat)` call matches the expected result set via `(set-info :status ...)`. In doing so, it also fixes an issue where CVC4 would crash if asked for the unsat core after setting the status to `unsat` but before calling `(check-sat)` (see regression for concrete example). This happened because CVC4 was storing the expected result and the computed result both in the same variable (the expected result wasn't really being used though). This commit keeps track of the expected result and the computed result in separate variables to fix that issue.
2019-06-03[SMT-COMP] No unconstrained simp for QF_LIA UC (#3039)Andres Noetzli
`--unconstrained-simp` is not compatible with unsat cores.
2019-06-02[SMT-COMP] Increase sequential portfolio times (#3038)Andres Noetzli
This year's timeout is 40min up from 20min last year. This commit scales the timeouts accordingly.
2019-06-02[SMT-COMP 2019] Use lazy BV as backup for QF_UFBV (#3037)Andres Noetzli
We cannot Ackermannize all the QF_UFBV benchmarks due to uninterpreted sorts. This commit adds lazy bit-blasting as a backup strategy.
2019-06-02Enable SymFPU assertions in production (#3036)Andres Noetzli
This commit enables SymFPU assertions in production. The reason for this is that there are some known problems with certain bit-widths, so we prefer to be conservative. The commit also updates the run scripts for SMT-COMP 2019 to use `--fp-exp` since we have those additional checks in place now.
2019-06-02[SMT-COMP 2019] Update run script for unsat cores (#3034)Andres Noetzli
`--unconstrained-simp` is not compatible with unsat cores, so this commit removes it for QF_LRA. `--bitblast=eager` is not compatible with unsat cores for QF_UFBV because the dependencies are not tracked correctly in the Ackermannization preprocessing pass, so the commit changes the script to use the lazy BV solver instead. Strings need some additional options to use the correct theory symbols.
2019-06-02Add check for limit of number of node children (#3035)Andres Noetzli
This commit adds a check that makes sure that we do not try to create nodes with more children than the maxmimum number. This can currently happen when flattening nodes in QF_BV with lots of duplicate children.
2019-06-01Update QF_BV options for SMT-COMP 2019. (#3033)Aina Niemetz
2019-06-01 Require that FMF model basis terms are variables (#3031)Andrew Reynolds
The commit fixes an issue where FMF could theoretically chose interpreted function applications as "model basis terms". This triggered an incorrect model (caught by an AlwaysAssert) when the interpreted function later did not appear in a model and was chosen by FMF to be equal to a wrong value.
2019-06-01Fix rewriter for regular expression consume (#3029)Andrew Reynolds
2019-05-30Quote symbol when printing empty symbol name (#3025)Andres Noetzli
When printing an empty symbol name, which can appear in an SMT2 file as `||`, we were printing the empty string instead of quoting the symbol. This commit fixes the issue and adds a regression test.
2019-05-27Avoid substituting Boolean term variables (#3022)Andres Noetzli
Fixes #3020. Boolean terms that appear in other terms, e.g. a Boolean array index, are replaced by `BOOLEAN_TERM_VARIABLE`s to make sure that they are handled properly in theory combination. When doing this replacement, an equality of the form `(= <Boolean term> <Boolean term variable)` is added to the assertions. The problem was that `Theory::ppAssert()` would derive a substitution when this equality was registered. The commit fixes the problem by not allowing to add substitutions for `BOOLEAN_TERM_VARIABLE`s.
2019-05-21Update to symfpu 0.0.7, fixes RTI 3/5 issue (#3007)Martin
Fixes #2932. fp.roundToIntegral was rounding some very small subnormals up to between 1 and 2, which is A. wrong and B. not idempotent. The corresponding symfpu update fixes this as it was an overflow caused by the unpacked significand not being able to represent an extra significand bits.
2019-05-20[SMT-COMP 2019] Update run scripts to match tracks (#3018)Andres Noetzli
The "Application Track" has been renamed to "Incremental Track" this year, so this commit renames the script accordingly and updates the name of the CVC4 binary that the script calls to be just `cvc4`. The commit also adds an initial script for the model validation track.
2019-05-18FP: Fix regression test and enable SymFPU on Travis. (#3013)Aina Niemetz
2019-05-17Update QF_NIA strategy (#3012)Andrew Reynolds
2019-05-17[SMT-COMP2019] Better strings configuration (#3010)Andres Noetzli
2019-05-17Support for incremental bit-blasting with CaDiCaL (#3006)Andres Noetzli
This commit adds support for eager bit-blasting with CaDiCaL on incremental benchmarks. Since not all CaDiCaL versions support incremental solving, the commit adds a CMake check that checks whether `CaDiCaL::Solver::assume()` exists. Note: The check uses `check_cxx_source_compiles`, which is not very elegant but I could not find a better solution (e.g. `check_cxx_symbol_exists()` does not seem to support methods in classes and `check_struct_has_member()` only seems to support data members).
2019-05-17Fix BV ITE rewrite (#3004)Andres Noetzli
The rewrite `BvIteConstChildren` assumes that `BvIteEqualChildren` has been applied before it runs. However, with nested ITEs, it was possible to violate that assertion. Given `bvite(c1, bvite(c2, 0, 0), bvite(c3, 0, 0))`, `BvIteEqualChildren` would rewrite that term to `bvite(c2, 0, 0)`. The `LinearRewriteStrategy` then ran `BvIteConstChildren` on `bvite(c2, 0, 0)` which complained about the equal children. This commit implements a simple fix that splits the `LinearRewriteStrategy` into two strategies to make sure that if `BvIteEqualChildren` rewrites a node, we drop back to the `Rewriter`. This ensures that the rewrites on the rewritten node are invoked in the correct order.
2019-05-17Add the problematic input from issue 2183 as a regression test (#3008)Martin
Although CVC4's behaviour is actually correct, this is to make things a bit clearer and prevent confusion in the future.
2019-05-15Fix iterators in Java API (#3000)Andres Noetzli
Fixes #2989. SWIG 3 seems to have an issue properly resolving `T::const_iterator::value_type` if that type itself is a `typedef`. This is for example the case in the `UnsatCore` class, which `typedef`s `const_iterator` to `std::vector<Expr>::const_iterator`. As a workaround, this commit changes the `JavaIteratorAdapter` class to take two template parameters, one of which is the `value_type`. The commit also adds a compile-time assertion that `T::const_iterator::value_type` can be converted to `value_type` to avoid nasty surprises. A nice side-effect of this solution is that explicit `typemap`s are not necessary anymore, so they are removed. Additionally, the commit adds a `toString()` method for the Java API of `UnsatCore` and adds examples that show and test the iteration over the unsat core and the statistics. Iterating over `Statistics` now returns instances of `Statistic` instead of `Object[]`, which is a bit cleaner and requires less glue code.
2019-05-15cmake: Install JAR and JNI files for Java bindings. (#3002)Mathias Preiner
Default install paths are: - libcvc4jni.so in /usr/lib/ - CVC4.jar in /usr/share/java/cvc4 Fixes #2990.
2019-05-15 BV: Do not enable abstraction when eager bit-blasting by default. (#3001)Aina Niemetz
2019-05-15Fix model of Boolean vars with eager bit-blaster (#2998)Andres Noetzli
When bit-blasting eagerly, we were not assigning values to the Boolean variables in the `TheoryModel`. With eager bit-blasting, the BV SAT solver gets all (converted) terms, including the Boolean ones, so `EagerBitblaster::collectModelInfo()` is responsible for assigning values to Boolean variables. However, it has only been assigning values to bit-vector variables, which lead to wrong models. This commit fixes the issue by asking the `CnfStream` for the Boolean variables, querying the SAT solver for their value, and assigning them in the `TheoryModel`.
2019-05-15Fix printing of bvurem (#2963)Andrew Reynolds
2019-05-10Disable relational triggers (#2994)Andrew Reynolds
2019-05-09Fixes for relational triggers (#2967)Andrew Reynolds
2019-05-06Add support for re.all (#2980)Andres Noetzli
2019-05-02Simple optimizations to core strings theory. (#2988)Andrew Reynolds
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback