Andrew Reynolds [Fri, 10 May 2019 15:51:24 +0000 (10:51 -0500)]
Disable relational triggers (#2994)
Andrew Reynolds [Thu, 9 May 2019 14:33:22 +0000 (09:33 -0500)]
Fixes for relational triggers (#2967)
Andres Noetzli [Mon, 6 May 2019 13:05:19 +0000 (06:05 -0700)]
Add support for re.all (#2980)
Andrew Reynolds [Thu, 2 May 2019 13:35:42 +0000 (08:35 -0500)]
Simple optimizations to core strings theory. (#2988)
Andrew Reynolds [Wed, 1 May 2019 17:28:08 +0000 (12:28 -0500)]
Fix re-elim-agg regressions (#2987)
Andrew Reynolds [Wed, 1 May 2019 05:35:14 +0000 (00:35 -0500)]
Use total versions of div/mod in re-elim-agg (#2986)
Andres Noetzli [Tue, 30 Apr 2019 19:32:50 +0000 (12:32 -0700)]
Fix concat-find regexp elimination (#2983)
Andrew Reynolds [Tue, 30 Apr 2019 19:11:16 +0000 (14:11 -0500)]
Remove stoi solve rewrite (#2985)
Andres Noetzli [Tue, 30 Apr 2019 11:12:47 +0000 (04:12 -0700)]
Fix use of APPLY kind in examples (#2984)
Andrew Reynolds [Tue, 30 Apr 2019 01:27:20 +0000 (20:27 -0500)]
Eliminate APPLY kind (#2976)
Andrew Reynolds [Mon, 29 Apr 2019 21:40:31 +0000 (16:40 -0500)]
Optimization for evaluation with unfolding (#2979)
Aina Niemetz [Fri, 26 Apr 2019 01:02:57 +0000 (18:02 -0700)]
New C++ API: Clean up API: mkVar vs mkConst vs mkBoundVar. (#2977)
This cleans up naming of API functions to create first-order constants and variables.
mkVar -> mkConst
mkBoundVar -> mkVar
declareConst is redundant (= mkConst) and thus, in an effort to avoid redundancy, removed.
Note that we want to avoid redundancy in order to reduce code duplication and maintenance
overhead (we do not allow nested API calls, since this is problematic when tracing API calls).
Aina Niemetz [Thu, 25 Apr 2019 03:10:47 +0000 (20:10 -0700)]
Fix compiler warning. (#2975)
Mathias Preiner [Wed, 24 Apr 2019 22:39:24 +0000 (15:39 -0700)]
Do not use __ prefix for header guards. (#2974)
Fixes 2887.
Clark Barrett [Wed, 24 Apr 2019 21:39:08 +0000 (14:39 -0700)]
Dco fix (#2973)
Aina Niemetz [Wed, 24 Apr 2019 18:46:33 +0000 (11:46 -0700)]
README: Remove project leaders, history.
Aina Niemetz [Wed, 24 Apr 2019 18:39:12 +0000 (11:39 -0700)]
CONTRIBUTING: Fix project leaders link.
Alex Ozdemir [Tue, 23 Apr 2019 22:58:57 +0000 (15:58 -0700)]
[BV] An option for SAT proof optimization (#2915)
* [BV] An option for SAT proof optimization
The option doesn't **do** anything yet, but exists.
* CopyPaste Fix: BvOptimizeSatProof documentation
It was the documentation for a different option. Now it has been
updated.
* Fix Typos per Mathias' review.
Co-Authored-By: alex-ozdemir <aozdemir@hmc.edu>
Andrew Reynolds [Tue, 23 Apr 2019 18:40:27 +0000 (13:40 -0500)]
Refactor normal forms in strings (#2897)
Aina Niemetz [Mon, 22 Apr 2019 23:32:25 +0000 (16:32 -0700)]
Add CONTRIBUTING file. (#2968)
Andrew Reynolds [Thu, 18 Apr 2019 19:45:39 +0000 (14:45 -0500)]
Fail fast strategy for propagating instances (#2939)
Andrew Reynolds [Thu, 18 Apr 2019 19:07:49 +0000 (14:07 -0500)]
Less aggressive caching in equality engine when proofs are enabled (#2964)
Andrew Reynolds [Wed, 17 Apr 2019 21:35:51 +0000 (16:35 -0500)]
Cache explanations in the equality engine (#2937)
Andrew Reynolds [Wed, 17 Apr 2019 17:42:11 +0000 (12:42 -0500)]
More use of isClosure (#2959)
Andrew Reynolds [Wed, 17 Apr 2019 15:26:46 +0000 (10:26 -0500)]
Fix extended function decomposition (#2960)
Fixes #2958.
The issue was: we had substr(x,0,2) in R, and the "derivable substitution" modifed this to substr(substr(x,0,2),0,2) in R, since substr(x,0,2) was the representative of x (which is a bad choice, but regardless is legal). Then decomposition inference asked "can i reduce substr(substr(x,0,2),0,2) in R"? It determines substr(substr(x,0,2),0,2) in R rewrites to substr(x,0,2) in R, which is already true. However, substr(x,0,2) in R was what we started with.
The fix makes things much more conservative: we never mark extended functions reduced based on decomposition, since there isnt a strong argument based on an ordering.
Andrew Reynolds [Tue, 16 Apr 2019 20:06:00 +0000 (15:06 -0500)]
Add interface for term enumeration (#2956)
Andres Noetzli [Tue, 16 Apr 2019 19:11:37 +0000 (12:11 -0700)]
Make bv{add,mul,and,or,xor,xnor} left-associative (#2955)
The most recent version of SMT-LIB defines bv{add,mul,and,or,xor,xnor}
[0, 1] as left-associative. CVC4 treats all but bvxnor as having
variable arity anyway but the arity check was too strict when using
`--strict-parsing`. This commit changes the strict parsing check. For
bvxnor, it adds code to the parser that expands an application of bvxnor
into multiple applications of a binary bvxnor if needed.
References:
[0] http://smtlib.cs.uiowa.edu/theories-FixedSizeBitVectors.shtml (bvand,
bvor, bvadd, bvmul)
[1] http://smtlib.cs.uiowa.edu/logics-all.shtml#QF_BV (bvxor, bvxnor)
Andrew Reynolds [Tue, 16 Apr 2019 16:53:45 +0000 (11:53 -0500)]
Stratify enumerative instantiation (#2954)
Andrew Reynolds [Tue, 16 Apr 2019 15:38:35 +0000 (10:38 -0500)]
Minor simplifications to theory quantifiers (#2953)
makaimann [Tue, 16 Apr 2019 00:17:29 +0000 (17:17 -0700)]
Check for rt library in configuration -- support for glibc<2.17 (#2854)
This is a minor fix for systems with glibc version < 2.17. In that case, we need to link with `-lrt` according to the clock_gettime man page.
Andres Noetzli [Mon, 15 Apr 2019 22:03:00 +0000 (15:03 -0700)]
Initial version of run scripts for SMT-COMP 2019 (#2951)
For now, they are just copies of the 2018 version of the scripts.
Haniel Barbosa [Fri, 12 Apr 2019 21:16:33 +0000 (16:16 -0500)]
Referring to prerelease 1.8 (#2943)
Andrew Reynolds [Thu, 11 Apr 2019 18:06:08 +0000 (13:06 -0500)]
Eliminate Boolean ITE within terms, fixes 2947 (#2949)
Haniel Barbosa [Tue, 9 Apr 2019 16:14:31 +0000 (11:14 -0500)]
Removing references to cvc4-bugs@... (#2945)
Haniel Barbosa [Tue, 9 Apr 2019 00:55:50 +0000 (19:55 -0500)]
"prerelease -> release" in INSTALL (#2944)
Aina Niemetz [Tue, 9 Apr 2019 00:11:57 +0000 (17:11 -0700)]
Fix email address of the bugs email list and delete obsolete RELEASE-NOTES.
Haniel Barbosa [Mon, 8 Apr 2019 16:26:58 +0000 (11:26 -0500)]
fix copyright year in configuration file (#2942)
Haniel Barbosa [Fri, 5 Apr 2019 21:02:41 +0000 (16:02 -0500)]
prerelease -> release (#2941)
Andrew Reynolds [Fri, 5 Apr 2019 20:31:20 +0000 (15:31 -0500)]
Fix another corner case of datatypes+PBE (#2938)
Haniel Barbosa [Fri, 5 Apr 2019 19:01:33 +0000 (14:01 -0500)]
fix fp issue (#2940)
Alex Ozdemir [Fri, 5 Apr 2019 17:03:05 +0000 (10:03 -0700)]
SatClauseSetHashFunction (#2916)
* SatClauseHashFunction
Added to the same file as SatLiteralHashFunction.
* clang-format
Thanks Andres!
Haniel Barbosa [Thu, 4 Apr 2019 18:30:27 +0000 (13:30 -0500)]
adding sygus news (#2934)
Haniel Barbosa [Thu, 4 Apr 2019 17:31:21 +0000 (12:31 -0500)]
Ignoring FP benchmarks with "unsafe" sizes unless option (#2931)
Haniel Barbosa [Thu, 4 Apr 2019 02:06:25 +0000 (21:06 -0500)]
Update release notes and lib version (#2933)
Aina Niemetz [Wed, 3 Apr 2019 22:54:55 +0000 (15:54 -0700)]
Update copyright headers.
Aina Niemetz [Wed, 3 Apr 2019 22:53:49 +0000 (15:53 -0700)]
get-authors: Add GitHub user ayveejay -> Andrew V. Jones.
Andrew Reynolds [Wed, 3 Apr 2019 20:53:52 +0000 (15:53 -0500)]
Fix combination of datatypes + strings in PBE (#2930)
Andres Noetzli [Mon, 1 Apr 2019 22:07:05 +0000 (15:07 -0700)]
FP: Fix wrong model due to partial assignment (#2910)
For a simple query `(not (= (fp.isSubnormal x) false))`, we were getting
a wrong model. The issue was that `(sign x)` was not assigned a value
and did not appear in the shared terms. In
`TheoryFp::collectModelInfo()`, however, we generate an expression that
connects the components of `x` to `x`, which contains `(sign x)`. As a
result, the normalization while building a model did not result in a
constant. This commit fixes the issue by marking `(sign x)` (and
`(significand x)`) as assignable. Assignable terms can take any value
while building a model if there is no existing value.
Andres Noetzli [Mon, 1 Apr 2019 21:26:23 +0000 (14:26 -0700)]
Fix RewriteITEBv to ensure rewrite to fixpoint (#2878)
`TheoryBVRewriter::RewriteITEBv()` is currently always returning the
status `REWRITE_DONE`. This can result in a situation where a rewritten
node can be rewritten again (which breaks the contract of our rewriter).
The unit test in this commit illustrates the issue. The commit fixes the
issue by returning `REWRITE_AGAIN` or `REWRITE_AGAIN_FULL` if a node
changed. `REWRITE_AGAIN_FULL` is needed if the resulting node may have a
child that is not a subterm of the original expression.
makaimann [Mon, 1 Apr 2019 20:22:04 +0000 (13:22 -0700)]
Update includes to use cvc4 top-level directory in examples (#2877)
Because the headers are now installed in a `cvc4` directory, the examples need to include from there as well.
Andres Noetzli [Mon, 1 Apr 2019 17:45:40 +0000 (10:45 -0700)]
Move slow string regression to regress3 (#2913)
Andrew Reynolds [Mon, 1 Apr 2019 15:36:38 +0000 (10:36 -0500)]
Modify strategy in sets+cardinality (#2909)
Andrew Reynolds [Fri, 29 Mar 2019 13:38:30 +0000 (08:38 -0500)]
Apply empty splits more aggressively in sets+cardinality (#2907)
Haniel Barbosa [Fri, 29 Mar 2019 05:02:03 +0000 (00:02 -0500)]
removing deprecated rewriting signature / example (#2906)
Andres Noetzli [Fri, 29 Mar 2019 04:02:37 +0000 (21:02 -0700)]
Fix freeing nodes with maxed refcounts (#2903)
Andrew Reynolds [Fri, 29 Mar 2019 03:21:34 +0000 (22:21 -0500)]
Fix issues in cvc parser (#2901)
Haniel Barbosa [Thu, 28 Mar 2019 23:30:50 +0000 (18:30 -0500)]
fix ex_bv.plf (#2905)
Aina Niemetz [Tue, 26 Mar 2019 18:33:55 +0000 (11:33 -0700)]
Update copyright headers.
Aina Niemetz [Tue, 26 Mar 2019 18:11:56 +0000 (11:11 -0700)]
update-copyright: Update to 2019.
Mathias Preiner [Tue, 26 Mar 2019 18:22:21 +0000 (11:22 -0700)]
get-authors: Exclude empty lines.
Andres Noetzli [Tue, 26 Mar 2019 15:28:09 +0000 (08:28 -0700)]
Fix warnings about wrong line numbers (#2899)
Andrew Reynolds [Tue, 26 Mar 2019 15:03:29 +0000 (10:03 -0500)]
Fix a few warnings (#2898)
Mathias Preiner [Tue, 26 Mar 2019 01:19:45 +0000 (18:19 -0700)]
get-authors: Exclude common source code patterns. (#2900)
Exclude lines that #include header files and define namespaces.
Since we use git blame -C -M to determine the current top contributors,
git tries to match all #include and namespace definitions to an original
author, which is not accurate since these lines are usually not
copied over from other files.
Aina Niemetz [Mon, 25 Mar 2019 19:31:59 +0000 (12:31 -0700)]
update-copyright: Fix matching of excluded paths.
Aina Niemetz [Mon, 25 Mar 2019 18:39:17 +0000 (11:39 -0700)]
get-authors: Readd option -C to git blame command.
Andrew Reynolds [Sun, 24 Mar 2019 19:26:25 +0000 (14:26 -0500)]
Split regular expression solver (#2891)
Aina Niemetz [Sun, 24 Mar 2019 18:46:36 +0000 (11:46 -0700)]
New C++ API: Fix include. (#2896)
Aina Niemetz [Sun, 24 Mar 2019 05:58:31 +0000 (22:58 -0700)]
BV: Fix typerules for rotate operators. (#2895)
Andres Noetzli [Sat, 23 Mar 2019 20:30:35 +0000 (13:30 -0700)]
Fix memory leak when using subsolvers (#2893)
ASAN was reporting memory leaks in regression tests that were using
subsolvers. First, I am going to describe the origin of the leaks and
then the solution implemented in this commit.
Recall an `Expr` stores the `NodeManager` that the internal node is
associated with. `Node::toExpr()` converts a `Node` to an `Expr` and
assumes that the active `NodeManager` (returned by
`NodeManager::currentNM()` is the one associated with the node. In
`ExportPrivate::exportInternal()`, when we were exporting a skolem, we
created a skolem in the target `NodeManager` by calling
`NodeManager::mkSkolem()` (`ExprManager`s do not support the creation of
skolems) but then we called `Node::toExpr()` on the resulting skolem
while the origin `NodeManager` was the active `NodeManager`. One of the
issues of having the wrong `NodeManager` in the `Expr` is that when the
`Expr` is destroyed and the internal node's refcount reaches zero in
destructor of `Expr`, then the node value associated with the node is
added to the set of zombie nodes (nodes waiting to be garbage collected
or resurrected) of the wrong `NodeManager`. The problem here is that the
set of zombie nodes uses the node id to hash and compare nodes. Node
ids, however, are only unique within a given `NodeManager`. Thus, if we
have two nodes with the same id from different `NodeManager`s and both
reach refcount zero in the context of the same `NodeManager`, only one
of them will end up in the set of zombies and thus only that one will be
freed.
Using a subsolver realiably triggered this issue.
`ExportPrivate::exportInternal()` stored the `Expr` with the wrong
`NodeManager` in an `ExprManagerMapCollection` which associates
variables in the original `ExprManager` with the variables in the target
`ExprManager`. When we created a subsolver, we created the
`ExprManagerMapCollection` before creating our subsolver, so it was
deleted after the subsolver and so deleting the
`ExprManagerMapCollection` deleted the last reference to `Expr`s holding
skolem nodes associated with the wrong `NodeManager`.
This commit fixes the issue by making sure that the correct
`NodeManager` is in scope when converting the skolem/bound variable
nodes to an `Expr`. It also swaps the creation order of
`ExprManagerMapCollection` and `ExprManager` to make sure that
`ExprManagerMapCollection` is deleted before the `ExprManager` that the
`Expr`s belong to. Additionally, the commit makes it harder to make a
similar mistake by asserting that the `Expr`s in the
`ExprManagerMapCollection` are associated with the expected
`ExprManager`s. Finally, it adds an assertion that tries to identify
such issues by checking whether the list of zombies contains a node with
the same id but located at a different address.
Andres Noetzli [Sat, 23 Mar 2019 00:15:53 +0000 (00:15 +0000)]
Strip non-matching beginning from indexof operator (#2885)
This commit adds a rewrite that strips endpoints from `str.indexof`
operators if they don't overlap with the string that is being searched
for using `stripConstantEndpoints()`. In addition to that, it makes
`stripConstantEndpoints()` slightly more aggressive by allowing it to
drop substring components that have zero overlap with the string that we
are looking at. Finally, the commit fixes the default argument for
`fullRewriter` of `checkEntailContains()` to be true instead of false,
which should allow for more rewriting opportunities.
Andrew Reynolds [Fri, 22 Mar 2019 21:24:05 +0000 (16:24 -0500)]
Revisit strings extended function decomposition (#2892)
Andrew Reynolds [Fri, 22 Mar 2019 20:28:50 +0000 (15:28 -0500)]
Fix instantiation stat for fmf (#2889)
Andrew Reynolds [Fri, 22 Mar 2019 14:01:13 +0000 (09:01 -0500)]
More fixes for PBE with datatypes (#2882)
Haniel Barbosa [Fri, 22 Mar 2019 06:11:06 +0000 (01:11 -0500)]
fix help information on TPTP parsing (#2884)
Andres Noetzli [Fri, 22 Mar 2019 03:48:56 +0000 (03:48 +0000)]
Fix stripConstantEndpoints in strings rewriter (#2883)
`TheoryStringsRewriter::stripConstantEndpoints()` returns the stripped
endpoints in the vectors `nb` and `ne`. These endpoints were not
computed correctly if string literal had to be split. For example:
```
stripConstantEndpoints({ "ABC" }, { "C" }, {}, {}, 1)
```
returned `true` and only "A" for `nb` (instead of "AB") because we
mistakenly used the amount of overlap between "ABC" and "C" (which is
one) for the length of the stripped prefix.
This commit fixes the issue and adds several unit tests.
makaimann [Fri, 22 Mar 2019 01:10:01 +0000 (18:10 -0700)]
Use empty vector instead of false in query with null Expr assumption (#2876)
This solution is less confusing than using a `false` assumption.
Andrew Reynolds [Thu, 21 Mar 2019 19:21:39 +0000 (14:21 -0500)]
Fix bad comparison in RE solver's addMembership (#2880)
Andrew Reynolds [Thu, 21 Mar 2019 18:41:46 +0000 (13:41 -0500)]
Rewrite selectors correctly applied to constructors (#2875)
Andres Noetzli [Thu, 21 Mar 2019 17:21:02 +0000 (17:21 +0000)]
Add more NEWS (#2859)
Andrew Reynolds [Wed, 20 Mar 2019 01:54:40 +0000 (20:54 -0500)]
Sygus abduction feature (#2744)
Andrew Reynolds [Tue, 19 Mar 2019 19:15:24 +0000 (14:15 -0500)]
Make declare-datatype(s) a standard, non-extended command in the Smt2 parser. (#2874)
Andrew Reynolds [Tue, 19 Mar 2019 16:51:11 +0000 (11:51 -0500)]
Fix fairness issue with fast sygus enumerator (#2873)
Aina Niemetz [Mon, 18 Mar 2019 22:58:43 +0000 (15:58 -0700)]
New C++: Remove redundant mkBoundVar function.
Aina Niemetz [Mon, 18 Mar 2019 22:05:00 +0000 (15:05 -0700)]
New C++: Remove redundant mkVar function.
s
Aina Niemetz [Mon, 18 Mar 2019 23:07:03 +0000 (16:07 -0700)]
BitVector: Allow base 10 in constructor. (#2870)
Andres Noetzli [Sat, 16 Mar 2019 06:23:06 +0000 (06:23 +0000)]
Limit --solve-int-as-bv=X to QF_NIA/QF_LIA/QF_IDL (#2868)
Fixes #1715. We do not support the `--solve-int-as-bv=X` preprocessing
pass with logics other than pure QF_NIA/QF_LIA/QF_IDL. This commit adds
a corresponding check and throws an option exception if an incompatible
logic has been set.
Alex Ozdemir [Sat, 16 Mar 2019 01:51:47 +0000 (18:51 -0700)]
Enable CryptoMiniSat-backed BV proofs (#2847)
* Connect the plumbing so that BV proofs are enabled when using
CryptoMiniSat
* Also fixed a bug in CNF-proof generation
* Specifically, CNF proofs broke when proving tautological clauses.
Now they don't.
Haniel Barbosa [Fri, 15 Mar 2019 23:35:43 +0000 (18:35 -0500)]
New beta-reduction for HOL solving (#2869)
Haniel Barbosa [Fri, 15 Mar 2019 22:01:42 +0000 (17:01 -0500)]
Adding capture avoiding substitution (#2867)
Andrew Reynolds [Fri, 15 Mar 2019 02:33:07 +0000 (21:33 -0500)]
Fix non-variable function head elimination in UF. (#2864)
Andrew Reynolds [Thu, 14 Mar 2019 22:51:39 +0000 (17:51 -0500)]
Fix function term set for theory strings compute care graph. (#2862)
Aina Niemetz [Thu, 14 Mar 2019 22:17:31 +0000 (15:17 -0700)]
Improve INSTALL instructions. (#2866)
Andrew Reynolds [Thu, 14 Mar 2019 21:32:25 +0000 (16:32 -0500)]
Use zero slope tangent planes for transcendental functions (#2803)
Andrew Reynolds [Thu, 14 Mar 2019 20:47:48 +0000 (15:47 -0500)]
Properly handle lambdas in relevant domain (#2853)
Andrew Reynolds [Thu, 14 Mar 2019 20:13:55 +0000 (15:13 -0500)]
Add getFreeVariables method to node algorithm (#2852)
Mathias Preiner [Thu, 14 Mar 2019 19:45:49 +0000 (12:45 -0700)]
Disable DCO signing for organization members.
Andrew Reynolds [Thu, 14 Mar 2019 19:06:48 +0000 (14:06 -0500)]
Implement proper semantics for TPTP predicate is_rat. (#2861)
Andrew Reynolds [Thu, 14 Mar 2019 18:36:56 +0000 (13:36 -0500)]
Fix substitution step in ho matching (#2825)
Andrew Reynolds [Thu, 14 Mar 2019 12:46:52 +0000 (07:46 -0500)]
Generalize sygus-rr-verify for fast enumerator (#2829)
makaimann [Thu, 14 Mar 2019 07:08:15 +0000 (00:08 -0700)]
check for null assumption in query and replace with false (#2858)
The default assumption argument in query was a null `Expr`, but the implementation asserted that the assumption is not null:
declaration: https://github.com/CVC4/CVC4/blob/
68174dedcb4bf9d91241585ab1cc876d2fa83d62/src/smt/smt_engine.h#L593
implementation: https://github.com/CVC4/CVC4/blob/
68174dedcb4bf9d91241585ab1cc876d2fa83d62/src/smt/smt_engine.cpp#L3548
The change is to simply check if the assumption is null and replaces it with the `false` expression if it is.
It should be `false` not `true` because it is negated in checkSatisfiability (when it's a query) as seen here: https://github.com/CVC4/CVC4/blob/
68174dedcb4bf9d91241585ab1cc876d2fa83d62/src/smt/smt_engine.cpp#L3607
Note: I couldn't find a clean way to make `false` the default argument of assumption, because the expression manager is non-static.