* tuple and record support in the compatibility library
* user patterns are now supported in the SMT-LIBv1.2 parser
* SMT-LIB get-model output now is easier to machine-parse: contains (model...)
-* Win32 support via mingw
+* Win32-building support via mingw
* for printing commands as they're invoked from the driver, you now need
verbosity of 3 or higher (e.g. -vvv) instead of verbosity 1 or higher (-v).
This allows tracing the solver's activities without having too much output.
-* multiline support in interactive mode
+* multiline input support in interactive mode
* To make CVC4 quieter in abnormal (e.g., "warning" conditions), you can
use -q. Previously, this would silence all output (including "sat" or
"unsat") as well. Now, single -q silences messages and warnings, and
double -qq silences all output (except on exception or signal).
* Boolean term support in datatypes
+* numerous bug fixes, usability improvements, and build system improvements
--- Morgan Deters <mdeters@cs.nyu.edu> Wed, 20 Mar 2013 20:03:50 -0400
+-- Morgan Deters <mdeters@cs.nyu.edu> Tue, 26 Mar 2013 15:17:52 -0400
AC_CONFIG_FILES([
Makefile.builds
Makefile]
- m4_esyscmd([find contrib src test examples -name Makefile.am | grep -v '^contrib/theoryskel/' | grep -v '^src/prop/cryptominisat/' | sort | sed 's,\.am$,,'])
+ m4_esyscmd([find contrib src test examples -name Makefile.am | grep -v '^contrib/theoryskel/' | sort | sed 's,\.am$,,'])
)
if test $cvc4_has_threads = yes; then
CVC4_CONFIG_FILE_ONLY_IF_CHANGED([doc/libcvc4parser.3])
CVC4_CONFIG_FILE_ONLY_IF_CHANGED([doc/libcvc4compat.3])
-# AC_CONFIG_SUBDIRS([src/prop/cryptominisat])
-
AC_OUTPUT
# Final information to the user
dir="$(dirname "$0")"
-find src \( -name '*.cpp' -o -name '*.h' \) \! -path 'src/prop/minisat/*' \! -path 'src/prop/bvminisat/*' \! -path 'src/prop/cryptominisat/*' \! -path 'src/parser/*/generated/*' |
+find src \( -name '*.cpp' -o -name '*.h' \) \! -path 'src/prop/minisat/*' \! -path 'src/prop/bvminisat/*' \! -path 'src/parser/*/generated/*' |
while read f; do
misspelled_words=`
$dir/extract-strings-and-comments $f |
# the license.)
#
-my $excluded_directories = '^(minisat|bvminisat|cryptominisat|CVS|generated)$';
+my $excluded_directories = '^(minisat|bvminisat|CVS|generated)$';
my $excluded_paths = '^(src/parser/antlr_input_imports.cpp|src/bindings/compat/.*)$';
# Years of copyright for the template. E.g., the string
1\.0 libcvc4:0:0:0 libcvc4parser:0:0:0 libcvc4compat:0:0:0 libcvc4bindings:0:0:0
1\.0\.1-prerelease libcvc4:0:0:0 libcvc4parser:0:0:0 libcvc4compat:0:0:0 libcvc4bindings:0:0:0
1\.1-prerelease libcvc4:0:0:0 libcvc4parser:0:0:0 libcvc4compat:0:0:0 libcvc4bindings:0:0:0
+1\.1 libcvc4:1:0:0 libcvc4parser:1:0:0 libcvc4compat:1:0:0 libcvc4bindings:1:0:0
${typerules}
-#line 46 "${template}"
+#line 49 "${template}"
default:
Debug("getType") << "FAILURE" << std::endl;
switch(n.getKind()) {
${construles}
-#line 69 "${template}"
+#line 72 "${template}"
default:;
}
class CommandExecutorPortfolio : public CommandExecutor {
- // These shall be created/deleted during initalization
+ // These shall be created/deleted during initialization
std::vector<ExprManager*> d_exprMgrs;
const unsigned d_numThreads; // Currently const, but designed so it is
// not too hard to support this changing
* A map of AbsractValues to their actual constants. Only used if
* options::abstractValues() is on.
*/
- theory::SubstitutionMap d_abstractValueMap;
+ SubstitutionMap d_abstractValueMap;
/**
* A mapping of all abstract values (actual value |-> abstract) that
/**
* Return the uinterpreted function symbol corresponding to division-by-zero
- * for this particular bit-wdith
+ * for this particular bit-width
* @param k should be UREM or UDIV
* @param width
*
setLogicInternal();
}
- // finish initalization, creat the prop engine, etc.
+ // finish initialization, create the prop engine, etc.
finishInit();
AlwaysAssert( d_propEngine->getAssertionLevel() == 0,
d_logic.lock();
// may need to force uninterpreted functions to be on for non-linear
- if(((d_logic.isTheoryEnabled(theory::THEORY_ARITH) && !d_logic.isLinear()) ||
- d_logic.isTheoryEnabled(theory::THEORY_BV)) &&
- !d_logic.isTheoryEnabled(theory::THEORY_UF)){
+ if(((d_logic.isTheoryEnabled(THEORY_ARITH) && !d_logic.isLinear()) ||
+ d_logic.isTheoryEnabled(THEORY_BV)) &&
+ !d_logic.isTheoryEnabled(THEORY_UF)){
d_logic = d_logic.getUnlockedCopy();
- d_logic.enableTheory(theory::THEORY_UF);
+ d_logic.enableTheory(THEORY_UF);
d_logic.lock();
}
}
// Non-linear arithmetic does not support models
- if (d_logic.isTheoryEnabled(theory::THEORY_ARITH) &&
+ if (d_logic.isTheoryEnabled(THEORY_ARITH) &&
!d_logic.isLinear()) {
if (options::produceModels()) {
Warning() << "SmtEngine: turning off produce-models because unsupported for nonlinear arith" << endl;
}
}
- //datatypes theory should assign values to all datatypes terms if logic is quantified
- if (d_logic.isQuantified() && d_logic.isTheoryEnabled(theory::THEORY_DATATYPES)) {
+ // datatypes theory should assign values to all datatypes terms if logic is quantified
+ if (d_logic.isQuantified() && d_logic.isTheoryEnabled(THEORY_DATATYPES)) {
if( !options::dtForceAssignment.wasSetByUser() ){
options::dtForceAssignment.set(true);
}
for( SubstitutionMap::iterator pos = d_topLevelSubstitutions.begin(); pos != d_topLevelSubstitutions.end(); ++pos) {
Node n = (*pos).first;
Node v = (*pos).second;
- Trace("model") << "Add substitution : " << n << " " << v << std::endl;
+ Trace("model") << "Add substitution : " << n << " " << v << endl;
m->addSubstitution( n, v );
}
}
// miplib rewrites aren't safe in incremental mode
! options::incrementalSolving() &&
// only useful in arith
- d_smt.d_logic.isTheoryEnabled(theory::THEORY_ARITH) &&
+ d_smt.d_logic.isTheoryEnabled(THEORY_ARITH) &&
// we add new assertions and need this (in practice, this
// restriction only disables miplib processing during
// re-simplification, which we don't expect to be useful anyway)
switch(booleans::BooleanTermConversionMode mode = options::booleanTermConversionMode()) {
case booleans::BOOLEAN_TERM_CONVERT_TO_BITVECTORS:
case booleans::BOOLEAN_TERM_CONVERT_NATIVE:
- if(!d_smt.d_logic.isTheoryEnabled(theory::THEORY_BV)) {
+ if(!d_smt.d_logic.isTheoryEnabled(THEORY_BV)) {
d_smt.d_logic = d_smt.d_logic.getUnlockedCopy();
- d_smt.d_logic.enableTheory(theory::THEORY_BV);
+ d_smt.d_logic.enableTheory(THEORY_BV);
d_smt.d_logic.lock();
}
break;
case booleans::BOOLEAN_TERM_CONVERT_TO_DATATYPES:
- if(!d_smt.d_logic.isTheoryEnabled(theory::THEORY_DATATYPES)) {
+ if(!d_smt.d_logic.isTheoryEnabled(THEORY_DATATYPES)) {
d_smt.d_logic = d_smt.d_logic.getUnlockedCopy();
- d_smt.d_logic.enableTheory(theory::THEORY_DATATYPES);
+ d_smt.d_logic.enableTheory(THEORY_DATATYPES);
d_smt.d_logic.lock();
}
break;
bool InequalityGraph::addInequality(TNode a, TNode b, bool strict, TNode reason) {
- Debug("bv-inequality") << "InequlityGraph::addInequality " << a << " " << b << " strict: " << strict << "\n";
+ Debug("bv-inequality") << "InequalityGraph::addInequality " << a << " " << b << " strict: " << strict << "\n";
TermId id_a = registerTerm(a);
TermId id_b = registerTerm(b);
while (!queue.empty()) {
TermId current = queue.top();
queue.pop();
- Debug("bv-inequality-internal") << "InequalityGraph::processQueue proceessing " << getTermNode(current) << "\n";
+ Debug("bv-inequality-internal") << "InequalityGraph::processQueue processing " << getTermNode(current) << "\n";
BitVector current_value = getValue(current);
*/
virtual void spendResource() throw() {}
- /** Handle user attribute
- * Associates theory t with the attribute attr. Theory t will be
- * notifed whenever an attribute of name attr is set on a node.
- * This can happen through, for example, the SMT LIB v2 language.
- */
- virtual void handleUserAttribute( const char* attr, Theory* t ){}
+ /**
+ * Handle user attribute.
+ * Associates theory t with the attribute attr. Theory t will be
+ * notified whenever an attribute of name attr is set on a node.
+ * This can happen through, for example, the SMT-LIBv2 language.
+ */
+ virtual void handleUserAttribute(const char* attr, Theory* t) {}
};/* class OutputChannel */
class QuantRelevance
{
private:
- /** for computing relavance */
+ /** for computing relevance */
bool d_computeRel;
/** map from quantifiers to symbols they contain */
std::map< Node, std::vector< Node > > d_syms;
std::map< TNode, std::vector< TNode > > d_var_contains;
/** triggers for each operator */
std::map< Node, std::vector< inst::Trigger* > > d_op_triggers;
- /** helper for is intance of */
+ /** helper for is instance of */
bool isUnifiableInstanceOf( Node n1, Node n2, std::map< Node, Node >& subs );
public:
/** compute var contains */
d_subtermsToEvaluate[result] = t.getNumChildren();
for (unsigned i = 0; i < t.getNumChildren(); ++ i) {
if (isConstant(getNodeId(t[i]))) {
- Debug("equality::evaluation") << d_name << "::eq::addTermInternal(" << t << "): evaluatates " << t[i] << std::endl;
+ Debug("equality::evaluation") << d_name << "::eq::addTermInternal(" << t << "): evaluates " << t[i] << std::endl;
subtermEvaluates(result);
}
}
}
void EqualityEngine::mergePredicates(TNode p, TNode q, TNode reason) {
- Debug("equality") << d_name << "::eq::mergePredicats(" << p << "," << q << ")" << std::endl;
+ Debug("equality") << d_name << "::eq::mergePredicates(" << p << "," << q << ")" << std::endl;
assertEqualityInternal(p, q, reason);
propagate();
}
}
/**
- * Returns true if this kind is used for congruencce closure + evaluation of constants.
+ * Returns true if this kind is used for congruence closure + evaluation of constants.
*/
bool isInterpretedFunctionKind(Kind fun) const {
return d_congruenceKindsInterpreted.tst(fun);
struct FunctionApplication {
/** Type of application */
FunctionApplicationType type;
- /** The actuall application elements */
+ /** The actual application elements */
EqualityNodeId a, b;
/** Construct an application */
/**
* Returns the Integer obtained by setting the ith bit of the
* current Integer to 1.
- *
- * @param bit
- *
- * @return
*/
Integer setBit(uint32_t i) const {
mpz_class res = d_value;
+++ /dev/null
-(set-info :source "contrived")
-(set-info :smt-lib-version 2.0)
-(set-info :category "check")
-(set-info :status unsat)
-(set-logic QF_UF)
-(set-info :notes |This benchmark simply checks that SMT-LIB v2 can be parsed.|)
-(set-info :difficulty 0.000)
-(exit)