From: Morgan Deters Date: Mon, 11 Jun 2012 16:28:23 +0000 (+0000) Subject: Merge from quantifiers2-trunkmerge branch. X-Git-Tag: cvc5-1.0.0~8086 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3378e253fcdb34c753407bb16d08929da06b3aaa;p=cvc5.git Merge from quantifiers2-trunkmerge branch. Adds TheoryQuantifiers and TheoryRewriteRules, QuantifiersEngine, and other infrastructure. Adds theory instantiators to many theories. Adds the UF strong solver. --- diff --git a/.gitignore b/.gitignore index e2c448004..bb0f165f3 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ gmon.out stamp-generated generated/ *~ -#*# +\#*\# *.gcov /lcov/ .cvc4_config diff --git a/src/bindings/compat/java/src/cvc3/Embedded.java b/src/bindings/compat/java/src/cvc3/Embedded.java index fdeeef058..c645f2655 100644 --- a/src/bindings/compat/java/src/cvc3/Embedded.java +++ b/src/bindings/compat/java/src/cvc3/Embedded.java @@ -12,8 +12,6 @@ public abstract class Embedded { // load jni c++ library static { - System.loadLibrary("cvc4"); - System.loadLibrary("cvc4parser"); System.loadLibrary("cvc4bindings_java_compat"); /* diff --git a/src/bindings/compat/java/src/cvc3/Expr_impl.cpp b/src/bindings/compat/java/src/cvc3/Expr_impl.cpp index f002109c5..41e96f53e 100644 --- a/src/bindings/compat/java/src/cvc3/Expr_impl.cpp +++ b/src/bindings/compat/java/src/cvc3/Expr_impl.cpp @@ -282,7 +282,7 @@ return expr->arity(); DEFINITION: Java_cvc3_Expr_jniGetKid jobject c Expr expr n int i -return embed_copy(env, (*expr)[ji]); +return embed_copy(env, &((*expr)[ji])); DEFINITION: Java_cvc3_Expr_jniGetKids jobjectArray c Expr expr diff --git a/src/context/cdhashmap.h b/src/context/cdhashmap.h index de21515c7..321a378bd 100644 --- a/src/context/cdhashmap.h +++ b/src/context/cdhashmap.h @@ -1,11 +1,11 @@ /********************* */ -/*! \file cdmap.h +/*! \file cdhashmap.h ** \verbatim ** Original author: mdeters ** Major contributors: none ** Minor contributors (to current version): taking, dejan ** This file is part of the CVC4 prototype. - ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Copyright (c) 2009-2012 The Analysis of Computer Systems Group (ACSys) ** Courant Institute of Mathematical Sciences ** New York University ** See the file COPYING in the top-level source directory for licensing diff --git a/src/expr/kind_template.h b/src/expr/kind_template.h index 74641513b..6313aa30b 100644 --- a/src/expr/kind_template.h +++ b/src/expr/kind_template.h @@ -124,8 +124,6 @@ namespace theory { enum TheoryId { ${theory_enum} - THEORY_QUANTIFIERS, - THEORY_REWRITERULES, THEORY_LAST }; diff --git a/src/expr/mkexpr b/src/expr/mkexpr index 0cae68ed0..e113a1e8f 100755 --- a/src/expr/mkexpr +++ b/src/expr/mkexpr @@ -2,7 +2,7 @@ # # mkexpr # Morgan Deters for CVC4 -# Copyright (c) 2010-2011 The CVC4 Project +# Copyright (c) 2010-2012 The CVC4 Project # # The purpose of this script is to create {expr,expr_manager}.{h,cpp} # from template files and a list of theory kinds. Basically it just @@ -15,7 +15,7 @@ # Output is to standard out. # -copyright=2010-2011 +copyright=2010-2012 filename=`basename "$1" | sed 's,_template,,'` @@ -95,6 +95,12 @@ function rewriter { check_theory_seen } +function instantiator { + # instantiator class header + lineno=${BASH_LINENO[0]} + check_theory_seen +} + function properties { # properties prop* lineno=${BASH_LINENO[0]} diff --git a/src/expr/mkkind b/src/expr/mkkind index abb238f1a..2f361cb63 100755 --- a/src/expr/mkkind +++ b/src/expr/mkkind @@ -2,7 +2,7 @@ # # mkkind # Morgan Deters for CVC4 -# Copyright (c) 2010-2011 The CVC4 Project +# Copyright (c) 2010-2012 The CVC4 Project # # The purpose of this script is to create kind.h (and also # type_properties.h) from a template and a list of theory kinds. @@ -14,7 +14,7 @@ # Output is to standard out. # -copyright=2010-2011 +copyright=2010-2012 filename=`basename "$1" | sed 's,_template,,'` @@ -105,6 +105,12 @@ function theory { " } +function instantiator { + # instantiator class header + lineno=${BASH_LINENO[0]} + check_theory_seen +} + function properties { # rewriter class header lineno=${BASH_LINENO[0]} diff --git a/src/expr/mkmetakind b/src/expr/mkmetakind index d84691e14..2e94e41be 100755 --- a/src/expr/mkmetakind +++ b/src/expr/mkmetakind @@ -2,7 +2,7 @@ # # mkmetakind # Morgan Deters for CVC4 -# Copyright (c) 2010-2011 The CVC4 Project +# Copyright (c) 2010-2012 The CVC4 Project # # The purpose of this script is to create metakind.h from a template # and a list of theory kinds. @@ -17,7 +17,7 @@ # Output is to standard out. # -copyright=2010-2011 +copyright=2010-2012 cat < class NodeTemplate { - - // for hash_maps, hash_sets.. - template - struct HashFunction { - size_t operator()(CVC4::NodeTemplate node) const { - return (size_t) node.getId(); - } - };/* struct HashFunction */ - - typedef HashFunction TNodeHashFunction; - /** * The NodeValue has access to the private constructors, so that the * iterators can can create new nodes. @@ -233,7 +230,7 @@ class NodeTemplate { Assert( d_nv->d_rc > 0, "TNode pointing to an expired NodeValue" ); } } - +public: /** * Cache-aware, recursive version of substitute() used by the public * member function with a similar signature. @@ -904,19 +901,12 @@ inline std::ostream& operator<<(std::ostream& out, TNode n) { namespace CVC4 { -// for hash_maps, hash_sets.. -struct NodeHashFunction { - size_t operator()(CVC4::Node node) const { - return (size_t) node.getId(); - } -};/* struct NodeHashFunction */ - -// for hash_maps, hash_sets.. -struct TNodeHashFunction { - size_t operator()(CVC4::TNode node) const { - return (size_t) node.getId(); - } -};/* struct TNodeHashFunction */ +inline size_t NodeHashFunction::operator()(Node node) const { + return node.getId(); +} +inline size_t TNodeHashFunction::operator()(TNode node) const { + return node.getId(); +} struct TNodePairHashFunction { size_t operator()(const std::pair& pair ) const { diff --git a/src/expr/node_manager.h b/src/expr/node_manager.h index 00fe6baa8..e763a1f10 100644 --- a/src/expr/node_manager.h +++ b/src/expr/node_manager.h @@ -362,6 +362,9 @@ public: /** Create a skolem constant with the given type. */ Node mkSkolem(const TypeNode& type); + /** Create a instantiation constant with the given type. */ + Node mkInstConstant(const TypeNode& type); + /** * Create a constant of type T. It will have the appropriate * CONST_* kind defined for T. @@ -579,6 +582,15 @@ public: /** Get the (singleton) type for sorts. */ inline TypeNode kindType(); + /** Get the bound var list type. */ + inline TypeNode boundVarListType(); + + /** Get the instantiation pattern type. */ + inline TypeNode instPatternType(); + + /** Get the instantiation pattern type. */ + inline TypeNode instPatternListType(); + /** * Get the (singleton) type for builtin operators (that is, the type * of the Node returned from Node::getOperator() when the operator @@ -897,6 +909,21 @@ inline TypeNode NodeManager::kindType() { return TypeNode(mkTypeConst(KIND_TYPE)); } +/** Get the bound var list type. */ +inline TypeNode NodeManager::boundVarListType(){ + return TypeNode(mkTypeConst(BOUND_VAR_LIST_TYPE)); +} + +/** Get the instantiation pattern type. */ +inline TypeNode NodeManager::instPatternType(){ + return TypeNode(mkTypeConst(INST_PATTERN_TYPE)); +} + +/** Get the instantiation pattern type. */ +inline TypeNode NodeManager::instPatternListType(){ + return TypeNode(mkTypeConst(INST_PATTERN_LIST_TYPE)); +} + /** Get the (singleton) type for builtin operators. */ inline TypeNode NodeManager::builtinOperatorType() { return TypeNode(mkTypeConst(BUILTIN_OPERATOR_TYPE)); @@ -1366,6 +1393,13 @@ inline Node NodeManager::mkSkolem(const TypeNode& type) { return n; } +inline Node NodeManager::mkInstConstant(const TypeNode& type) { + Node n = NodeBuilder<0>(this, kind::INST_CONSTANT); + n.setAttribute(TypeAttr(), type); + n.setAttribute(TypeCheckedAttr(), true); + return n; +} + template Node NodeManager::mkConst(const T& val) { return mkConstInternal(val); diff --git a/src/parser/cvc/Cvc.g b/src/parser/cvc/Cvc.g index 1f0e6b890..2988ae4ef 100644 --- a/src/parser/cvc/Cvc.g +++ b/src/parser/cvc/Cvc.g @@ -1066,13 +1066,13 @@ restrictedTypePossiblyFunctionLHS[CVC4::Type& t, PARSER_STATE->isDeclared(id, SYM_SORT)) { Debug("parser-param") << "param: getSort " << id << " " << types.size() << " " << PARSER_STATE->getArity( id ) << " " << PARSER_STATE->isDeclared(id, SYM_SORT) << std::endl; - if( types.size()>0 ){ + if(types.size() > 0) { t = PARSER_STATE->getSort(id, types); }else{ t = PARSER_STATE->getSort(id); } } else { - if( types.empty() ){ + if(types.empty()) { t = PARSER_STATE->mkUnresolvedType(id); Debug("parser-param") << "param: make unres type " << id << std::endl; }else{ @@ -1236,22 +1236,36 @@ prefixFormula[CVC4::Expr& f] std::vector ids; std::vector terms; std::vector types; + std::vector bvs; Type t; + Kind k; + Expr ipl; } /* quantifiers */ - : FORALL_TOK { PARSER_STATE->pushScope(); } LPAREN - boundVarDecl[ids,t] (COMMA boundVarDecl[ids,t])* RPAREN - COLON instantiationPatterns? formula[f] - { PARSER_STATE->popScope(); - UNSUPPORTED("quantifiers not supported yet"); - f = EXPR_MANAGER->mkVar(EXPR_MANAGER->booleanType()); + : ( FORALL_TOK { k = kind::FORALL; } | EXISTS_TOK { k = kind::EXISTS; } ) + { PARSER_STATE->pushScope(); } LPAREN + boundVarDecl[ids,t] + { for(std::vector::const_iterator i = ids.begin(); i != ids.end(); ++i) { + bvs.push_back(PARSER_STATE->mkVar(*i, t)); + } + ids.clear(); } - | EXISTS_TOK { PARSER_STATE->pushScope(); } LPAREN - boundVarDecl[ids,t] (COMMA boundVarDecl[ids,t])* RPAREN - COLON instantiationPatterns? formula[f] + ( COMMA boundVarDecl[ids,t] + { + for(std::vector::const_iterator i = ids.begin(); i != ids.end(); ++i) { + bvs.push_back(PARSER_STATE->mkVar(*i, t)); + } + ids.clear(); + } + )* RPAREN { + terms.push_back( EXPR_MANAGER->mkExpr( kind::BOUND_VAR_LIST, bvs ) ); } + COLON instantiationPatterns[ipl]? formula[f] { PARSER_STATE->popScope(); - UNSUPPORTED("quantifiers not supported yet"); - f = EXPR_MANAGER->mkVar(EXPR_MANAGER->booleanType()); + terms.push_back(f); + if(! ipl.isNull()) { + terms.push_back(ipl); + } + f = MK_EXPR(k, terms); } /* lets: letDecl defines the variables and functionss, we just @@ -1283,11 +1297,20 @@ prefixFormula[CVC4::Expr& f] } ; -instantiationPatterns +instantiationPatterns[ CVC4::Expr& expr ] @init { + std::vector args; Expr f; + std::vector patterns; } - : ( PATTERN_TOK LPAREN formula[f] (COMMA formula[f])* RPAREN COLON )+ + : ( PATTERN_TOK LPAREN formula[f] { args.push_back( f ); } (COMMA formula[f] { args.push_back( f ); } )* RPAREN COLON + { patterns.push_back( EXPR_MANAGER->mkExpr( kind::INST_PATTERN, args ) ); + args.clear(); + } )+ + { if(! patterns.empty()) { + expr = EXPR_MANAGER->mkExpr( kind::INST_PATTERN_LIST, patterns ); + } + } ; /** @@ -1417,7 +1440,7 @@ tupleStore[CVC4::Expr& f] Expr f2; } : k=numeral ASSIGN_TOK uminusTerm[f2] - { + { Type t = f.getType(); if(! t.isDatatype()) { PARSER_STATE->parseError("tuple-update applied to non-tuple"); @@ -1456,7 +1479,7 @@ recordStore[CVC4::Expr& f] Expr f2; } : identifier[id,CHECK_NONE,SYM_VARIABLE] ASSIGN_TOK uminusTerm[f2] - { + { Type t = f.getType(); if(! t.isDatatype()) { PARSER_STATE->parseError("record-update applied to non-record"); diff --git a/src/parser/smt/Smt.g b/src/parser/smt/Smt.g index 6dd4e78f3..568f3bb92 100644 --- a/src/parser/smt/Smt.g +++ b/src/parser/smt/Smt.g @@ -244,6 +244,19 @@ annotatedFormula[CVC4::Expr& expr] } } + | /* A quantifier */ + LPAREN_TOK + ( FORALL_TOK { kind = kind::FORALL; } | EXISTS_TOK { kind = kind::EXISTS; } ) + { PARSER_STATE->pushScope(); } + ( LPAREN_TOK let_identifier[name,CHECK_NONE] t=sortSymbol RPAREN_TOK + { args.push_back(PARSER_STATE->mkVar(name, t)); } + )+ + annotatedFormula[expr] RPAREN_TOK + { args.push_back(expr); + expr = MK_EXPR(kind, args); + PARSER_STATE->popScope(); + } + | /* A non-built-in function application */ // Semantic predicate not necessary if parenthesized subexpressions diff --git a/src/parser/smt/smt.cpp b/src/parser/smt/smt.cpp index c3b81655c..4d3c1d086 100644 --- a/src/parser/smt/smt.cpp +++ b/src/parser/smt/smt.cpp @@ -29,6 +29,10 @@ namespace parser { std::hash_map Smt::newLogicMap() { std::hash_map logicMap; + logicMap["AUFLIA"] = AUFLIA; + logicMap["AUFLIRA"] = AUFLIRA; + logicMap["AUFNIRA"] = AUFNIRA; + logicMap["LRA"] = LRA; logicMap["QF_AX"] = QF_AX; logicMap["QF_BV"] = QF_BV; logicMap["QF_IDL"] = QF_IDL; @@ -54,6 +58,9 @@ std::hash_map Smt::newL logicMap["QF_UFNIRA"] = QF_UFNIRA; logicMap["QF_AUFLIA"] = QF_AUFLIA; logicMap["QF_AUFLIRA"] = QF_AUFLIRA; + logicMap["UFNIA"] = UFNIA; + logicMap["UFNIRA"] = UFNIRA; + logicMap["UFLRA"] = UFLRA; logicMap["QF_ALL_SUPPORTED"] = QF_ALL_SUPPORTED; logicMap["ALL_SUPPORTED"] = ALL_SUPPORTED; return logicMap; @@ -109,6 +116,22 @@ void Smt::addTheory(Theory theory) { break; } + case THEORY_BITVECTOR_ARRAYS_EX: { + Unimplemented("Cannot yet handle SMT-LIBv1 bitvector arrays (i.e., the BitVector_ArraysEx theory)"); + //addOperator(kind::SELECT); + //addOperator(kind::STORE); + break; + } + + case THEORY_INT_INT_REAL_ARRAY_ARRAYS_EX: { + defineType("Array1", getExprManager()->mkArrayType(getSort("Int"), getSort("Real"))); + defineType("Array2", getExprManager()->mkArrayType(getSort("Int"), getSort("Array1"))); + addOperator(kind::SELECT); + addOperator(kind::STORE); + break; + } + + case THEORY_INT_ARRAYS: case THEORY_INT_ARRAYS_EX: { defineType("Array", getExprManager()->mkArrayType(getExprManager()->integerType(), getExprManager()->integerType())); @@ -140,6 +163,9 @@ void Smt::addTheory(Theory theory) { case THEORY_BITVECTORS: break; + case THEORY_QUANTIFIERS: + break; + default: Unhandled(theory); } @@ -244,13 +270,14 @@ void Smt::setLogic(const std::string& name) { break; case QF_AUFLIRA: - addTheory(THEORY_ARRAYS_EX); + addTheory(THEORY_INT_INT_REAL_ARRAY_ARRAYS_EX); addUf(); addTheory(THEORY_INTS); addTheory(THEORY_REALS); break; case ALL_SUPPORTED: + addTheory(THEORY_QUANTIFIERS); /* fall through */ case QF_ALL_SUPPORTED: addTheory(THEORY_ARRAYS_EX); @@ -261,14 +288,41 @@ void Smt::setLogic(const std::string& name) { break; case AUFLIA: + addUf(); + addTheory(THEORY_INTS); + addTheory(THEORY_INT_ARRAYS_EX); + addTheory(THEORY_QUANTIFIERS); + break; + case AUFLIRA: case AUFNIRA: + addUf(); + addTheory(THEORY_INTS); + addTheory(THEORY_REALS); + addTheory(THEORY_INT_INT_REAL_ARRAY_ARRAYS_EX); + addTheory(THEORY_QUANTIFIERS); + break; + case LRA: - case UFLRA: case UFNIA: - Unhandled(name); + addUf(); + addTheory(THEORY_INTS); + addTheory(THEORY_QUANTIFIERS); + break; + case UFNIRA: + addUf(); + addTheory(THEORY_INTS); + addTheory(THEORY_REALS); + addTheory(THEORY_QUANTIFIERS); + break; + + case UFLRA: + addUf(); + addTheory(THEORY_REALS); + addTheory(THEORY_QUANTIFIERS); + break; } -} +}/* Smt::setLogic() */ }/* CVC4::parser namespace */ }/* CVC4 namespace */ diff --git a/src/parser/smt/smt.h b/src/parser/smt/smt.h index d77808930..7b1dfc345 100644 --- a/src/parser/smt/smt.h +++ b/src/parser/smt/smt.h @@ -65,6 +65,7 @@ public: QF_UFNIRA, // nonstandard QF_UFNRA, UFLRA, + UFNIRA, // nonstandard UFNIA, QF_ALL_SUPPORTED, // nonstandard ALL_SUPPORTED // nonstandard @@ -75,7 +76,7 @@ public: THEORY_ARRAYS_EX, THEORY_BITVECTORS, THEORY_BITVECTORS_32, - THEORY_BITVECTORS_ARRAYS_EX, + THEORY_BITVECTOR_ARRAYS_EX, THEORY_EMPTY, THEORY_INTS, THEORY_INT_ARRAYS, @@ -83,6 +84,7 @@ public: THEORY_INT_INT_REAL_ARRAY_ARRAYS_EX, THEORY_REALS, THEORY_REALS_INTS, + THEORY_QUANTIFIERS }; private: diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g index 7a7c7df62..59b6715b9 100644 --- a/src/parser/smt2/Smt2.g +++ b/src/parser/smt2/Smt2.g @@ -136,7 +136,10 @@ using namespace CVC4::parser; * @return the parsed expression, or the Null Expr if we've reached the end of the input */ parseExpr returns [CVC4::parser::smt2::myExpr expr] - : term[expr] +@declarations { + Expr expr2; +} + : term[expr, expr2] | EOF ; @@ -156,7 +159,7 @@ command returns [CVC4::Command* cmd = NULL] @declarations { std::string name; std::vector names; - Expr expr; + Expr expr, expr2; Type t; std::vector terms; std::vector sorts; @@ -258,7 +261,7 @@ command returns [CVC4::Command* cmd = NULL] terms.push_back(PARSER_STATE->mkVar((*i).first, (*i).second)); } } - term[expr] + term[expr, expr2] { PARSER_STATE->popScope(); // declare the name down here (while parsing term, signature // must not be extended with the name itself; no recursion @@ -287,7 +290,7 @@ command returns [CVC4::Command* cmd = NULL] { cmd = new GetAssignmentCommand; } | /* assertion */ ASSERT_TOK { PARSER_STATE->checkThatLogicIsSet(); } - term[expr] + term[expr, expr2] { cmd = new AssertCommand(expr); } | /* checksat */ CHECKSAT_TOK { PARSER_STATE->checkThatLogicIsSet(); } @@ -359,7 +362,7 @@ extendedCommand[CVC4::Command*& cmd] @declarations { std::vector dts; Type t; - Expr e; + Expr e, e2; SExpr sexpr; std::string name; std::vector names; @@ -420,7 +423,7 @@ symbolicExpr[CVC4::SExpr& sexpr] * Matches a term. * @return the expression representing the formula */ -term[CVC4::Expr& expr] +term[CVC4::Expr& expr, CVC4::Expr& expr2] @init { Debug("parser") << "term: " << AntlrInput::tokenText(LT(1)) << std::endl; Kind kind; @@ -428,6 +431,11 @@ term[CVC4::Expr& expr] std::string name; std::vector args; SExpr sexpr; + std::vector< std::pair > sortedVarNames; + Expr f, f2; + std::string attr; + Expr attexpr; + std::vector attexprs; } : /* a built-in operator application */ LPAREN_TOK builtinOp[kind] termList[args,expr] RPAREN_TOK @@ -456,10 +464,45 @@ term[CVC4::Expr& expr] expr = MK_EXPR(kind, args); } } - + | LPAREN_TOK quantOp[kind] + LPAREN_TOK sortedVarList[sortedVarNames] RPAREN_TOK + { + PARSER_STATE->pushScope(); + for(std::vector >::const_iterator i = + sortedVarNames.begin(), iend = sortedVarNames.end(); + i != iend; + ++i) { + args.push_back(PARSER_STATE->mkVar((*i).first, (*i).second)); + } + Expr bvl = MK_EXPR(kind::BOUND_VAR_LIST, args); + args.clear(); + args.push_back(bvl); + } + term[f, f2] RPAREN_TOK + { + PARSER_STATE->popScope(); + switch(f.getKind()) { + case CVC4::kind::RR_REWRITE: + case CVC4::kind::RR_REDUCTION: + case CVC4::kind::RR_DEDUCTION: + if(kind == CVC4::kind::EXISTS) { + PARSER_STATE->parseError("Use Exists instead of Forall for a rewrite rule."); + } + args.push_back(f2); // guards + args.push_back(f); // rule + expr = MK_EXPR(CVC4::kind::REWRITE_RULE, args); + break; + default: + args.push_back(f); + if(! f2.isNull()){ + args.push_back(f2); + } + expr = MK_EXPR(kind, args); + } + } | /* A non-built-in function application */ LPAREN_TOK - functionName[name,CHECK_DECLARED] + functionName[name, CHECK_DECLARED] { PARSER_STATE->checkFunctionLike(name); const bool isDefinedFunction = PARSER_STATE->isDefinedFunction(name); @@ -469,13 +512,13 @@ term[CVC4::Expr& expr] } else { expr = PARSER_STATE->getVariable(name); Type t = expr.getType(); - if( t.isConstructor() ){ + if(t.isConstructor()) { kind = CVC4::kind::APPLY_CONSTRUCTOR; - }else if( t.isSelector() ){ + } else if(t.isSelector()) { kind = CVC4::kind::APPLY_SELECTOR; - }else if( t.isTester() ){ + } else if(t.isTester()) { kind = CVC4::kind::APPLY_TESTER; - }else{ + } else { kind = CVC4::kind::APPLY_UF; } } @@ -494,10 +537,10 @@ term[CVC4::Expr& expr] | /* a let binding */ LPAREN_TOK LET_TOK LPAREN_TOK { PARSER_STATE->pushScope(); } - ( LPAREN_TOK symbol[name,CHECK_UNDECLARED,SYM_VARIABLE] term[expr] RPAREN_TOK + ( LPAREN_TOK symbol[name,CHECK_UNDECLARED,SYM_VARIABLE] term[expr, f2] RPAREN_TOK { PARSER_STATE->defineVar(name,expr); } )+ RPAREN_TOK - term[expr] + term[expr, f2] RPAREN_TOK { PARSER_STATE->popScope(); } @@ -519,26 +562,45 @@ term[CVC4::Expr& expr] } /* attributed expressions */ - | LPAREN_TOK ATTRIBUTE_TOK term[expr] KEYWORD symbolicExpr[sexpr] RPAREN_TOK - { std::string attr = AntlrInput::tokenText($KEYWORD); - if(attr == ":named") { - name = sexpr.getValue(); - // FIXME ensure expr is a closed subterm - // check that sexpr is a fresh function symbol - PARSER_STATE->checkDeclaration(name, CHECK_UNDECLARED, SYM_VARIABLE); - // define it - Expr func = PARSER_STATE->mkFunction(name, expr.getType()); - // bind name to expr with define-fun - Command* c = - new DefineNamedFunctionCommand(name, func, std::vector(), expr); - PARSER_STATE->preemptCommand(c); - } else { - std::stringstream ss; - ss << "Attribute `" << attr << "' not supported"; - PARSER_STATE->parseError(ss.str()); + | LPAREN_TOK ATTRIBUTE_TOK term[expr, f2] + ( attribute[expr, attexpr,attr] + { if(! attexpr.isNull()) { + attexprs.push_back(attexpr); + } } - } + )+ RPAREN_TOK + { + if(attr == ":rewrite-rule") { + Expr guard; + Expr body; + if(expr[1].getKind() == kind::IMPLIES || + expr[1].getKind() == kind::IFF || + expr[1].getKind() == kind::EQUAL) { + guard = expr[0]; + body = expr[1]; + } else { + guard = MK_CONST(bool(true)); + body = expr; + } + expr2 = guard; + args.push_back(body[0]); + args.push_back(body[1]); + if(!f2.isNull()) { + args.push_back(f2); + } + + if ( body.getKind()==kind::IMPLIES ) kind = kind::RR_DEDUCTION; + else if( body.getKind()==kind::IFF ) kind = kind::RR_REDUCTION; + else if( body.getKind()==kind::EQUAL ) kind = kind::RR_REWRITE; + else PARSER_STATE->parseError("Error parsing rewrite rule."); + expr = MK_EXPR( kind, args ); + } else if(! attexprs.empty()) { + if(attexprs[0].getKind() == kind::INST_PATTERN) { + expr2 = MK_EXPR(kind::INST_PATTERN_LIST, attexprs); + } + } + } /* constants */ | INTEGER_LITERAL { expr = MK_CONST( AntlrInput::tokenToInteger($INTEGER_LITERAL) ); } @@ -569,6 +631,46 @@ term[CVC4::Expr& expr] // NOTE: Theory constants go here ; +/** + * Read attribute + */ +attribute[CVC4::Expr& expr,CVC4::Expr& retExpr, std::string& attr] +@init { + SExpr sexpr; + Expr patexpr; + std::vector patexprs; + Expr e2; +} +: KEYWORD + { attr = AntlrInput::tokenText($KEYWORD); } + symbolicExpr[sexpr] + { if(attr == ":named") { + std::string name = sexpr.getValue(); + // FIXME ensure expr is a closed subterm + // check that sexpr is a fresh function symbol + PARSER_STATE->checkDeclaration(name, CHECK_UNDECLARED, SYM_VARIABLE); + // define it + Expr func = PARSER_STATE->mkFunction(name, expr.getType()); + // bind name to expr with define-fun + Command* c = + new DefineNamedFunctionCommand(name, func, std::vector(), expr); + PARSER_STATE->preemptCommand(c); + } else { + std::stringstream ss; + ss << "Attribute `" << attr << "' not supported"; + PARSER_STATE->parseError(ss.str()); + } + } + | ATTRIBUTE_PATTERN_TOK LPAREN_TOK ( term[patexpr, e2] { patexprs.push_back( patexpr ); } )+ RPAREN_TOK + { + attr = std::string(":pattern"); + retExpr = MK_EXPR(kind::INST_PATTERN, patexprs); + } + | ATTRIBUTE_REWRITE_RULE { + attr = std::string(":rewrite-rule"); + } + ; + /** * Matches a bit-vector operator (the ones parametrized by numbers) */ @@ -613,7 +715,10 @@ badIndexedFunctionName /* NOTE: We pass an Expr in here just to avoid allocating a fresh Expr every * time through this rule. */ termList[std::vector& formulas, CVC4::Expr& expr] - : ( term[expr] { formulas.push_back(expr); } )+ +@declarations { + Expr expr2; +} + : ( term[expr, expr2] { formulas.push_back(expr); } )+ ; /** @@ -693,6 +798,14 @@ builtinOp[CVC4::Kind& kind] // NOTE: Theory operators go here ; +quantOp[CVC4::Kind& kind] +@init { + Debug("parser") << "quant: " << AntlrInput::tokenText(LT(1)) << std::endl; +} + : EXISTS_TOK { $kind = CVC4::kind::EXISTS; } + | FORALL_TOK { $kind = CVC4::kind::FORALL; } + ; + /** * Matches a (possibly undeclared) function symbol (returning the string) * @param check what kind of check to do with the symbol @@ -760,12 +873,12 @@ sortSymbol[CVC4::Type& t, CVC4::parser::DeclarationCheck check] std::vector numerals; } : sortName[name,CHECK_NONE] - { - if( check == CHECK_DECLARED || PARSER_STATE->isDeclared(name, SYM_SORT) ){ - t = PARSER_STATE->getSort(name); - }else{ - t = PARSER_STATE->mkUnresolvedType(name); - } + { + if( check == CHECK_DECLARED || PARSER_STATE->isDeclared(name, SYM_SORT) ){ + t = PARSER_STATE->getSort(name); + }else{ + t = PARSER_STATE->mkUnresolvedType(name); + } } | LPAREN_TOK INDEX_TOK symbol[name,CHECK_NONE,SYM_SORT] nonemptyNumeralList[numerals] RPAREN_TOK { @@ -929,6 +1042,10 @@ POP_TOK : 'pop'; DECLARE_DATATYPES_TOK : 'declare-datatypes'; ECHO_TOK : 'echo'; +// attributes +ATTRIBUTE_PATTERN_TOK : ':pattern'; +ATTRIBUTE_REWRITE_RULE : ':rewrite-rule'; + // operators (NOTE: theory symbols go here) AMPERSAND_TOK : '&'; AND_TOK : 'and'; diff --git a/src/parser/smt2/smt2.cpp b/src/parser/smt2/smt2.cpp index 709ba087f..549878e46 100644 --- a/src/parser/smt2/smt2.cpp +++ b/src/parser/smt2/smt2.cpp @@ -86,6 +86,9 @@ void Smt2::addTheory(Theory theory) { case THEORY_BITVECTORS: break; + case THEORY_QUANTIFIERS: + break; + default: Unhandled(theory); } @@ -195,6 +198,7 @@ void Smt2::setLogic(const std::string& name) { break; case Smt::ALL_SUPPORTED: + addTheory(THEORY_QUANTIFIERS); /* fall through */ case Smt::QF_ALL_SUPPORTED: addTheory(THEORY_ARRAYS); @@ -208,11 +212,25 @@ void Smt2::setLogic(const std::string& name) { case Smt::AUFLIRA: case Smt::AUFNIRA: case Smt::LRA: - case Smt::UFLRA: case Smt::UFNIA: - Unhandled(name); + case Smt::UFNIRA: + case Smt::UFLRA: + if(d_logic != Smt::AUFLIA && d_logic != Smt::UFNIA) { + addTheory(THEORY_REALS); + } + if(d_logic != Smt::LRA) { + addOperator(kind::APPLY_UF); + if(d_logic != Smt::UFLRA) { + addTheory(THEORY_INTS); + if(d_logic != Smt::UFNIA && d_logic != Smt::UFNIRA) { + addTheory(THEORY_ARRAYS); + } + } + } + addTheory(THEORY_QUANTIFIERS); + break; } -} +}/* Smt2::setLogic() */ void Smt2::setInfo(const std::string& flag, const SExpr& sexpr) { // TODO: ??? diff --git a/src/parser/smt2/smt2.h b/src/parser/smt2/smt2.h index b71f63558..9d33e3e62 100644 --- a/src/parser/smt2/smt2.h +++ b/src/parser/smt2/smt2.h @@ -41,6 +41,7 @@ public: THEORY_INTS, THEORY_REALS, THEORY_REALS_INTS, + THEORY_QUANTIFIERS, }; private: diff --git a/src/printer/cvc/cvc_printer.cpp b/src/printer/cvc/cvc_printer.cpp index d20ba0354..76c4f0abc 100644 --- a/src/printer/cvc/cvc_printer.cpp +++ b/src/printer/cvc/cvc_printer.cpp @@ -5,7 +5,7 @@ ** Major contributors: none ** Minor contributors (to current version): none ** This file is part of the CVC4 prototype. - ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Copyright (c) 2009-2012 The Analysis of Computer Systems Group (ACSys) ** Courant Institute of Mathematical Sciences ** New York University ** See the file COPYING in the top-level source directory for licensing @@ -253,6 +253,9 @@ void CvcPrinter::toStream(std::ostream& out, TNode n, int depth, bool types, boo case kind::APPLY_UF: toStream(op, n.getOperator(), depth, types, false); break; + case kind::CARDINALITY_CONSTRAINT: + out << "CARDINALITY_CONSTRAINT"; + break; case kind::FUNCTION_TYPE: if (n.getNumChildren() > 1) { @@ -548,6 +551,44 @@ void CvcPrinter::toStream(std::ostream& out, TNode n, int depth, bool types, boo out << ", " << n.getOperator().getConst() << ')'; return; break; + + // Quantifiers + case kind::FORALL: + out << "(FORALL"; + toStream(out, n[0], depth, types, false); + out << " : "; + toStream(out, n[1], depth, types, false); + out << ')'; + // TODO: user patterns? + return; + case kind::EXISTS: + out << "(EXISTS"; + toStream(out, n[0], depth, types, false); + out << " : "; + toStream(out, n[1], depth, types, false); + out << ')'; + // TODO: user patterns? + break; + case kind::INST_CONSTANT: + out << "INST_CONSTANT"; + break; + case kind::BOUND_VAR_LIST: + out << '('; + for(size_t i = 0; i < n.getNumChildren(); ++i) { + if(i > 0) { + out << ", "; + } + toStream(out, n[i], -1, true, false); // ascribe types + } + out << ')'; + return; + case kind::INST_PATTERN: + out << "INST_PATTERN"; + break; + case kind::INST_PATTERN_LIST: + out << "INST_PATTERN_LIST"; + break; + default: Warning() << "Kind printing not implemented for the case of " << n.getKind() << endl; break; @@ -662,12 +703,12 @@ static void toStream(std::ostream& out, const SExpr& sexpr) throw() { } else if(sexpr.isString()) { string s = sexpr.getValue(); // escape backslash and quote - for(string::iterator i = s.begin(); i != s.end(); ++i) { - if(*i == '"') { - s.replace(i, i + 1, "\\\""); + for(size_t i = 0; i < s.size(); ++i) { + if(s[i] == '"') { + s.replace(i, 1, "\\\""); ++i; - } else if(*i == '\\') { - s.replace(i, i + 1, "\\\\"); + } else if(s[i] == '\\') { + s.replace(i, 1, "\\\\"); ++i; } } diff --git a/src/printer/smt2/smt2_printer.cpp b/src/printer/smt2/smt2_printer.cpp index 72ce3804d..ebec37031 100644 --- a/src/printer/smt2/smt2_printer.cpp +++ b/src/printer/smt2/smt2_printer.cpp @@ -281,6 +281,32 @@ void Smt2Printer::toStream(std::ostream& out, TNode n, case kind::APPLY_SELECTOR: break; + // quantifiers + case kind::FORALL: out << "forall "; break; + case kind::EXISTS: out << "exists "; break; + case kind::BOUND_VAR_LIST: + out << '('; + for(TNode::iterator i = n.begin(), + iend = n.end(); + i != iend; ) { + out << '('; + (*i).toStream(out, toDepth < 0 ? toDepth : toDepth - 1, + types, language::output::LANG_SMTLIB_V2); + out << ' '; + (*i).getType().toStream(out, toDepth < 0 ? toDepth : toDepth - 1, + false, language::output::LANG_SMTLIB_V2); + out << ')'; + if(++i != iend) { + out << ' '; + } + } + out << ')'; + return; + case kind::INST_PATTERN: + case kind::INST_PATTERN_LIST: + // TODO user patterns + break; + default: // fall back on however the kind prints itself; this probably // won't be SMT-LIB v2 compliant, but it will be clear from the diff --git a/src/prop/minisat/core/Solver.cc b/src/prop/minisat/core/Solver.cc index a260a8ca1..697ab4853 100644 --- a/src/prop/minisat/core/Solver.cc +++ b/src/prop/minisat/core/Solver.cc @@ -351,7 +351,7 @@ void Solver::cancelUntil(int level) { if(intro_level(x) != -1) {// might be unregistered assigns [x] = l_Undef; vardata[x].trail_index = -1; - if (phase_saving > 1 || (phase_saving == 1) && c > trail_lim.last()) + if ((phase_saving > 1 || (phase_saving == 1) && c > trail_lim.last()) && (polarity[x] & 0x2) == 0) polarity[x] = sign(trail[c]); insertVarOrder(x); } @@ -359,6 +359,7 @@ void Solver::cancelUntil(int level) { qhead = trail_lim[level]; trail.shrink(trail.size() - trail_lim[level]); trail_lim.shrink(trail_lim.size() - level); + flipped.shrink(flipped.size() - level); // Register variables that have not been registered yet int currentLevel = decisionLevel(); @@ -442,7 +443,7 @@ Lit Solver::pickBranchLit() return mkLit(next, (dec_pol == l_True) ); } // If it can't use internal heuristic to do that - return mkLit(next, rnd_pol ? drand(random_seed) < 0.5 : polarity[next]); + return mkLit(next, rnd_pol ? drand(random_seed) < 0.5 : (polarity[next] & 0x1)); } } @@ -1461,7 +1462,7 @@ void Solver::pop() Debug("minisat") << "== unassigning " << l << std::endl; Var x = var(l); assigns [x] = l_Undef; - if (phase_saving >= 1) + if (phase_saving >= 1 && (polarity[x] & 0x2) == 0) polarity[x] = sign(l); insertVarOrder(x); trail_user.pop(); @@ -1489,8 +1490,46 @@ void Solver::renewVar(Lit lit, int level) { Var v = var(lit); vardata[v].intro_level = (level == -1 ? getAssertionLevel() : level); setDecisionVar(v, true); + // explicitly not resetting polarity phase-locking here } +bool Solver::flipDecision() { + Debug("flipdec") << "FLIP: decision level is " << decisionLevel() << std::endl; + if(decisionLevel() == 0) { + Debug("flipdec") << "FLIP: no decisions, returning false" << std::endl; + return false; + } + + // find the level to cancel until + int level = trail_lim.size() - 1; + Debug("flipdec") << "FLIP: looking at level " << level << " dec is " << trail[trail_lim[level]] << " flippable?" << ((polarity[var(trail[trail_lim[level]])] & 0x2) == 0 ? 1 : 0) << " flipped?" << flipped[level] << std::endl; + while(level > 0 && (flipped[level] || /* phase-locked */ (polarity[var(trail[trail_lim[level]])] & 0x2) != 0)) { + --level; + Debug("flipdec") << "FLIP: looking at level " << level << " dec is " << trail[trail_lim[level]] << " flippable?" << ((polarity[var(trail[trail_lim[level]])] & 0x2) == 0 ? 2 : 0) << " flipped?" << flipped[level] << std::endl; + } + if(level < 0) { + Lit l = trail[trail_lim[0]]; + Debug("flipdec") << "FLIP: canceling everything, flipping root decision " << l << std::endl; + cancelUntil(0); + newDecisionLevel(); + Debug("flipdec") << "FLIP: enqueuing " << ~l << std::endl; + uncheckedEnqueue(~l); + flipped[0] = true; + Debug("flipdec") << "FLIP: returning false" << std::endl; + return false; + } + Lit l = trail[trail_lim[level]]; + Debug("flipdec") << "FLIP: canceling to level " << level << ", flipping decision " << l << std::endl; + cancelUntil(level); + newDecisionLevel(); + Debug("flipdec") << "FLIP: enqueuing " << ~l << std::endl; + uncheckedEnqueue(~l); + flipped[level] = true; + Debug("flipdec") << "FLIP: returning true" << std::endl; + return true; +} + + CRef Solver::updateLemmas() { Debug("minisat::lemmas") << "Solver::updateLemmas()" << std::endl; diff --git a/src/prop/minisat/core/Solver.h b/src/prop/minisat/core/Solver.h index e677d7220..fdc9a98b7 100644 --- a/src/prop/minisat/core/Solver.h +++ b/src/prop/minisat/core/Solver.h @@ -54,7 +54,7 @@ class Solver { /** The only two CVC4 entry points to the private solver data */ friend class CVC4::prop::TheoryProxy; - friend class CVC4::SatProof; + friend class CVC4::SatProof; protected: /** The pointer to the proxy that provides interfaces to the SMT engine */ @@ -64,7 +64,7 @@ protected: CVC4::context::Context* context; /** The current assertion level (user) */ - int assertionLevel; + int assertionLevel; /** Variable representing true */ Var varTrue; @@ -77,7 +77,7 @@ public: int getAssertionLevel() const { return assertionLevel; } protected: /** Do we allow incremental solving */ - bool enable_incremental; + bool enable_incremental; /** Literals propagated by lemmas */ vec< vec > lemmas; @@ -89,7 +89,7 @@ protected: bool recheck; /** Shrink 'cs' to contain only clauses below given level */ - void removeClausesAboveLevel(vec& cs, int level); + void removeClausesAboveLevel(vec& cs, int level); /** True if we are currently solving. */ bool minisat_busy; @@ -182,11 +182,13 @@ public: void toDimacs (const char* file, Lit p); void toDimacs (const char* file, Lit p, Lit q); void toDimacs (const char* file, Lit p, Lit q, Lit r); - + // Variable mode: - // + // void setPolarity (Var v, bool b); // Declare which polarity the decision heuristic should use for a variable. Requires mode 'polarity_user'. + void freezePolarity (Var v, bool b); // Declare which polarity the decision heuristic MUST ALWAYS use for a variable. Requires mode 'polarity_user'. void setDecisionVar (Var v, bool b); // Declare if a variable should be eligible for selection in the decision heuristic. + bool flipDecision (); // Backtrack and flip most recent decision // Read state: // @@ -199,6 +201,7 @@ public: int nLearnts () const; // The current number of learnt clauses. int nVars () const; // The current number of variables. int nFreeVars () const; + bool isDecision (Var x) const; // is the given var a decision? // Debugging SMT explanations // @@ -290,8 +293,9 @@ protected: OccLists, WatcherDeleted> watches; // 'watches[lit]' is a list of constraints watching 'lit' (will go there if literal becomes true). vec assigns; // The current assignments. - vec polarity; // The preferred polarity of each variable. + vec polarity; // The preferred polarity of each variable (bit 0) and whether it's locked (bit 1). vec decision; // Declares if a variable is eligible for selection in the decision heuristic. + vec flipped; // Which trail_lim decisions have been flipped in this context. vec trail; // Assignment stack; stores all assigments made in the order they were made. vec trail_lim; // Separator indices for different decision levels in 'trail'. vec trail_user; // Stack of assignments to UNdo on user pop. @@ -423,6 +427,8 @@ inline bool Solver::isPropagated(Var x) const { return vardata[x].reason != CRef inline bool Solver::isPropagatedBy(Var x, const Clause& c) const { return vardata[x].reason != CRef_Undef && vardata[x].reason != CRef_Lazy && ca.lea(vardata[var(c[0])].reason) == &c; } +inline bool Solver::isDecision(Var x) const { Debug("minisat") << "var " << x << " is a decision iff " << (vardata[x].reason == CRef_Undef) << " && " << level(x) << " > 0" << std::endl; return vardata[x].reason == CRef_Undef && level(x) > 0; } + inline int Solver::level (Var x) const { return vardata[x].level; } inline int Solver::intro_level(Var x) const { return vardata[x].intro_level; } @@ -466,7 +472,7 @@ inline bool Solver::addClause (Lit p, bool removable) inline bool Solver::addClause (Lit p, Lit q, bool removable) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); return addClause_(add_tmp, removable); } inline bool Solver::addClause (Lit p, Lit q, Lit r, bool removable) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); add_tmp.push(r); return addClause_(add_tmp, removable); } inline bool Solver::locked (const Clause& c) const { return value(c[0]) == l_True && isPropagatedBy(var(c[0]), c); } -inline void Solver::newDecisionLevel() { trail_lim.push(trail.size()); context->push(); if(Dump.isOn("state")) { Dump("state") << CVC4::PushCommand(); } } +inline void Solver::newDecisionLevel() { trail_lim.push(trail.size()); flipped.push(false); context->push(); if(Dump.isOn("state")) { Dump("state") << CVC4::PushCommand(); } } inline int Solver::decisionLevel () const { return trail_lim.size(); } inline uint32_t Solver::abstractLevel (Var x) const { return 1 << (level(x) & 31); } @@ -481,14 +487,16 @@ inline int Solver::nVars () const { return vardata.size(); } inline int Solver::nFreeVars () const { return (int)dec_vars - (trail_lim.size() == 0 ? trail.size() : trail_lim[0]); } inline bool Solver::properExplanation(Lit l, Lit expl) const { return value(l) == l_True && value(expl) == l_True && trail_index(var(expl)) < trail_index(var(l)); } inline void Solver::setPolarity (Var v, bool b) { polarity[v] = b; } -inline void Solver::setDecisionVar(Var v, bool b) -{ - if ( b && !decision[v]) dec_vars++; - else if (!b && decision[v]) dec_vars--; +inline void Solver::freezePolarity(Var v, bool b) { polarity[v] = int(b) | 0x2; } +inline void Solver::setDecisionVar(Var v, bool b) +{ + if ( b && !decision[v] ) dec_vars++; + else if (!b && decision[v] ) dec_vars--; decision[v] = b; insertVarOrder(v); } + inline void Solver::setConfBudget(int64_t x){ conflict_budget = conflicts + x; } inline void Solver::setPropBudget(int64_t x){ propagation_budget = propagations + x; } inline void Solver::interrupt(){ asynch_interrupt = true; } diff --git a/src/prop/minisat/minisat.cpp b/src/prop/minisat/minisat.cpp index 6b02153c7..6fa698bd0 100644 --- a/src/prop/minisat/minisat.cpp +++ b/src/prop/minisat/minisat.cpp @@ -178,6 +178,22 @@ bool MinisatSatSolver::properExplanation(SatLiteral lit, SatLiteral expl) const return true; } +void MinisatSatSolver::requirePhase(SatLiteral lit) { + Assert(!d_minisat->rnd_pol); + Debug("minisat") << "requirePhase(" << lit << ")" << " " << lit.getSatVariable() << " " << lit.isNegated() << std::endl; + SatVariable v = lit.getSatVariable(); + d_minisat->freezePolarity(v, lit.isNegated()); +} + +bool MinisatSatSolver::flipDecision() { + Debug("minisat") << "flipDecision()" << std::endl; + return d_minisat->flipDecision(); +} + +bool MinisatSatSolver::isDecision(SatVariable decn) const { + return d_minisat->isDecision( decn ); +} + /** Incremental interface */ unsigned MinisatSatSolver::getAssertionLevel() const { diff --git a/src/prop/minisat/minisat.h b/src/prop/minisat/minisat.h index 9171bf232..f87e4ae53 100644 --- a/src/prop/minisat/minisat.h +++ b/src/prop/minisat/minisat.h @@ -84,6 +84,12 @@ public: void renewVar(SatLiteral lit, int level = -1); + void requirePhase(SatLiteral lit); + + bool flipDecision(); + + bool isDecision(SatVariable decn) const; + class Statistics { private: ReferenceStat d_statStarts, d_statDecisions; diff --git a/src/prop/prop_engine.cpp b/src/prop/prop_engine.cpp index 702a530cf..f3904549f 100644 --- a/src/prop/prop_engine.cpp +++ b/src/prop/prop_engine.cpp @@ -126,6 +126,24 @@ void PropEngine::assertLemma(TNode node, bool negated, bool removable) { d_cnfStream->convertAndAssert(node, removable, negated); } +void PropEngine::requirePhase(TNode n, bool phase) { + Debug("prop") << "requirePhase(" << n << ", " << phase << ")" << endl; + + Assert(n.getType().isBoolean()); + SatLiteral lit = d_cnfStream->getLiteral(n); + d_satSolver->requirePhase(phase ? lit : ~lit); +} + +bool PropEngine::flipDecision() { + Debug("prop") << "flipDecision()" << endl; + return d_satSolver->flipDecision(); +} + +bool PropEngine::isDecision(Node lit) const { + Assert(isTranslatedSatLiteral(lit)); + return d_satSolver->isDecision(d_cnfStream->getLiteral(lit).getSatVariable()); +} + void PropEngine::printSatisfyingAssignment(){ const CnfStream::TranslationCache& transCache = d_cnfStream->getTranslationCache(); diff --git a/src/prop/prop_engine.h b/src/prop/prop_engine.h index 603cdb0e6..dcfc5a9df 100644 --- a/src/prop/prop_engine.h +++ b/src/prop/prop_engine.h @@ -193,6 +193,37 @@ public: */ void assertLemma(TNode node, bool negated, bool removable); + /** + * If ever n is decided upon, it must be in the given phase. This + * occurs *globally*, i.e., even if the literal is untranslated by + * user pop and retranslated, it keeps this phase. The associated + * variable will _always_ be phase-locked. + * + * @param n the node in question; must have an associated SAT literal + * @param phase the phase to use + */ + void requirePhase(TNode n, bool phase); + + /** + * Backtracks to and flips the most recent unflipped decision, and + * returns TRUE. If the decision stack is nonempty but all + * decisions have been flipped already, the state is backtracked to + * the root decision, which is re-flipped to the original phase (and + * FALSE is returned). If the decision stack is empty, the state is + * unchanged and FALSE is returned. + * + * @return true if a decision was flipped as requested; false if the + * root decision was reflipped, or if no decisions are on the stack. + */ + bool flipDecision(); + + /** + * Return whether the given literal is a SAT decision. Either phase + * is permitted; that is, if "lit" is a SAT decision, this function + * returns true for both lit and the negation of lit. + */ + bool isDecision(Node lit) const; + /** * Checks the current context for satisfiability. * diff --git a/src/prop/sat_solver.h b/src/prop/sat_solver.h index 2865f2cb5..79e54cac2 100644 --- a/src/prop/sat_solver.h +++ b/src/prop/sat_solver.h @@ -123,6 +123,12 @@ public: virtual bool properExplanation(SatLiteral lit, SatLiteral expl) const = 0; + virtual void requirePhase(SatLiteral lit) = 0; + + virtual bool flipDecision() = 0; + + virtual bool isDecision(SatVariable decn) const = 0; + }; }/* prop namespace */ diff --git a/src/theory/Makefile.am b/src/theory/Makefile.am index 85d6fbdf8..19e7d588a 100644 --- a/src/theory/Makefile.am +++ b/src/theory/Makefile.am @@ -3,7 +3,7 @@ AM_CPPFLAGS = \ -I@srcdir@/../include -I@srcdir@/.. -I@builddir@/.. AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) -SUBDIRS = builtin booleans uf arith arrays bv datatypes +SUBDIRS = builtin booleans uf arith arrays bv datatypes quantifiers rewriterules DIST_SUBDIRS = $(SUBDIRS) example noinst_LTLIBRARIES = libtheory.la @@ -33,10 +33,20 @@ libtheory_la_SOURCES = \ ite_simplifier.h \ ite_simplifier.cpp \ unconstrained_simplifier.h \ - unconstrained_simplifier.cpp + unconstrained_simplifier.cpp \ + quantifiers_engine.h \ + quantifiers_engine.cpp \ + instantiator_default.h \ + instantiator_default.cpp \ + inst_match.h \ + inst_match_impl.h \ + inst_match.cpp \ + trigger.h \ + trigger.cpp nodist_libtheory_la_SOURCES = \ rewriter_tables.h \ + instantiator_tables.cpp \ theory_traits.h libtheory_la_LIBADD = \ @@ -46,21 +56,27 @@ libtheory_la_LIBADD = \ @builddir@/arith/libarith.la \ @builddir@/arrays/libarrays.la \ @builddir@/bv/libbv.la \ - @builddir@/datatypes/libdatatypes.la + @builddir@/datatypes/libdatatypes.la \ + @builddir@/quantifiers/libquantifiers.la \ + @builddir@/rewriterules/librewriterules.la EXTRA_DIST = \ rewriter_tables_template.h \ + instantiator_tables_template.cpp \ theory_traits_template.h \ mktheorytraits \ mkrewriter \ + mkinstantiator \ Makefile.subdirs BUILT_SOURCES = \ rewriter_tables.h \ + instantiator_tables.cpp \ theory_traits.h CLEANFILES = \ rewriter_tables.h \ + instantiator_tables.cpp \ theory_traits.h include @top_srcdir@/src/theory/Makefile.subdirs @@ -73,6 +89,14 @@ rewriter_tables.h: rewriter_tables_template.h mkrewriter @top_builddir@/src/theo `cat @top_builddir@/src/theory/.subdirs` \ > $@) || (rm -f $@ && exit 1) +instantiator_tables.cpp: instantiator_tables_template.cpp mkinstantiator @top_builddir@/src/theory/.subdirs @top_srcdir@/src/theory/*/kinds + $(AM_V_at)chmod +x @srcdir@/mkinstantiator + $(AM_V_at)$(am__mv) $@ $@~ 2>/dev/null || true + $(AM_V_GEN)(@srcdir@/mkinstantiator \ + $< \ + `cat @top_builddir@/src/theory/.subdirs` \ + > $@) || (rm -f $@ && exit 1) + theory_traits.h: theory_traits_template.h mktheorytraits @top_builddir@/src/theory/.subdirs @top_srcdir@/src/theory/*/kinds $(AM_V_at)chmod +x @srcdir@/mktheorytraits $(AM_V_at)$(am__mv) $@ $@~ 2>/dev/null || true diff --git a/src/theory/arith/Makefile.am b/src/theory/arith/Makefile.am index a029bc97b..b1e8855c7 100644 --- a/src/theory/arith/Makefile.am +++ b/src/theory/arith/Makefile.am @@ -36,7 +36,9 @@ libarith_la_SOURCES = \ theory_arith.h \ theory_arith.cpp \ dio_solver.h \ - dio_solver.cpp + dio_solver.cpp \ + theory_arith_instantiator.h \ + theory_arith_instantiator.cpp EXTRA_DIST = \ kinds diff --git a/src/theory/arith/congruence_manager.h b/src/theory/arith/congruence_manager.h index 5f49ab3ab..63a370f9a 100644 --- a/src/theory/arith/congruence_manager.h +++ b/src/theory/arith/congruence_manager.h @@ -73,7 +73,12 @@ private: d_acm.propagate(t1.eqNode(t2)); } } - }; + + void eqNotifyNewClass(TNode t) { } + void eqNotifyPreMerge(TNode t1, TNode t2) { } + void eqNotifyPostMerge(TNode t1, TNode t2) { } + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { } + }; ArithCongruenceNotify d_notify; context::CDList d_keepAlive; diff --git a/src/theory/arith/kinds b/src/theory/arith/kinds index 8ffe68376..c06cbc140 100644 --- a/src/theory/arith/kinds +++ b/src/theory/arith/kinds @@ -6,6 +6,7 @@ theory THEORY_ARITH ::CVC4::theory::arith::TheoryArith "theory/arith/theory_arith.h" typechecker "theory/arith/theory_arith_type_rules.h" +instantiator ::CVC4::theory::arith::InstantiatorTheoryArith "theory/arith/theory_arith_instantiator.h" properties stable-infinite properties check propagate staticLearning presolve notifyRestart diff --git a/src/theory/arith/theory_arith.cpp b/src/theory/arith/theory_arith.cpp index ac9796986..9ff9ceeb9 100644 --- a/src/theory/arith/theory_arith.cpp +++ b/src/theory/arith/theory_arith.cpp @@ -53,8 +53,8 @@ namespace arith { const uint32_t RESET_START = 2; -TheoryArith::TheoryArith(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(THEORY_ARITH, c, u, out, valuation, logicInfo), +TheoryArith::TheoryArith(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_ARITH, c, u, out, valuation, logicInfo, qe), d_hasDoneWorkSinceCut(false), d_learner(d_pbSubstitutions), d_setupLiteralCallback(this), diff --git a/src/theory/arith/theory_arith.h b/src/theory/arith/theory_arith.h index ebc131b60..1f0120387 100644 --- a/src/theory/arith/theory_arith.h +++ b/src/theory/arith/theory_arith.h @@ -53,12 +53,15 @@ namespace CVC4 { namespace theory { namespace arith { +class InstantiatorTheoryArith; + /** * Implementation of QF_LRA. * Based upon: * http://research.microsoft.com/en-us/um/people/leonardo/cav06.pdf */ class TheoryArith : public Theory { + friend class InstantiatorTheoryArith; private: bool rowImplication(ArithVar v, bool upperBound, const DeltaRational& r); @@ -269,7 +272,7 @@ private: DeltaRational getDeltaValue(TNode n); public: - TheoryArith(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo); + TheoryArith(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe); virtual ~TheoryArith(); /** diff --git a/src/theory/arith/theory_arith_instantiator.cpp b/src/theory/arith/theory_arith_instantiator.cpp new file mode 100644 index 000000000..48c8a30ee --- /dev/null +++ b/src/theory/arith/theory_arith_instantiator.cpp @@ -0,0 +1,448 @@ +/********************* */ +/*! \file instantiator_arith_instantiator.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of instantiator_arith_instantiator class + **/ + +#include "theory/arith/theory_arith_instantiator.h" +#include "theory/arith/theory_arith.h" +#include "theory/theory_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::arith; + +#define ARITH_INSTANTIATOR_USE_DELTA +#define ARITH_INSTANTIATOR_USE_MINUS_DELTA +#define ARITH_INSTANTIATOR_STRONG_DELTA_LEMMA + +#define USE_ARITH_INSTANTIATION + +InstStrategySimplex::InstStrategySimplex( InstantiatorTheoryArith* th, QuantifiersEngine* ie ) : + InstStrategy( ie ), d_th( th ), d_counter( 0 ){ + d_negOne = NodeManager::currentNM()->mkConst( Rational(-1) ); +} + +void InstStrategySimplex::processResetInstantiationRound( Theory::Effort effort ){ + d_counter++; +} + +int InstStrategySimplex::process( Node f, Theory::Effort effort, int e, int instLimit ){ + if( e<2 ){ + return STATUS_UNFINISHED; + }else if( e==2 ){ + //Notice() << f << std::endl; + //Notice() << "Num inst rows = " << d_th->d_instRows[f].size() << std::endl; + //Notice() << "Num inst constants = " << d_quantEngine->getNumInstantiationConstants( f ) << std::endl; + Debug("quant-arith-simplex") << "InstStrategySimplex check " << f << ", rows = " << d_th->d_instRows[f].size() << std::endl; + for( int j=0; j<(int)d_th->d_instRows[f].size(); j++ ){ + ArithVar x = d_th->d_instRows[f][j]; + if( !d_th->d_ceTableaux[x].empty() ){ + Debug("quant-arith-simplex") << "Check row " << x << std::endl; + //instantiation row will be A*e + B*t = beta, + // where e is a vector of terms , and t is vector of ground terms. + // Say one term in A*e is coeff*e_i, where e_i is an instantiation constant + // We will construct the term ( beta - B*t)/coeff to use for e_i. + InstMatch m; + //By default, choose the first instantiation constant to be e_i. + Node var = d_th->d_ceTableaux[x].begin()->first; + if( var.getType().isInteger() ){ + std::map< Node, Node >::iterator it = d_th->d_ceTableaux[x].begin(); + //try to find coefficent that is +/- 1 + while( !var.isNull() && !d_th->d_ceTableaux[x][var].isNull() && d_th->d_ceTableaux[x][var]!=d_negOne ){ + ++it; + if( it==d_th->d_ceTableaux[x].end() ){ + var = Node::null(); + }else{ + var = it->first; + } + } + //otherwise, try one that divides all ground term coefficients? DO_THIS + } + if( !var.isNull() ){ + Debug("quant-arith-simplex") << "Instantiate with var " << var << std::endl; + d_th->doInstantiation( f, d_th->d_tableaux_term[x], x, m, var ); + }else{ + Debug("quant-arith-simplex") << "Could not find var." << std::endl; + } + ////choose a new variable based on alternation strategy + //int index = d_counter%(int)d_th->d_ceTableaux[x].size(); + //Node var; + //for( std::map< Node, Node >::iterator it = d_th->d_ceTableaux[x].begin(); it != d_th->d_ceTableaux[x].end(); ++it ){ + // if( index==0 ){ + // var = it->first; + // break; + // } + // index--; + //} + //d_th->doInstantiation( f, d_th->d_tableaux_term[x], x, &m, var ); + } + } + } + return STATUS_UNKNOWN; +} + +//void InstStrategySimplexUfMatch::resetInstantiationRound(){ +// +//} +// +//int InstStrategySimplexUfMatch::process( Node f, int effort, int instLimit ){ +// if( effort<2 ){ +// return STATUS_UNFINISHED; +// }else if( effort==2 ){ +// for( int j=0; j<(int)d_th->d_instRows[f].size(); j++ ){ +// ArithVar x = d_th->d_instRows[f][j]; +// if( !d_th->d_ceTableaux[x].empty() && !d_th->d_tableaux_ce_term[x].empty() ){ +// if( d_tableaux_ce_term_trigger.find( x )==d_tableaux_ce_term_trigger.end() ){ +// std::vector< Node > terms; +// for( std::map< Node, Node >::iterator it = d_th->d_tableaux_ce_term[x].begin(); it != d_th->d_tableaux_ce_term[x].end(); ++it ){ +// terms.push_back( it->first ); +// } +// d_tableaux_ce_term_trigger[x] = new Trigger( d_quantEngine, f, terms ); +// }else{ +// d_tableaux_ce_term_trigger[x]->resetInstantiationRound(); +// } +// Node term; +// bool addedLemma = false; +// while( d_tableaux_ce_term_trigger[x]->getNextMatch() && !addedLemma ){ +// InstMatch* m = d_tableaux_ce_term_trigger[x]->getCurrent(); +// if( m->isComplete( f ) ){ +// if( d_quantEngine->addInstantiation( f, m, true ) ){ +// ++(d_th->d_statistics.d_instantiations_match_pure); +// ++(d_th->d_statistics.d_instantiations); +// addedLemma = true; +// } +// }else{ +// NodeBuilder<> plus_term(kind::PLUS); +// plus_term << d_th->d_tableaux_term[x]; +// //Debug("quant-arith") << "Produced this match for ce_term_tableaux: " << std::endl; +// //m->debugPrint("quant-arith"); +// //Debug("quant-arith") << std::endl; +// std::vector< Node > vars; +// std::vector< Node > matches; +// for( int i=0; igetNumInstantiationConstants( f ); i++ ){ +// Node ic = d_quantEngine->getInstantiationConstant( f, i ); +// if( m->d_map[ ic ]!=Node::null() ){ +// vars.push_back( ic ); +// matches.push_back( m->d_map[ ic ] ); +// } +// } +// Node var; +// //otherwise try to find a variable that is not specified in m +// for( std::map< Node, Node >::iterator it = d_th->d_ceTableaux[x].begin(); it != d_th->d_ceTableaux[x].end(); ++it ){ +// if( m->d_map[ it->first ]!=Node::null() ){ +// plus_term << NodeManager::currentNM()->mkNode( MULT, it->second, d_th->getTableauxValue( m->d_map[ it->first ] ) ); +// }else if( var==Node::null() ){ +// var = it->first; +// } +// } +// for( std::map< Node, Node >::iterator it = d_th->d_tableaux_ce_term[x].begin(); it != d_th->d_tableaux_ce_term[x].end(); ++it ){ +// Node n = it->first; +// //substitute in matches +// n = n.substitute( vars.begin(), vars.end(), matches.begin(), matches.end() ); +// plus_term << NodeManager::currentNM()->mkNode( MULT, it->second, d_th->getTableauxValue( n ) ); +// } +// term = plus_term.getNumChildren()==1 ? plus_term.getChild( 0 ) : plus_term; +// if( var!=Node::null() ){ +// if( d_th->doInstantiation( f, term, x, m, var ) ){ +// addedLemma = true; +// ++(d_th->d_statistics.d_instantiations_match_var); +// } +// }else{ +// if( d_quantEngine->addInstantiation( f, m, true ) ){ +// addedLemma = true; +// ++(d_th->d_statistics.d_instantiations_match_no_var); +// ++(d_th->d_statistics.d_instantiations); +// } +// } +// } +// } +// } +// } +// } +// return STATUS_UNKNOWN; +//} + +InstantiatorTheoryArith::InstantiatorTheoryArith(context::Context* c, QuantifiersEngine* ie, Theory* th) : +Instantiator( c, ie, th ){ + if( Options::current()->cbqi ){ + addInstStrategy( new InstStrategySimplex( this, d_quantEngine ) ); + } +} + +void InstantiatorTheoryArith::preRegisterTerm( Node t ){ + +} + +void InstantiatorTheoryArith::assertNode( Node assertion ){ + Debug("quant-arith-assert") << "InstantiatorTheoryArith::check: " << assertion << std::endl; + d_quantEngine->addTermToDatabase( assertion ); + if( Options::current()->cbqi ){ + if( assertion.hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion.getAttribute(InstConstantAttribute()) ); + }else if( assertion.getKind()==NOT && assertion[0].hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion[0].getAttribute(InstConstantAttribute()) ); + } + } +} + +void InstantiatorTheoryArith::processResetInstantiationRound( Theory::Effort effort ){ + if( Options::current()->cbqi ){ + Debug("quant-arith") << "Setting up simplex for instantiator... " << std::endl; + d_instRows.clear(); + d_tableaux_term.clear(); + d_tableaux.clear(); + d_ceTableaux.clear(); + //search for instantiation rows in simplex tableaux + ArithVarToNodeMap avtnm = ((TheoryArith*)getTheory())->d_arithvarNodeMap.getArithVarToNodeMap(); + for( ArithVarToNodeMap::iterator it = avtnm.begin(); it != avtnm.end(); ++it ){ + ArithVar x = (*it).first; + if( ((TheoryArith*)getTheory())->d_partialModel.hasEitherBound( x ) ){ + Node n = (*it).second; + Node f; + NodeBuilder<> t(kind::PLUS); + if( n.getKind()==PLUS ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + addTermToRow( x, n[i], f, t ); + } + }else{ + addTermToRow( x, n, f, t ); + } + if( f!=Node::null() ){ + d_instRows[f].push_back( x ); + //this theory has constraints from f + Debug("quant-arith") << "Has constraints from " << f << std::endl; + setHasConstraintsFrom( f ); + //set tableaux term + if( t.getNumChildren()==0 ){ + d_tableaux_term[x] = NodeManager::currentNM()->mkConst( Rational(0) ); + }else if( t.getNumChildren()==1 ){ + d_tableaux_term[x] = t.getChild( 0 ); + }else{ + d_tableaux_term[x] = t; + } + } + } + } + //print debug + debugPrint( "quant-arith-debug" ); + } +} + +int InstantiatorTheoryArith::process( Node f, Theory::Effort effort, int e, int instLimit ){ + Debug("quant-arith") << "Arith: Try to solve (" << effort << ") for " << f << "... " << std::endl; + return InstStrategy::STATUS_UNKNOWN; +} + +void InstantiatorTheoryArith::addTermToRow( ArithVar x, Node n, Node& f, NodeBuilder<>& t ){ + if( n.getKind()==MULT ){ + if( n[1].hasAttribute(InstConstantAttribute()) ){ + f = n[1].getAttribute(InstConstantAttribute()); + if( n[1].getKind()==INST_CONSTANT ){ + d_ceTableaux[x][ n[1] ] = n[0]; + }else{ + d_tableaux_ce_term[x][ n[1] ] = n[0]; + } + }else{ + d_tableaux[x][ n[1] ] = n[0]; + t << n; + } + }else{ + if( n.hasAttribute(InstConstantAttribute()) ){ + f = n.getAttribute(InstConstantAttribute()); + if( n.getKind()==INST_CONSTANT ){ + d_ceTableaux[x][ n ] = Node::null(); + }else{ + d_tableaux_ce_term[x][ n ] = NodeManager::currentNM()->mkConst( Rational(1) ); + } + }else{ + d_tableaux[x][ n ] = NodeManager::currentNM()->mkConst( Rational(1) ); + t << n; + } + } +} + +void InstantiatorTheoryArith::debugPrint( const char* c ){ + ArithVarToNodeMap avtnm = ((TheoryArith*)getTheory())->d_arithvarNodeMap.getArithVarToNodeMap(); + for( ArithVarToNodeMap::iterator it = avtnm.begin(); it != avtnm.end(); ++it ){ + ArithVar x = (*it).first; + Node n = (*it).second; + //if( ((TheoryArith*)getTheory())->d_partialModel.hasEitherBound( x ) ){ + Debug(c) << x << " : " << n << ", bounds = "; + if( ((TheoryArith*)getTheory())->d_partialModel.hasLowerBound( x ) ){ + Debug(c) << ((TheoryArith*)getTheory())->d_partialModel.getLowerBound( x ); + }else{ + Debug(c) << "-infty"; + } + Debug(c) << " <= "; + Debug(c) << ((TheoryArith*)getTheory())->d_partialModel.getAssignment( x ); + Debug(c) << " <= "; + if( ((TheoryArith*)getTheory())->d_partialModel.hasUpperBound( x ) ){ + Debug(c) << ((TheoryArith*)getTheory())->d_partialModel.getUpperBound( x ); + }else{ + Debug(c) << "+infty"; + } + Debug(c) << std::endl; + //Debug(c) << " Term = " << d_tableaux_term[x] << std::endl; + //Debug(c) << " "; + //for( std::map< Node, Node >::iterator it2 = d_tableaux[x].begin(); it2 != d_tableaux[x].end(); ++it2 ){ + // Debug(c) << "( " << it2->first << ", " << it2->second << " ) "; + //} + //for( std::map< Node, Node >::iterator it2 = d_ceTableaux[x].begin(); it2 != d_ceTableaux[x].end(); ++it2 ){ + // Debug(c) << "(CE)( " << it2->first << ", " << it2->second << " ) "; + //} + //for( std::map< Node, Node >::iterator it2 = d_tableaux_ce_term[x].begin(); it2 != d_tableaux_ce_term[x].end(); ++it2 ){ + // Debug(c) << "(CE-term)( " << it2->first << ", " << it2->second << " ) "; + //} + //Debug(c) << std::endl; + //} + } + Debug(c) << std::endl; + + for( int q=0; qgetNumQuantifiers(); q++ ){ + Node f = d_quantEngine->getQuantifier( q ); + Debug(c) << f << std::endl; + Debug(c) << " Inst constants: "; + for( int i=0; i<(int)d_quantEngine->getNumInstantiationConstants( f ); i++ ){ + if( i>0 ){ + Debug( c ) << ", "; + } + Debug( c ) << d_quantEngine->getInstantiationConstant( f, i ); + } + Debug(c) << std::endl; + Debug(c) << " Instantiation rows: "; + for( int i=0; i<(int)d_instRows[f].size(); i++ ){ + if( i>0 ){ + Debug(c) << ", "; + } + Debug(c) << d_instRows[f][i]; + } + Debug(c) << std::endl; + } +} + +//say instantiation row x for quantifier f is coeff*var + A*t[e] + term = beta, +// where var is an instantiation constant from f, +// t[e] is a vector of terms containing instantiation constants from f, +// and term is a ground term (c1*t1 + ... + cn*tn). +// We construct the term ( beta - term )/coeff to use as an instantiation for var. +bool InstantiatorTheoryArith::doInstantiation( Node f, Node term, ArithVar x, InstMatch& m, Node var ){ + //first try +delta + if( doInstantiation2( f, term, x, m, var ) ){ + ++(d_statistics.d_instantiations); + return true; + }else{ +#ifdef ARITH_INSTANTIATOR_USE_MINUS_DELTA + //otherwise try -delta + if( doInstantiation2( f, term, x, m, var, true ) ){ + ++(d_statistics.d_instantiations_minus); + ++(d_statistics.d_instantiations); + return true; + }else{ + return false; + } +#else + return false; +#endif + } +} + +bool InstantiatorTheoryArith::doInstantiation2( Node f, Node term, ArithVar x, InstMatch& m, Node var, bool minus_delta ){ + // make term ( beta - term )/coeff + Node beta = getTableauxValue( x, minus_delta ); + Node instVal = NodeManager::currentNM()->mkNode( MINUS, beta, term ); + if( !d_ceTableaux[x][var].isNull() ){ + if( var.getType().isInteger() ){ + Assert( d_ceTableaux[x][var]==NodeManager::currentNM()->mkConst( Rational(-1) ) ); + instVal = NodeManager::currentNM()->mkNode( MULT, d_ceTableaux[x][var], instVal ); + }else{ + Node coeff = NodeManager::currentNM()->mkConst( Rational(1) / d_ceTableaux[x][var].getConst() ); + instVal = NodeManager::currentNM()->mkNode( MULT, coeff, instVal ); + } + } + instVal = Rewriter::rewrite( instVal ); + //use as instantiation value for var + m.d_map[ var ] = instVal; + Debug("quant-arith") << "Add instantiation " << m << std::endl; + return d_quantEngine->addInstantiation( f, m, true ); +} + +Node InstantiatorTheoryArith::getTableauxValue( Node n, bool minus_delta ){ + if( ((TheoryArith*)getTheory())->d_arithvarNodeMap.hasArithVar(n) ){ + ArithVar v = ((TheoryArith*)getTheory())->d_arithvarNodeMap.asArithVar( n ); + return getTableauxValue( v, minus_delta ); + }else{ + return NodeManager::currentNM()->mkConst( Rational(0) ); + } +} + +Node InstantiatorTheoryArith::getTableauxValue( ArithVar v, bool minus_delta ){ + DeltaRational drv = ((TheoryArith*)getTheory())->d_partialModel.getAssignment( v ); + Node val = NodeManager::currentNM()->mkConst( drv.getNoninfinitesimalPart() ); +#ifdef ARITH_INSTANTIATOR_USE_DELTA + //the tableaux value for v may contain an infinitesemal part: getDelta( val ) will return a fresh variable "delta" + // (one for each sort) for which the lemma ( delta > 0 ) is asserted. + if( drv.getInfinitesimalPart()!=0 ){ + Node delta = NodeManager::currentNM()->mkNode( MULT, getDelta( val ), + NodeManager::currentNM()->mkConst( drv.getInfinitesimalPart() ) ); + // add (or subtract) this delta component from the value of v + val = NodeManager::currentNM()->mkNode( minus_delta ? MINUS : PLUS, val, delta ); + } +#endif + return val; +} + +Node InstantiatorTheoryArith::getDelta( Node n ){ + std::map< TypeNode, Node >::iterator it = d_deltas.find( n.getType() ); + if( it==d_deltas.end() ){ + std::ostringstream os; + os << "delta_" << d_deltas.size(); + Node delta = NodeManager::currentNM()->mkVar( os.str(), n.getType() ); + d_deltas[ n.getType() ] = delta; + Node gt = NodeManager::currentNM()->mkNode( GT, delta, NodeManager::currentNM()->mkConst( Rational(0) ) ); + //add split +#ifdef ARITH_INSTANTIATOR_STRONG_DELTA_LEMMA + d_quantEngine->addLemma( gt ); +#else + gt = Rewriter::rewrite( gt ); + d_quantEngine->addSplit( gt, true, true ); +#endif + return delta; + } + return it->second; +} + +InstantiatorTheoryArith::Statistics::Statistics(): + d_instantiations("InstantiatorTheoryArith::Instantiations_Total", 0), + d_instantiations_minus("InstantiatorTheoryArith::Instantiations_minus_delta", 0), + d_instantiations_match_pure("InstantiatorTheoryArith::Instantiations_via_pure_matching", 0), + d_instantiations_match_var("InstantiatorTheoryArith::Instantiations_via_matching_var", 0), + d_instantiations_match_no_var("InstantiatorTheoryArith::Instantiations_via_matching_no_var", 0) +{ + StatisticsRegistry::registerStat(&d_instantiations); + StatisticsRegistry::registerStat(&d_instantiations_minus); + StatisticsRegistry::registerStat(&d_instantiations_match_pure); + StatisticsRegistry::registerStat(&d_instantiations_match_var); + StatisticsRegistry::registerStat(&d_instantiations_match_no_var); +} + +InstantiatorTheoryArith::Statistics::~Statistics(){ + StatisticsRegistry::unregisterStat(&d_instantiations); + StatisticsRegistry::unregisterStat(&d_instantiations_minus); + StatisticsRegistry::unregisterStat(&d_instantiations_match_pure); + StatisticsRegistry::unregisterStat(&d_instantiations_match_var); + StatisticsRegistry::unregisterStat(&d_instantiations_match_no_var); +} diff --git a/src/theory/arith/theory_arith_instantiator.h b/src/theory/arith/theory_arith_instantiator.h new file mode 100644 index 000000000..524d16859 --- /dev/null +++ b/src/theory/arith/theory_arith_instantiator.h @@ -0,0 +1,128 @@ +/********************* */ +/*! \file instantiator_arith_instantiator.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief instantiator_arith_instantiator + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__INSTANTIATOR_ARITH_H +#define __CVC4__INSTANTIATOR_ARITH_H + +#include "theory/quantifiers_engine.h" +#include "theory/arith/arithvar_node_map.h" + +#include "util/stats.h" + +namespace CVC4 { +namespace theory { +namespace arith { + +class InstantiatorTheoryArith; + +class InstStrategySimplex : public InstStrategy{ +private: + /** InstantiatorTheoryUf class */ + InstantiatorTheoryArith* d_th; + /** */ + int d_counter; + /** negative one */ + Node d_negOne; + /** process functions */ + void processResetInstantiationRound( Theory::Effort effort ); + int process( Node f, Theory::Effort effort, int e, int instLimit ); +public: + InstStrategySimplex( InstantiatorTheoryArith* th, QuantifiersEngine* ie ); + ~InstStrategySimplex(){} + /** identify */ + std::string identify() const { return std::string("Simplex"); } +}; +// +//class InstStrategySimplexUfMatch : public InstStrategy{ +//private: +// /** InstantiatorTheoryUf class */ +// InstantiatorTheoryArith* d_th; +// /** trigger for instantiation rows */ +// std::map< ArithVar, Trigger* > d_tableaux_ce_term_trigger; +//public: +// InstStrategySimplexUfMatch( InstantiatorTheoryArith* th, QuantifiersEngine* ie ) : +// InstStrategy( ie ), d_th( th ){} +// ~InstStrategySimplexUfMatch(){} +// void resetInstantiationRound(); +// int process( Node f, Theory::Effort effort, int e, int instLimit ); +// /** identify */ +// std::string identify() const { return std::string("SimplexUfMatch"); } +//}; + +class InstantiatorTheoryArith : public Instantiator{ + friend class QuantifiersEngine; + friend class InstStrategySimplex; + friend class InstStrategySimplexUfMatch; +private: + /** delta */ + std::map< TypeNode, Node > d_deltas; + /** for each quantifier, simplex rows */ + std::map< Node, std::vector< ArithVar > > d_instRows; + /** tableaux */ + std::map< ArithVar, Node > d_tableaux_term; + std::map< ArithVar, std::map< Node, Node > > d_tableaux_ce_term; + std::map< ArithVar, std::map< Node, Node > > d_tableaux; + /** ce tableaux */ + std::map< ArithVar, std::map< Node, Node > > d_ceTableaux; + /** get value */ + Node getTableauxValue( Node n, bool minus_delta = false ); + Node getTableauxValue( ArithVar v, bool minus_delta = false ); + /** do instantiation */ + bool doInstantiation( Node f, Node term, ArithVar x, InstMatch& m, Node var ); + bool doInstantiation2( Node f, Node term, ArithVar x, InstMatch& m, Node var, bool minus_delta = false ); +public: + InstantiatorTheoryArith(context::Context* c, QuantifiersEngine* ie, Theory* th); + ~InstantiatorTheoryArith() {} + + /** assertNode function, assertion is asserted to theory */ + void assertNode( Node assertion ); + /** Pre-register a term. Done one time for a Node, ever. */ + void preRegisterTerm( Node t ); + /** identify */ + std::string identify() const { return std::string("InstantiatorTheoryArith"); } + /** print debug */ + void debugPrint( const char* c ); +private: + /** reset instantiation */ + void processResetInstantiationRound( Theory::Effort effort ); + /** process at effort */ + int process( Node f, Theory::Effort effort, int e, int instLimit ); + /** add term to row */ + void addTermToRow( ArithVar x, Node n, Node& f, NodeBuilder<>& t ); + /** get delta for node */ + Node getDelta( Node n ); + + class Statistics { + public: + IntStat d_instantiations; + IntStat d_instantiations_minus; + IntStat d_instantiations_match_pure; + IntStat d_instantiations_match_var; + IntStat d_instantiations_match_no_var; + Statistics(); + ~Statistics(); + }; + Statistics d_statistics; +};/* class InstantiatiorTheoryArith */ + +} +} +} + +#endif \ No newline at end of file diff --git a/src/theory/arrays/Makefile.am b/src/theory/arrays/Makefile.am index 3dde70145..57c55d765 100644 --- a/src/theory/arrays/Makefile.am +++ b/src/theory/arrays/Makefile.am @@ -15,6 +15,8 @@ libarrays_la_SOURCES = \ array_info.h \ array_info.cpp \ static_fact_manager.h \ - static_fact_manager.cpp + static_fact_manager.cpp \ + theory_arrays_instantiator.h \ + theory_arrays_instantiator.cpp EXTRA_DIST = kinds diff --git a/src/theory/arrays/kinds b/src/theory/arrays/kinds index 06240a315..195a60035 100644 --- a/src/theory/arrays/kinds +++ b/src/theory/arrays/kinds @@ -6,6 +6,7 @@ theory THEORY_ARRAY ::CVC4::theory::arrays::TheoryArrays "theory/arrays/theory_arrays.h" typechecker "theory/arrays/theory_arrays_type_rules.h" +instantiator ::CVC4::theory::arrays::InstantiatorTheoryArrays "theory/arrays/theory_arrays_instantiator.h" properties polite stable-infinite parametric properties check propagate presolve diff --git a/src/theory/arrays/theory_arrays.cpp b/src/theory/arrays/theory_arrays.cpp index 81661acd1..376a7e90f 100644 --- a/src/theory/arrays/theory_arrays.cpp +++ b/src/theory/arrays/theory_arrays.cpp @@ -23,6 +23,7 @@ #include #include "theory/rewriter.h" #include "expr/command.h" +#include "theory/arrays/theory_arrays_instantiator.h" using namespace std; @@ -45,8 +46,8 @@ const bool d_solveWrite2 = false; const bool d_useNonLinearOpt = true; const bool d_eagerIndexSplitting = true; -TheoryArrays::TheoryArrays(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(THEORY_ARRAY, c, u, out, valuation, logicInfo), +TheoryArrays::TheoryArrays(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_ARRAY, c, u, out, valuation, logicInfo, qe), d_numRow("theory::arrays::number of Row lemmas", 0), d_numExt("theory::arrays::number of Ext lemmas", 0), d_numProp("theory::arrays::number of propagations", 0), @@ -218,7 +219,7 @@ Node TheoryArrays::ppRewrite(TNode term) { } Node r1 = nm->mkNode(kind::SELECT, e1, index_i); - conc = (r1.getType() == nm->booleanType())? + conc = (r1.getType() == nm->booleanType())? r1.iffNode(write_i[2]) : r1.eqNode(write_i[2]); if (hyp.getNumChildren() != 0) { if (hyp.getNumChildren() == 1) { @@ -582,7 +583,6 @@ void TheoryArrays::computeCareGraph() // Get representative trigger terms TNode x_shared = d_equalityEngine.getTriggerTermRepresentative(x, THEORY_ARRAY); TNode y_shared = d_equalityEngine.getTriggerTermRepresentative(y, THEORY_ARRAY); - EqualityStatus eqStatusDomain = d_valuation.getEqualityStatus(x_shared, y_shared); switch (eqStatusDomain) { case EQUALITY_TRUE_AND_PROPAGATED: @@ -605,6 +605,7 @@ void TheoryArrays::computeCareGraph() break; } + // Otherwise, add this pair Debug("arrays::sharing") << "TheoryArrays::computeCareGraph(): adding to care-graph" << std::endl; addCarePair(x_shared, y_shared); diff --git a/src/theory/arrays/theory_arrays.h b/src/theory/arrays/theory_arrays.h index 80fe692c0..1bf42a105 100644 --- a/src/theory/arrays/theory_arrays.h +++ b/src/theory/arrays/theory_arrays.h @@ -39,32 +39,32 @@ namespace arrays { * Overview of decision procedure: * * Preliminary notation: - * Stores(a) = {t | a ~ t and t = store( _ _ _ )} + * Stores(a) = {t | a ~ t and t = store( _ _ _ )} * InStores(a) = {t | t = store (b _ _) and a ~ b } * Indices(a) = {i | there exists a term b[i] such that a ~ b or store(b i v)} * ~ represents the equivalence relation based on the asserted equalities in the * current context. - * + * * The rules implemented are the following: * store(b i v) * Row1 ------------------- * store(b i v)[i] = v - * + * * store(b i v) a'[j] * Row ---------------------- [ a' ~ store(b i v) or a' ~ b ] * i = j OR a[j] = b[j] - * + * * a b same kind arrays * Ext ------------------------ [ a!= b in current context, k new var] * a = b OR a[k] != b[k]p - * - * + * + * * The Row1 one rule is implemented implicitly as follows: * - for each store(b i v) term add the following equality to the congruence * closure store(b i v)[i] = v * - if one of the literals in a conflict is of the form store(b i v)[i] = v * remove it from the conflict - * + * * Because new store terms are not created, we need to check if we need to * instantiate a new Row axiom in the following cases: * 1. the congruence relation changes (i.e. two terms get merged) @@ -77,7 +77,7 @@ namespace arrays { * - this is implemented in the checkRowForIndex method which is called * when preregistering a term of the form a[i]. * - as a consequence lemmas are instantiated even before full effort check - * + * * The Ext axiom is instantiated when a disequality is asserted during full effort * check. Ext lemmas are stored in a cache to prevent instantiating essentially * the same lemma multiple times. @@ -122,7 +122,7 @@ class TheoryArrays : public Theory { public: - TheoryArrays(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo); + TheoryArrays(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe); ~TheoryArrays(); std::string identify() const { return std::string("TheoryArrays"); } @@ -133,6 +133,16 @@ class TheoryArrays : public Theory { private: + // PPNotifyClass: dummy template class for d_ppEqualityEngine - notifications not used + class PPNotifyClass { + public: + bool notify(TNode propagation) { return true; } + void notify(TNode t1, TNode t2) { } + }; + + /** The notify class for d_ppEqualityEngine */ + PPNotifyClass d_ppNotify; + /** Equaltity engine */ eq::EqualityEngine d_ppEqualityEngine; @@ -181,6 +191,15 @@ class TheoryArrays : public Theory { private: + class MayEqualNotifyClass { + public: + bool notify(TNode propagation) { return true; } + void notify(TNode t1, TNode t2) { } + }; + + /** The notify class for d_mayEqualEqualityEngine */ + MayEqualNotifyClass d_mayEqualNotify; + /** Equaltity engine for determining if two arrays might be equal */ eq::EqualityEngine d_mayEqualEqualityEngine; @@ -270,6 +289,11 @@ class TheoryArrays : public Theory { Debug("arrays::propagate") << spaces(d_arrays.getSatContext()->getLevel()) << "NotifyClass::eqNotifyConstantTermMerge(" << t1 << ", " << t2 << ")" << std::endl; d_arrays.conflict(t1, t2); } + + void eqNotifyNewClass(TNode t) { } + void eqNotifyPreMerge(TNode t1, TNode t2) { } + void eqNotifyPostMerge(TNode t1, TNode t2) { } + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { } }; /** The notify class for d_equalityEngine */ diff --git a/src/theory/arrays/theory_arrays_instantiator.cpp b/src/theory/arrays/theory_arrays_instantiator.cpp new file mode 100644 index 000000000..334d70eea --- /dev/null +++ b/src/theory/arrays/theory_arrays_instantiator.cpp @@ -0,0 +1,56 @@ +/********************* */ +/*! \file theory_arrays_instantiator.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory_arrays_instantiator class + **/ + +#include "theory/theory_engine.h" +#include "theory/arrays/theory_arrays_instantiator.h" +#include "theory/arrays/theory_arrays.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::arrays; + +InstantiatorTheoryArrays::InstantiatorTheoryArrays(context::Context* c, QuantifiersEngine* ie, Theory* th) : +Instantiator( c, ie, th ){ + +} + +void InstantiatorTheoryArrays::preRegisterTerm( Node t ){ + +} + +void InstantiatorTheoryArrays::assertNode( Node assertion ){ + Debug("quant-arrays-assert") << "InstantiatorTheoryArrays::assertNode: " << assertion << std::endl; + d_quantEngine->addTermToDatabase( assertion ); + if( Options::current()->cbqi ){ + if( assertion.hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion.getAttribute(InstConstantAttribute()) ); + }else if( assertion.getKind()==NOT && assertion[0].hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion[0].getAttribute(InstConstantAttribute()) ); + } + } +} + + +void InstantiatorTheoryArrays::processResetInstantiationRound( Theory::Effort effort ){ + +} + +int InstantiatorTheoryArrays::process( Node f, Theory::Effort effort, int e, int limitInst ){ + return InstStrategy::STATUS_SAT; +} diff --git a/src/theory/arrays/theory_arrays_instantiator.h b/src/theory/arrays/theory_arrays_instantiator.h new file mode 100644 index 000000000..6a7c9c3ed --- /dev/null +++ b/src/theory/arrays/theory_arrays_instantiator.h @@ -0,0 +1,51 @@ +/********************* */ +/*! \file theory_arrays_instantiator.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Instantiator for theory of arrays + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__INSTANTIATOR_THEORY_ARRAYS_H +#define __CVC4__INSTANTIATOR_THEORY_ARRAYS_H + +#include "theory/quantifiers_engine.h" + +namespace CVC4 { +namespace theory { +namespace arrays { + +class InstantiatorTheoryArrays : public Instantiator{ + friend class QuantifiersEngine; +protected: + /** reset instantiation round */ + void processResetInstantiationRound( Theory::Effort effort ); + /** process quantifier */ + int process( Node f, Theory::Effort effort, int e, int limitInst = 0 ); +public: + InstantiatorTheoryArrays(context::Context* c, QuantifiersEngine* ie, Theory* th); + ~InstantiatorTheoryArrays() {} + /** Pre-register a term. */ + void preRegisterTerm( Node t ); + /** assertNode function, assertion is asserted to theory */ + void assertNode( Node assertion ); + /** identify */ + std::string identify() const { return std::string("InstantiatorTheoryArrays"); } +};/* class Instantiatior */ + +} +} +} + +#endif \ No newline at end of file diff --git a/src/theory/booleans/theory_bool.h b/src/theory/booleans/theory_bool.h index 99b5b6007..40783a6ce 100644 --- a/src/theory/booleans/theory_bool.h +++ b/src/theory/booleans/theory_bool.h @@ -30,8 +30,8 @@ namespace booleans { class TheoryBool : public Theory { public: - TheoryBool(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(THEORY_BOOL, c, u, out, valuation, logicInfo) { + TheoryBool(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_BOOL, c, u, out, valuation, logicInfo, qe) { } Node getValue(TNode n); diff --git a/src/theory/builtin/theory_builtin.h b/src/theory/builtin/theory_builtin.h index 30d2aaca7..a13c69d9d 100644 --- a/src/theory/builtin/theory_builtin.h +++ b/src/theory/builtin/theory_builtin.h @@ -29,8 +29,8 @@ namespace builtin { class TheoryBuiltin : public Theory { public: - TheoryBuiltin(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(THEORY_BUILTIN, c, u, out, valuation, logicInfo) {} + TheoryBuiltin(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_BUILTIN, c, u, out, valuation, logicInfo, qe) {} Node getValue(TNode n); std::string identify() const { return std::string("TheoryBuiltin"); } };/* class TheoryBuiltin */ diff --git a/src/theory/bv/bv_subtheory_eq.h b/src/theory/bv/bv_subtheory_eq.h index d4239ff13..01178b453 100644 --- a/src/theory/bv/bv_subtheory_eq.h +++ b/src/theory/bv/bv_subtheory_eq.h @@ -40,6 +40,10 @@ class EqualitySolver : public SubtheorySolver { bool eqNotifyTriggerPredicate(TNode predicate, bool value); bool eqNotifyTriggerTermEquality(TheoryId tag, TNode t1, TNode t2, bool value); void eqNotifyConstantTermMerge(TNode t1, TNode t2); + void eqNotifyNewClass(TNode t) { } + void eqNotifyPreMerge(TNode t1, TNode t2) { } + void eqNotifyPostMerge(TNode t1, TNode t2) { } + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { } }; diff --git a/src/theory/bv/theory_bv.cpp b/src/theory/bv/theory_bv.cpp index 30493737a..66f443d50 100644 --- a/src/theory/bv/theory_bv.cpp +++ b/src/theory/bv/theory_bv.cpp @@ -33,8 +33,8 @@ using namespace CVC4::theory::bv::utils; -TheoryBV::TheoryBV(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) - : Theory(THEORY_BV, c, u, out, valuation, logicInfo), +TheoryBV::TheoryBV(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) + : Theory(THEORY_BV, c, u, out, valuation, logicInfo, qe), d_context(c), d_alreadyPropagatedSet(c), d_sharedTermsSet(c), diff --git a/src/theory/bv/theory_bv.h b/src/theory/bv/theory_bv.h index 9c27f62c5..f79b7ab71 100644 --- a/src/theory/bv/theory_bv.h +++ b/src/theory/bv/theory_bv.h @@ -49,8 +49,8 @@ class TheoryBV : public Theory { EqualitySolver d_equalitySolver; public: - TheoryBV(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo); - ~TheoryBV(); + TheoryBV(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe); + ~TheoryBV(); void preRegisterTerm(TNode n); @@ -64,21 +64,21 @@ public: std::string identify() const { return std::string("TheoryBV"); } - PPAssertStatus ppAssert(TNode in, SubstitutionMap& outSubstitutions); + PPAssertStatus ppAssert(TNode in, SubstitutionMap& outSubstitutions); private: - + class Statistics { public: AverageStat d_avgConflictSize; IntStat d_solveSubstitutions; - TimerStat d_solveTimer; + TimerStat d_solveTimer; Statistics(); - ~Statistics(); - }; - + ~Statistics(); + }; + Statistics d_statistics; - + // Are we in conflict? context::CDO d_conflict; @@ -133,7 +133,7 @@ private: } bool inConflict() { return d_conflict == true; } - + friend class Bitblaster; friend class BitblastSolver; friend class EqualitySolver; diff --git a/src/theory/datatypes/Makefile.am b/src/theory/datatypes/Makefile.am index f8bfa3dc5..d6622b19a 100644 --- a/src/theory/datatypes/Makefile.am +++ b/src/theory/datatypes/Makefile.am @@ -13,6 +13,8 @@ libdatatypes_la_SOURCES = \ union_find.h \ union_find.cpp \ explanation_manager.h \ - explanation_manager.cpp + explanation_manager.cpp \ + theory_datatypes_instantiator.h \ + theory_datatypes_instantiator.cpp EXTRA_DIST = kinds diff --git a/src/theory/datatypes/kinds b/src/theory/datatypes/kinds index 7acb6d17d..4b6bfd8f6 100644 --- a/src/theory/datatypes/kinds +++ b/src/theory/datatypes/kinds @@ -6,6 +6,7 @@ theory THEORY_DATATYPES ::CVC4::theory::datatypes::TheoryDatatypes "theory/datatypes/theory_datatypes.h" typechecker "theory/datatypes/theory_datatypes_type_rules.h" +instantiator ::CVC4::theory::datatypes::InstantiatorTheoryDatatypes "theory/datatypes/theory_datatypes_instantiator.h" properties check presolve parametric diff --git a/src/theory/datatypes/theory_datatypes.cpp b/src/theory/datatypes/theory_datatypes.cpp index 7b1562ada..3b8efabb7 100644 --- a/src/theory/datatypes/theory_datatypes.cpp +++ b/src/theory/datatypes/theory_datatypes.cpp @@ -22,6 +22,7 @@ #include "expr/kind.h" #include "util/datatype.h" #include "util/Assert.h" +#include "theory/datatypes/theory_datatypes_instantiator.h" #include @@ -53,8 +54,8 @@ Node TheoryDatatypes::getConstructorForSelector( Node sel ) } -TheoryDatatypes::TheoryDatatypes(Context* c, UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(THEORY_DATATYPES, c, u, out, valuation, logicInfo), +TheoryDatatypes::TheoryDatatypes(Context* c, UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_DATATYPES, c, u, out, valuation, logicInfo, qe), d_currAsserts(c), d_currEqualities(c), d_selectors(c), @@ -71,7 +72,6 @@ TheoryDatatypes::TheoryDatatypes(Context* c, UserContext* u, OutputChannel& out, d_disequalities(c), d_em(c), d_cce(&d_cc){ - } @@ -114,7 +114,7 @@ void TheoryDatatypes::check(Effort e) { Node assertion = get(); if( Debug.isOn("datatypes") || Debug.isOn("datatypes-split") || Debug.isOn("datatypes-cycles") || Debug.isOn("datatypes-debug-pf") || Debug.isOn("datatypes-conflict") ) { - cout << "*** TheoryDatatypes::check(): " << assertion << endl; + Notice() << "*** TheoryDatatypes::check(): " << assertion << endl; d_currAsserts.push_back( assertion ); } @@ -211,7 +211,7 @@ void TheoryDatatypes::check(Effort e) { Node conflict = d_em.getConflict(); if( Debug.isOn("datatypes") || Debug.isOn("datatypes-split") || Debug.isOn("datatypes-cycles") || Debug.isOn("datatypes-conflict") ){ - cout << "Conflict constructed : " << conflict << endl; + Notice() << "Conflict constructed : " << conflict << endl; } if( conflict.getKind()!=kind::AND ){ conflict = NodeManager::currentNM()->mkNode(kind::AND, conflict, conflict); @@ -283,7 +283,7 @@ void TheoryDatatypes::check(Effort e) { } } if( Debug.isOn("datatypes") || Debug.isOn("datatypes-split") ) { - cout << "TheoryDatatypes::check(): done" << endl; + Notice() << "TheoryDatatypes::check(): done" << endl; } } diff --git a/src/theory/datatypes/theory_datatypes.h b/src/theory/datatypes/theory_datatypes.h index 967000c3e..5a4135a3b 100644 --- a/src/theory/datatypes/theory_datatypes.h +++ b/src/theory/datatypes/theory_datatypes.h @@ -37,7 +37,10 @@ namespace CVC4 { namespace theory { namespace datatypes { +class InstantiatorTheoryDatatypes; + class TheoryDatatypes : public Theory { + friend class InstantiatorTheoryDatatypes; private: typedef context::CDChunkList EqList; typedef context::CDHashMap EqLists; @@ -53,7 +56,7 @@ private: BoolMap d_selectors; /** keeps track of which nodes are representatives */ BoolMap d_reps; - /** map from (representative) nodes to a list of selectors whose arguments are + /** map from (representative) nodes to a list of selectors whose arguments are in the equivalence class of that node */ EqListsN d_selector_eq; /** map from (representative) nodes to list of nodes in their eq class */ @@ -140,7 +143,7 @@ private: CongruenceClosureExplainer d_cce; public: - TheoryDatatypes(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo); + TheoryDatatypes(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe); ~TheoryDatatypes(); void preRegisterTerm(TNode n); void presolve(); @@ -167,7 +170,7 @@ private: /* from uf_morgan */ void merge(TNode a, TNode b); - inline TNode find(TNode a); + inline TNode find(TNode a); inline TNode debugFind(TNode a) const; void appendToDiseqList(TNode of, TNode eq); void addDisequality(TNode eq); @@ -179,8 +182,8 @@ private: NodeBuilder<>& explanation ); };/* class TheoryDatatypes */ -inline bool TheoryDatatypes::hasConflict() { - return d_em.hasConflict(); +inline bool TheoryDatatypes::hasConflict() { + return d_em.hasConflict(); } inline TNode TheoryDatatypes::find(TNode a) { diff --git a/src/theory/datatypes/theory_datatypes_instantiator.cpp b/src/theory/datatypes/theory_datatypes_instantiator.cpp new file mode 100644 index 000000000..6a32466e4 --- /dev/null +++ b/src/theory/datatypes/theory_datatypes_instantiator.cpp @@ -0,0 +1,158 @@ +/********************* */ +/*! \file theory_datatypes_instantiator.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory_datatypes_instantiator class + **/ + +#include "theory/datatypes/theory_datatypes_instantiator.h" +#include "theory/datatypes/theory_datatypes.h" +#include "theory/theory_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::datatypes; + +InstantiatorTheoryDatatypes::InstantiatorTheoryDatatypes(context::Context* c, QuantifiersEngine* ie, Theory* th) : +Instantiator( c, ie, th ){ + +} + +void InstantiatorTheoryDatatypes::assertNode( Node assertion ){ + Debug("quant-datatypes-assert") << "InstantiatorTheoryDatatypes::check: " << assertion << std::endl; + d_quantEngine->addTermToDatabase( assertion ); + if( Options::current()->cbqi ){ + if( assertion.hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion.getAttribute(InstConstantAttribute()) ); + }else if( assertion.getKind()==NOT && assertion[0].hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion[0].getAttribute(InstConstantAttribute()) ); + } + } +} + +void InstantiatorTheoryDatatypes::processResetInstantiationRound( Theory::Effort effort ){ + +} + + +int InstantiatorTheoryDatatypes::process( Node f, Theory::Effort effort, int e, int limitInst ){ + Debug("quant-datatypes") << "Datatypes: Try to solve (" << e << ") for " << f << "... " << std::endl; + if( Options::current()->cbqi ){ + if( e<2 ){ + return InstStrategy::STATUS_UNFINISHED; + }else if( e==2 ){ + InstMatch m; + for( int j = 0; j<(int)d_quantEngine->getNumInstantiationConstants( f ); j++ ){ + Node i = d_quantEngine->getInstantiationConstant( f, j ); + if( i.getType().isDatatype() ){ + Node n = getValueFor( i ); + Debug("quant-datatypes-debug") << "Value for " << i << " is " << n << std::endl; + m.d_map[ i ] = n; + } + } + d_quantEngine->addInstantiation( f, m ); + } + } + return InstStrategy::STATUS_UNKNOWN; +} + +Node InstantiatorTheoryDatatypes::getValueFor( Node n ){ + //simply get the ground value for n in the current model, if it exists, + // or return an arbitrary ground term otherwise + Debug("quant-datatypes-debug") << "get value for " << n << std::endl; + if( !n.hasAttribute(InstConstantAttribute()) ){ + return n; + }else{ + Assert( n.getType().isDatatype() ); + //check if in equivalence class with ground term + Node rep = getRepresentative( n ); + Debug("quant-datatypes-debug") << "Rep is " << rep << std::endl; + if( !rep.hasAttribute(InstConstantAttribute()) ){ + return rep; + }else{ + if( !n.getType().isDatatype() ){ + return n.getType().mkGroundTerm(); + }else{ + if( n.getKind()==APPLY_CONSTRUCTOR ){ + std::vector< Node > children; + children.push_back( n.getOperator() ); + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + children.push_back( getValueFor( n[i] ) ); + } + return NodeManager::currentNM()->mkNode( APPLY_CONSTRUCTOR, children ); + }else{ + const Datatype& dt = ((DatatypeType)(n.getType()).toType()).getDatatype(); + TheoryDatatypes::EqLists* labels = &((TheoryDatatypes*)d_th)->d_labels; + //otherwise, use which constructor the inst constant is current chosen to be + if( labels->find( n )!=labels->end() ){ + TheoryDatatypes::EqList* lbl = (*labels->find( n )).second; + int tIndex = -1; + if( !lbl->empty() && (*lbl)[ lbl->size()-1 ].getKind()==APPLY_TESTER ){ + Debug("quant-datatypes-debug") << n << " tester is " << (*lbl)[ lbl->size()-1 ] << std::endl; + tIndex = Datatype::indexOf((*lbl)[ lbl->size()-1 ].getOperator().toExpr()); + }else{ + Debug("quant-datatypes-debug") << "find possible tester choice" << std::endl; + //must find a possible choice + vector< bool > possibleCons; + possibleCons.resize( dt.getNumConstructors(), true ); + for( TheoryDatatypes::EqList::const_iterator j = lbl->begin(); j != lbl->end(); j++ ) { + Node leqn = (*j); + possibleCons[ Datatype::indexOf( leqn[0].getOperator().toExpr() ) ] = false; + } + for( unsigned int j=0; j children; + children.push_back( cons ); + for( int i=0; i<(int)dt[ tIndex ].getNumArgs(); i++ ) { + Node sn = NodeManager::currentNM()->mkNode( APPLY_SELECTOR, Node::fromExpr( dt[tIndex][i].getSelector() ), n ); + if( n.hasAttribute(InstConstantAttribute()) ){ + InstConstantAttribute ica; + sn.setAttribute(ica,n.getAttribute(InstConstantAttribute()) ); + } + Node snn = getValueFor( sn ); + children.push_back( snn ); + } + return NodeManager::currentNM()->mkNode( APPLY_CONSTRUCTOR, children ); + }else{ + return n.getType().mkGroundTerm(); + } + } + } + } + } +} + +Node InstantiatorTheoryDatatypes::getRepresentative( Node n ){ + return ((TheoryDatatypes*)d_th)->find( n ); +} + +InstantiatorTheoryDatatypes::Statistics::Statistics(): + d_instantiations("InstantiatorTheoryDatatypes::Instantiations_Total", 0) +{ + StatisticsRegistry::registerStat(&d_instantiations); +} + +InstantiatorTheoryDatatypes::Statistics::~Statistics(){ + StatisticsRegistry::unregisterStat(&d_instantiations); +} + diff --git a/src/theory/datatypes/theory_datatypes_instantiator.h b/src/theory/datatypes/theory_datatypes_instantiator.h new file mode 100644 index 000000000..5c52f7f48 --- /dev/null +++ b/src/theory/datatypes/theory_datatypes_instantiator.h @@ -0,0 +1,64 @@ +/********************* */ +/*! \file instantiator_datatypes_instantiator.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief instantiator_datatypes_instantiator + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__INSTANTIATOR_DATATYPES_H +#define __CVC4__INSTANTIATOR_DATATYPES_H + +#include "theory/quantifiers_engine.h" + +#include "util/stats.h" + +namespace CVC4 { +namespace theory { +namespace datatypes { + +class InstantiatorTheoryDatatypes : public Instantiator{ + friend class QuantifiersEngine; +public: + InstantiatorTheoryDatatypes(context::Context* c, QuantifiersEngine* ie, Theory* th); + ~InstantiatorTheoryDatatypes() {} + + /** assertNode function, assertion is asserted to theory */ + void assertNode( Node assertion ); + /** identify */ + std::string identify() const { return std::string("InstantiatorTheoryDatatypes"); } +private: + /** reset instantiation */ + void processResetInstantiationRound( Theory::Effort effort ); + /** process at effort */ + int process( Node f, Theory::Effort effort, int e, int limitInst ); + /** get value for */ + Node getValueFor( Node n ); + /** get representative */ + Node getRepresentative( Node n ); + + class Statistics { + public: + IntStat d_instantiations; + Statistics(); + ~Statistics(); + }; + Statistics d_statistics; +};/* class InstantiatiorTheoryDatatypes */ + +} +} +} + +#endif \ No newline at end of file diff --git a/src/theory/example/theory_uf_tim.cpp b/src/theory/example/theory_uf_tim.cpp index 03787703a..638a03478 100644 --- a/src/theory/example/theory_uf_tim.cpp +++ b/src/theory/example/theory_uf_tim.cpp @@ -27,8 +27,8 @@ using namespace CVC4::theory; using namespace CVC4::theory::uf; using namespace CVC4::theory::uf::tim; -TheoryUFTim::TheoryUFTim(Context* c, UserContext* u, OutputChannel& out, Valuation valuation) : - Theory(THEORY_UF, c, u, out, valuation), +TheoryUFTim::TheoryUFTim(Context* c, UserContext* u, OutputChannel& out, Valuation valuation, QuantifiersEngine* qe) : + Theory(THEORY_UF, c, u, out, valuation, qe), d_assertions(c), d_pending(c), d_currentPendingIdx(c,0), diff --git a/src/theory/example/theory_uf_tim.h b/src/theory/example/theory_uf_tim.h index b47536f07..41e58349a 100644 --- a/src/theory/example/theory_uf_tim.h +++ b/src/theory/example/theory_uf_tim.h @@ -85,7 +85,7 @@ private: public: /** Constructs a new instance of TheoryUF w.r.t. the provided context.*/ - TheoryUFTim(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation); + TheoryUFTim(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, QuantifiersEngine* qe); /** Destructor for the TheoryUF object. */ ~TheoryUFTim(); diff --git a/src/theory/inst_match.cpp b/src/theory/inst_match.cpp new file mode 100644 index 000000000..e340da75d --- /dev/null +++ b/src/theory/inst_match.cpp @@ -0,0 +1,903 @@ +/********************* */ +/*! \file inst_match.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of inst match class + **/ + +#include "theory/inst_match.h" +#include "theory/theory_engine.h" +#include "theory/quantifiers_engine.h" +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/uf/theory_uf_candidate_generator.h" +#include "theory/uf/equality_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; + + +bool CandidateGenerator::isLegalCandidate( Node n ){ + return !n.getAttribute(NoMatchAttribute()) && ( !Options::current()->cbqi || !n.hasAttribute(InstConstantAttribute()) ); +} + +void CandidateGeneratorQueue::addCandidate( Node n ) { + if( isLegalCandidate( n ) ){ + d_candidates.push_back( n ); + } +} + +void CandidateGeneratorQueue::reset( Node eqc ){ + if( d_candidate_index>0 ){ + d_candidates.erase( d_candidates.begin(), d_candidates.begin() + d_candidate_index ); + d_candidate_index = 0; + } + if( !eqc.isNull() ){ + d_candidates.push_back( eqc ); + } +} +Node CandidateGeneratorQueue::getNextCandidate(){ + if( d_candidate_index<(int)d_candidates.size() ){ + Node n = d_candidates[d_candidate_index]; + d_candidate_index++; + return n; + }else{ + d_candidate_index = 0; + d_candidates.clear(); + return Node::null(); + } +} + +InstMatch::InstMatch() { +} + +InstMatch::InstMatch( InstMatch* m ) { + d_map = m->d_map; +} + +bool InstMatch::setMatch( EqualityQuery* q, Node v, Node m ){ + if( d_map.find( v )==d_map.end() ){ + d_map[v] = m; + Debug("matching-debug") << "Add partial " << v << "->" << m << std::endl; + return true; + }else{ + return q->areEqual( d_map[v], m ); + } +} + +bool InstMatch::add( InstMatch& m ){ + for( std::map< Node, Node >::iterator it = m.d_map.begin(); it != m.d_map.end(); ++it ){ + if( d_map.find( it->first )==d_map.end() ){ + d_map[it->first] = it->second; + } + } + return true; +} + +bool InstMatch::merge( EqualityQuery* q, InstMatch& m ){ + for( std::map< Node, Node >::iterator it = m.d_map.begin(); it != m.d_map.end(); ++it ){ + if( d_map.find( it->first )==d_map.end() ){ + d_map[ it->first ] = it->second; + }else{ + if( it->second!=d_map[it->first] ){ + if( !q->areEqual( it->second, d_map[it->first] ) ){ + d_map.clear(); + return false; + } + } + } + } + return true; +} + +void InstMatch::debugPrint( const char* c ){ + for( std::map< Node, Node >::iterator it = d_map.begin(); it != d_map.end(); ++it ){ + Debug( c ) << " " << it->first << " -> " << it->second << std::endl; + } + //if( !d_splits.empty() ){ + // Debug( c ) << " Conditions: "; + // for( std::map< Node, Node >::iterator it = d_splits.begin(); it !=d_splits.end(); ++it ){ + // Debug( c ) << it->first << " = " << it->second << " "; + // } + // Debug( c ) << std::endl; + //} +} + +void InstMatch::makeComplete( Node f, QuantifiersEngine* qe ){ + for( int i=0; i<(int)qe->d_inst_constants[f].size(); i++ ){ + if( d_map.find( qe->d_inst_constants[f][i] )==d_map.end() ){ + d_map[ qe->d_inst_constants[f][i] ] = qe->getFreeVariableForInstConstant( qe->d_inst_constants[f][i] ); + } + } +} + +void InstMatch::makeInternal( QuantifiersEngine* qe ){ + for( std::map< Node, Node >::iterator it = d_map.begin(); it != d_map.end(); ++it ){ + if( Options::current()->cbqi && it->second.hasAttribute(InstConstantAttribute()) ){ + d_map[ it->first ] = qe->getEqualityQuery()->getInternalRepresentative( it->second ); + if( Options::current()->cbqi && it->second.hasAttribute(InstConstantAttribute()) ){ + d_map[ it->first ] = qe->getFreeVariableForInstConstant( it->first ); + } + } + } +} + +void InstMatch::makeRepresentative( QuantifiersEngine* qe ){ + for( std::map< Node, Node >::iterator it = d_map.begin(); it != d_map.end(); ++it ){ + d_map[ it->first ] = qe->getEqualityQuery()->getInternalRepresentative( it->second ); + if( Options::current()->cbqi && it->second.hasAttribute(InstConstantAttribute()) ){ + d_map[ it->first ] = qe->getFreeVariableForInstConstant( it->first ); + } + } +} + +void InstMatch::applyRewrite(){ + for( std::map< Node, Node >::iterator it = d_map.begin(); it != d_map.end(); ++it ){ + it->second = Rewriter::rewrite(it->second); + } +} + +void InstMatch::computeTermVec( QuantifiersEngine* qe, const std::vector< Node >& vars, std::vector< Node >& match ){ + for( int i=0; i<(int)vars.size(); i++ ){ + std::map< Node, Node >::iterator it = d_map.find( vars[i] ); + if( it!=d_map.end() && !it->second.isNull() ){ + match.push_back( it->second ); + }else{ + match.push_back( qe->getFreeVariableForInstConstant( vars[i] ) ); + } + } +} +void InstMatch::computeTermVec( const std::vector< Node >& vars, std::vector< Node >& match ){ + for( int i=0; i<(int)vars.size(); i++ ){ + match.push_back( d_map[ vars[i] ] ); + } +} + + +/** add match m for quantifier f starting at index, take into account equalities q, return true if successful */ +void InstMatchTrie::addInstMatch2( QuantifiersEngine* qe, Node f, InstMatch& m, int index, ImtIndexOrder* imtio ){ + if( long(index)d_order.size() ) ){ + int i_index = imtio ? imtio->d_order[index] : index; + Node n = m.d_map[ qe->getInstantiationConstant( f, i_index ) ]; + d_data[n].addInstMatch2( qe, f, m, index+1, imtio ); + } +} + +/** exists match */ +bool InstMatchTrie::existsInstMatch( QuantifiersEngine* qe, Node f, InstMatch& m, bool modEq, int index, ImtIndexOrder* imtio ){ + if( long(index)==f[0].getNumChildren() || ( imtio && long(index)==imtio->d_order.size() ) ){ + return true; + }else{ + int i_index = imtio ? imtio->d_order[index] : index; + Node n = m.d_map[ qe->getInstantiationConstant( f, i_index ) ]; + std::map< Node, InstMatchTrie >::iterator it = d_data.find( n ); + if( it!=d_data.end() ){ + if( it->second.existsInstMatch( qe, f, m, modEq, index+1, imtio ) ){ + return true; + } + } + if( modEq ){ + //check modulo equality if any other instantiation match exists + if( ((uf::TheoryUF*)qe->getTheoryEngine()->getTheory( THEORY_UF ))->getEqualityEngine()->hasTerm( n ) ){ + eq::EqClassIterator eqc( qe->getEqualityQuery()->getRepresentative( n ), + ((uf::TheoryUF*)qe->getTheoryEngine()->getTheory( THEORY_UF ))->getEqualityEngine() ); + while( !eqc.isFinished() ){ + Node en = (*eqc); + if( en!=n ){ + std::map< Node, InstMatchTrie >::iterator itc = d_data.find( en ); + if( itc!=d_data.end() ){ + if( itc->second.existsInstMatch( qe, f, m, modEq, index+1, imtio ) ){ + return true; + } + } + } + ++eqc; + } + } + //for( std::map< Node, InstMatchTrie >::iterator itc = d_data.begin(); itc != d_data.end(); ++itc ){ + // if( itc->first!=n && qe->getEqualityQuery()->areEqual( n, itc->first ) ){ + // if( itc->second.existsInstMatch( qe, f, m, modEq, index+1 ) ){ + // return true; + // } + // } + //} + } + return false; + } +} + +bool InstMatchTrie::addInstMatch( QuantifiersEngine* qe, Node f, InstMatch& m, bool modEq, ImtIndexOrder* imtio ){ + if( !existsInstMatch( qe, f, m, modEq, 0, imtio ) ){ + addInstMatch2( qe, f, m, 0, imtio ); + return true; + }else{ + return false; + } +} + +InstMatchGenerator::InstMatchGenerator( Node pat, QuantifiersEngine* qe, int matchPolicy ) : d_matchPolicy( matchPolicy ){ + initializePattern( pat, qe ); +} + +InstMatchGenerator::InstMatchGenerator( std::vector< Node >& pats, QuantifiersEngine* qe, int matchPolicy ) : d_matchPolicy( matchPolicy ){ + if( pats.size()==1 ){ + initializePattern( pats[0], qe ); + }else{ + initializePatterns( pats, qe ); + } +} + +void InstMatchGenerator::initializePatterns( std::vector< Node >& pats, QuantifiersEngine* qe ){ + int childMatchPolicy = d_matchPolicy==MATCH_GEN_EFFICIENT_E_MATCH ? 0 : d_matchPolicy; + for( int i=0; i<(int)pats.size(); i++ ){ + d_children.push_back( new InstMatchGenerator( pats[i], qe, childMatchPolicy ) ); + } + d_pattern = Node::null(); + d_match_pattern = Node::null(); + d_cg = NULL; +} + +void InstMatchGenerator::initializePattern( Node pat, QuantifiersEngine* qe ){ + Debug("inst-match-gen") << "Pattern term is " << pat << std::endl; + Assert( pat.hasAttribute(InstConstantAttribute()) ); + d_pattern = pat; + d_match_pattern = pat; + if( d_match_pattern.getKind()==NOT ){ + //we want to add the children of the NOT + d_match_pattern = d_pattern[0]; + } + if( d_match_pattern.getKind()==IFF || d_match_pattern.getKind()==EQUAL ){ + if( !d_match_pattern[0].hasAttribute(InstConstantAttribute()) ){ + Assert( d_match_pattern[1].hasAttribute(InstConstantAttribute()) ); + //swap sides + d_pattern = NodeManager::currentNM()->mkNode( d_match_pattern.getKind(), d_match_pattern[1], d_match_pattern[0] ); + d_pattern = pat.getKind()==NOT ? d_pattern.notNode() : d_pattern; + if( pat.getKind()!=NOT ){ //TEMPORARY until we do better implementation of disequality matching + d_match_pattern = d_match_pattern[1]; + }else{ + d_match_pattern = d_pattern[0][0]; + } + }else if( !d_match_pattern[1].hasAttribute(InstConstantAttribute()) ){ + Assert( d_match_pattern[0].hasAttribute(InstConstantAttribute()) ); + if( pat.getKind()!=NOT ){ //TEMPORARY until we do better implementation of disequality matching + d_match_pattern = d_match_pattern[0]; + } + } + } + int childMatchPolicy = MATCH_GEN_DEFAULT; + for( int i=0; i<(int)d_match_pattern.getNumChildren(); i++ ){ + if( d_match_pattern[i].hasAttribute(InstConstantAttribute()) ){ + if( d_match_pattern[i].getKind()!=INST_CONSTANT ){ + d_children.push_back( new InstMatchGenerator( d_match_pattern[i], qe, childMatchPolicy ) ); + d_children_index.push_back( i ); + } + } + } + + Debug("inst-match-gen") << "Pattern is " << d_pattern << ", match pattern is " << d_match_pattern << std::endl; + + //get the equality engine + Theory* th_uf = qe->getTheoryEngine()->getTheory( theory::THEORY_UF ); + uf::InstantiatorTheoryUf* ith = (uf::InstantiatorTheoryUf*)th_uf->getInstantiator(); + //create candidate generator + if( d_match_pattern.getKind()==EQUAL || d_match_pattern.getKind()==IFF ){ + Assert( d_matchPolicy==MATCH_GEN_DEFAULT ); + //we will be producing candidates via literal matching heuristics + if( d_pattern.getKind()!=NOT ){ + //candidates will be all equalities + d_cg = new uf::CandidateGeneratorTheoryUfLitEq( ith, d_match_pattern ); + }else{ + //candidates will be all disequalities + d_cg = new uf::CandidateGeneratorTheoryUfLitDeq( ith, d_match_pattern ); + } + }else if( d_pattern.getKind()==EQUAL || d_pattern.getKind()==IFF || d_pattern.getKind()==NOT ){ + Assert( d_matchPolicy==MATCH_GEN_DEFAULT ); + if( d_pattern.getKind()==NOT ){ + Unimplemented("Disequal generator unimplemented"); + }else{ + Assert( Trigger::isAtomicTrigger( d_match_pattern ) ); + //we are matching only in a particular equivalence class + d_cg = new uf::CandidateGeneratorTheoryUf( ith, d_match_pattern.getOperator() ); + //store the equivalence class that we will call d_cg->reset( ... ) on + d_eq_class = d_pattern[1]; + } + }else if( Trigger::isAtomicTrigger( d_match_pattern ) ){ + if( d_matchPolicy==MATCH_GEN_EFFICIENT_E_MATCH ){ + //we will manually add candidates to queue + d_cg = new CandidateGeneratorQueue; + //register this candidate generator + ith->registerCandidateGenerator( d_cg, d_match_pattern ); + }else{ + //we will be scanning lists trying to find d_match_pattern.getOperator() + d_cg = new uf::CandidateGeneratorTheoryUf( ith, d_match_pattern.getOperator() ); + } + }else{ + d_cg = new CandidateGeneratorQueue; + if( !Trigger::getPatternArithmetic( d_match_pattern.getAttribute(InstConstantAttribute()), d_match_pattern, d_arith_coeffs ) ){ + Debug("inst-match-gen") << "(?) Unknown matching pattern is " << d_match_pattern << std::endl; + Warning() << "(?) Unknown matching pattern is " << d_match_pattern << std::endl; + d_matchPolicy = MATCH_GEN_INTERNAL_ERROR; + }else{ + Debug("matching-arith") << "Generated arithmetic pattern for " << d_match_pattern << ": " << std::endl; + for( std::map< Node, Node >::iterator it = d_arith_coeffs.begin(); it != d_arith_coeffs.end(); ++it ){ + Debug("matching-arith") << " " << it->first << " -> " << it->second << std::endl; + } + //we will treat this as match gen internal arithmetic + d_matchPolicy = MATCH_GEN_INTERNAL_ARITHMETIC; + } + } +} + +/** get match (not modulo equality) */ +bool InstMatchGenerator::getMatch( Node t, InstMatch& m, QuantifiersEngine* qe ){ + Debug("matching") << "Matching " << t << " against pattern " << d_match_pattern << " (" + << m.d_map.size() << ")" << ", " << d_children.size() << std::endl; + Assert( !d_match_pattern.isNull() ); + if( d_matchPolicy==MATCH_GEN_INTERNAL_ARITHMETIC ){ + return getMatchArithmetic( t, m, qe ); + }else if( d_matchPolicy==MATCH_GEN_INTERNAL_ERROR ){ + return false; + }else{ + EqualityQuery* q = qe->getEqualityQuery(); + //add m to partial match vector + std::vector< InstMatch > partial; + partial.push_back( InstMatch( &m ) ); + //if t is null + Assert( !t.isNull() ); + Assert( !t.hasAttribute(InstConstantAttribute()) ); + Assert( t.getKind()==d_match_pattern.getKind() ); + Assert( !Trigger::isAtomicTrigger( d_match_pattern ) || t.getOperator()==d_match_pattern.getOperator() ); + //first, check if ground arguments are not equal, or a match is in conflict + for( int i=0; i<(int)d_match_pattern.getNumChildren(); i++ ){ + if( d_match_pattern[i].hasAttribute(InstConstantAttribute()) ){ + if( d_match_pattern[i].getKind()==INST_CONSTANT ){ + if( !partial[0].setMatch( q, d_match_pattern[i], t[i] ) ){ + //match is in conflict + Debug("matching-debug") << "Match in conflict " << t[i] << " and " + << d_match_pattern[i] << " because " + << partial[0].d_map[d_match_pattern[i]] + << std::endl; + Debug("matching-fail") << "Match fail: " << partial[0].d_map[d_match_pattern[i]] << " and " << t[i] << std::endl; + return false; + } + } + }else{ + if( !q->areEqual( d_match_pattern[i], t[i] ) ){ + Debug("matching-fail") << "Match fail arg: " << d_match_pattern[i] << " and " << t[i] << std::endl; + //ground arguments are not equal + return false; + } + } + } + //now, fit children into match + //we will be requesting candidates for matching terms for each child + std::vector< Node > reps; + for( int i=0; i<(int)d_children.size(); i++ ){ + Node rep = q->getRepresentative( t[ d_children_index[i] ] ); + reps.push_back( rep ); + d_children[i]->d_cg->reset( rep ); + } + + //combine child matches + int index = 0; + while( index>=0 && index<(int)d_children.size() ){ + partial.push_back( InstMatch( &partial[index] ) ); + if( d_children[index]->getNextMatch2( partial[index+1], qe ) ){ + index++; + }else{ + d_children[index]->d_cg->reset( reps[index] ); + partial.pop_back(); + if( !partial.empty() ){ + partial.pop_back(); + } + index--; + } + } + if( index>=0 ){ + m = partial.back(); + return true; + }else{ + return false; + } + } +} + +bool InstMatchGenerator::getNextMatch2( InstMatch& m, QuantifiersEngine* qe, bool saveMatched ){ + bool success = false; + Node t; + do{ + //get the next candidate term t + t = d_cg->getNextCandidate(); + //if t not null, try to fit it into match m + if( !t.isNull() && t.getType()==d_match_pattern.getType() ){ + //Assert( t.getType()==d_match_pattern.getType() ); + success = getMatch( t, m, qe ); + } + }while( !success && !t.isNull() ); + if (saveMatched) m.d_matched = t; + return success; +} + +bool InstMatchGenerator::getMatchArithmetic( Node t, InstMatch& m, QuantifiersEngine* qe ){ + Debug("matching-arith") << "Matching " << t << " " << d_match_pattern << std::endl; + if( !d_arith_coeffs.empty() ){ + NodeBuilder<> tb(kind::PLUS); + Node ic = Node::null(); + for( std::map< Node, Node >::iterator it = d_arith_coeffs.begin(); it != d_arith_coeffs.end(); ++it ){ + Debug("matching-arith") << it->first << " -> " << it->second << std::endl; + if( !it->first.isNull() ){ + if( m.d_map.find( it->first )==m.d_map.end() ){ + //see if we can choose this to set + if( ic.isNull() && ( it->second.isNull() || !it->first.getType().isInteger() ) ){ + ic = it->first; + } + }else{ + Debug("matching-arith") << "already set " << m.d_map[ it->first ] << std::endl; + Node tm = m.d_map[ it->first ]; + if( !it->second.isNull() ){ + tm = NodeManager::currentNM()->mkNode( MULT, it->second, tm ); + } + tb << tm; + } + }else{ + tb << it->second; + } + } + if( !ic.isNull() ){ + Node tm; + if( tb.getNumChildren()==0 ){ + tm = t; + }else{ + tm = tb.getNumChildren()==1 ? tb.getChild( 0 ) : tb; + tm = NodeManager::currentNM()->mkNode( MINUS, t, tm ); + } + if( !d_arith_coeffs[ ic ].isNull() ){ + Assert( !ic.getType().isInteger() ); + Node coeff = NodeManager::currentNM()->mkConst( Rational(1) / d_arith_coeffs[ ic ].getConst() ); + tm = NodeManager::currentNM()->mkNode( MULT, coeff, tm ); + } + m.d_map[ ic ] = Rewriter::rewrite( tm ); + //set the rest to zeros + for( std::map< Node, Node >::iterator it = d_arith_coeffs.begin(); it != d_arith_coeffs.end(); ++it ){ + if( !it->first.isNull() ){ + if( m.d_map.find( it->first )==m.d_map.end() ){ + m.d_map[ it->first ] = NodeManager::currentNM()->mkConst( Rational(0) ); + } + } + } + Debug("matching-arith") << "Setting " << ic << " to " << tm << std::endl; + return true; + }else{ + return false; + } + }else{ + return false; + } +} + + +/** reset instantiation round */ +void InstMatchGenerator::resetInstantiationRound( QuantifiersEngine* qe ){ + if( d_match_pattern.isNull() ){ + for( int i=0; i<(int)d_children.size(); i++ ){ + d_children[i]->resetInstantiationRound( qe ); + } + }else{ + if( d_cg ){ + d_cg->resetInstantiationRound(); + } + } +} + +void InstMatchGenerator::reset( Node eqc, QuantifiersEngine* qe ){ + if( d_match_pattern.isNull() ){ + for( int i=0; i<(int)d_children.size(); i++ ){ + d_children[i]->reset( eqc, qe ); + } + d_partial.clear(); + }else{ + if( !d_eq_class.isNull() ){ + //we have a specific equivalence class in mind + //we are producing matches for f(E) ~ t, where E is a non-ground vector of terms, and t is a ground term + //just look in equivalence class of the RHS + d_cg->reset( d_eq_class ); + }else{ + d_cg->reset( eqc ); + } + } +} + +bool InstMatchGenerator::getNextMatch( InstMatch& m, QuantifiersEngine* qe ){ + m.d_matched = Node::null(); + if( d_match_pattern.isNull() ){ + int index = (int)d_partial.size(); + while( index>=0 && index<(int)d_children.size() ){ + if( index>0 ){ + d_partial.push_back( InstMatch( &d_partial[index-1] ) ); + }else{ + d_partial.push_back( InstMatch() ); + } + if( d_children[index]->getNextMatch( d_partial[index], qe ) ){ + index++; + }else{ + d_children[index]->reset( Node::null(), qe ); + d_partial.pop_back(); + if( !d_partial.empty() ){ + d_partial.pop_back(); + } + index--; + } + } + if( index>=0 ){ + m = d_partial.back(); + d_partial.pop_back(); + return true; + }else{ + return false; + } + }else{ + bool res = getNextMatch2( m, qe, true ); + Assert(!res || !m.d_matched.isNull()); + return res; + } +} + + + +// Currently the implementation doesn't take into account that +// variable should have the same value given. +// TODO use the d_children way perhaps +// TODO replace by a real dictionnary +// We should create a real substitution? slower more precise +// We don't do that often +bool InstMatchGenerator::nonunifiable( TNode t0, const std::vector & vars){ + if(d_match_pattern.isNull()) return true; + + typedef std::vector > tstack; + tstack stack(1,std::make_pair(t0,d_match_pattern)); // t * pat + + while(!stack.empty()){ + const std::pair p = stack.back(); stack.pop_back(); + const TNode & t = p.first; + const TNode & pat = p.second; + + // t or pat is a variable currently we consider that can match anything + if( find(vars.begin(),vars.end(),t) != vars.end() ) continue; + if( pat.getKind() == INST_CONSTANT ) continue; + + // t and pat are nonunifiable + if( !Trigger::isAtomicTrigger( t ) || !Trigger::isAtomicTrigger( pat ) ) { + if(t == pat) continue; + else return true; + }; + if( t.getOperator() != pat.getOperator() ) return true; + + //put the children on the stack + for( size_t i=0; i < pat.getNumChildren(); i++ ){ + stack.push_back(std::make_pair(t[i],pat[i])); + }; + } + // The heuristic can't find non-unifiability + return false; +} + +int InstMatchGenerator::addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit, bool addSplits ){ + //now, try to add instantiation for each match produced + int addedLemmas = 0; + InstMatch m; + while( getNextMatch( m, qe ) ){ + //m.makeInternal( d_quantEngine->getEqualityQuery() ); + m.add( baseMatch ); + if( qe->addInstantiation( f, m, addSplits ) ){ + addedLemmas++; + if( instLimit>0 && addedLemmas==instLimit ){ + return addedLemmas; + } + } + m.clear(); + } + //return number of lemmas added + return addedLemmas; +} + +int InstMatchGenerator::addTerm( Node f, Node t, QuantifiersEngine* qe ){ + Assert( Options::current()->eagerInstQuant ); + if( !d_match_pattern.isNull() ){ + InstMatch m; + if( getMatch( t, m, qe ) ){ + if( qe->addInstantiation( f, m ) ){ + return 1; + } + } + }else{ + for( int i=0; i<(int)d_children.size(); i++ ){ + d_children[i]->addTerm( f, t, qe ); + } + } + return 0; +} + +/** constructors */ +InstMatchGeneratorMulti::InstMatchGeneratorMulti( Node f, std::vector< Node >& pats, QuantifiersEngine* qe, int matchOption ) : +d_f( f ){ + Debug("smart-multi-trigger") << "Making smart multi-trigger for " << f << std::endl; + std::map< Node, std::vector< Node > > var_contains; + Trigger::getVarContains( f, pats, var_contains ); + //convert to indicies + for( std::map< Node, std::vector< Node > >::iterator it = var_contains.begin(); it != var_contains.end(); ++it ){ + Debug("smart-multi-trigger") << "Pattern " << it->first << " contains: "; + for( int i=0; i<(int)it->second.size(); i++ ){ + Debug("smart-multi-trigger") << it->second[i] << " "; + int index = it->second[i].getAttribute(InstVarNumAttribute()); + d_var_contains[ it->first ].push_back( index ); + d_var_to_node[ index ].push_back( it->first ); + } + Debug("smart-multi-trigger") << std::endl; + } + for( int i=0; i<(int)pats.size(); i++ ){ + Node n = pats[i]; + //make the match generator + d_children.push_back( new InstMatchGenerator( n, qe, matchOption ) ); + //compute unique/shared variables + std::vector< int > unique_vars; + std::map< int, bool > shared_vars; + int numSharedVars = 0; + for( int j=0; j<(int)d_var_contains[n].size(); j++ ){ + if( d_var_to_node[ d_var_contains[n][j] ].size()==1 ){ + Debug("smart-multi-trigger") << "Var " << d_var_contains[n][j] << " is unique to " << pats[i] << std::endl; + unique_vars.push_back( d_var_contains[n][j] ); + }else{ + shared_vars[ d_var_contains[n][j] ] = true; + numSharedVars++; + } + } + //we use the latest shared variables, then unique variables + std::vector< int > vars; + int index = i==0 ? (int)(pats.size()-1) : (i-1); + while( numSharedVars>0 && index!=i ){ + for( std::map< int, bool >::iterator it = shared_vars.begin(); it != shared_vars.end(); ++it ){ + if( it->second ){ + if( std::find( d_var_contains[ pats[index] ].begin(), d_var_contains[ pats[index] ].end(), it->first )!= + d_var_contains[ pats[index] ].end() ){ + vars.push_back( it->first ); + shared_vars[ it->first ] = false; + numSharedVars--; + } + } + } + index = index==0 ? (int)(pats.size()-1) : (index-1); + } + vars.insert( vars.end(), unique_vars.begin(), unique_vars.end() ); + Debug("smart-multi-trigger") << " Index[" << i << "]: "; + for( int i=0; i<(int)vars.size(); i++ ){ + Debug("smart-multi-trigger") << vars[i] << " "; + } + Debug("smart-multi-trigger") << std::endl; + //make ordered inst match trie + InstMatchTrie::ImtIndexOrder* imtio = new InstMatchTrie::ImtIndexOrder; + imtio->d_order.insert( imtio->d_order.begin(), vars.begin(), vars.end() ); + d_children_trie.push_back( InstMatchTrieOrdered( imtio ) ); + } + +} + +/** reset instantiation round (call this whenever equivalence classes have changed) */ +void InstMatchGeneratorMulti::resetInstantiationRound( QuantifiersEngine* qe ){ + for( int i=0; i<(int)d_children.size(); i++ ){ + d_children[i]->resetInstantiationRound( qe ); + } +} + +/** reset, eqc is the equivalence class to search in (any if eqc=null) */ +void InstMatchGeneratorMulti::reset( Node eqc, QuantifiersEngine* qe ){ + for( int i=0; i<(int)d_children.size(); i++ ){ + d_children[i]->reset( eqc, qe ); + } +} + +void InstMatchGeneratorMulti::collectInstantiations( QuantifiersEngine* qe, InstMatch& m, int& addedLemmas, InstMatchTrie* tr, + std::vector< IndexedTrie >& unique_var_tries, + int trieIndex, int childIndex, int endChildIndex, bool modEq ){ + if( childIndex==endChildIndex ){ + //now, process unique variables + collectInstantiations2( qe, m, addedLemmas, unique_var_tries, 0 ); + }else if( trieIndex<(int)d_children_trie[childIndex].getOrdering()->d_order.size() ){ + int curr_index = d_children_trie[childIndex].getOrdering()->d_order[trieIndex]; + Node curr_ic = qe->getInstantiationConstant( d_f, curr_index ); + if( m.d_map.find( curr_ic )==m.d_map.end() ){ + //if( d_var_to_node[ curr_index ].size()==1 ){ //FIXME + // //unique variable(s), defer calculation + // unique_var_tries.push_back( IndexedTrie( std::pair< int, int >( childIndex, trieIndex ), tr ) ); + // int newChildIndex = (childIndex+1)%(int)d_children.size(); + // collectInstantiations( qe, m, d_children_trie[newChildIndex].getTrie(), unique_var_tries, + // 0, newChildIndex, endChildIndex, modEq ); + //}else{ + //shared and non-set variable, add to InstMatch + for( std::map< Node, InstMatchTrie >::iterator it = tr->d_data.begin(); it != tr->d_data.end(); ++it ){ + InstMatch mn( &m ); + mn.d_map[ curr_ic ] = it->first; + collectInstantiations( qe, mn, addedLemmas, &(it->second), unique_var_tries, + trieIndex+1, childIndex, endChildIndex, modEq ); + } + //} + }else{ + //shared and set variable, try to merge + Node n = m.d_map[ curr_ic ]; + std::map< Node, InstMatchTrie >::iterator it = tr->d_data.find( n ); + if( it!=tr->d_data.end() ){ + collectInstantiations( qe, m, addedLemmas, &(it->second), unique_var_tries, + trieIndex+1, childIndex, endChildIndex, modEq ); + } + if( modEq ){ + //check modulo equality for other possible instantiations + if( ((uf::TheoryUF*)qe->getTheoryEngine()->getTheory( THEORY_UF ))->getEqualityEngine()->hasTerm( n ) ){ + eq::EqClassIterator eqc( qe->getEqualityQuery()->getRepresentative( n ), + ((uf::TheoryUF*)qe->getTheoryEngine()->getTheory( THEORY_UF ))->getEqualityEngine() ); + while( !eqc.isFinished() ){ + Node en = (*eqc); + if( en!=n ){ + std::map< Node, InstMatchTrie >::iterator itc = tr->d_data.find( en ); + if( itc!=tr->d_data.end() ){ + collectInstantiations( qe, m, addedLemmas, &(itc->second), unique_var_tries, + trieIndex+1, childIndex, endChildIndex, modEq ); + } + } + ++eqc; + } + } + } + } + }else{ + int newChildIndex = (childIndex+1)%(int)d_children.size(); + collectInstantiations( qe, m, addedLemmas, d_children_trie[newChildIndex].getTrie(), unique_var_tries, + 0, newChildIndex, endChildIndex, modEq ); + } +} + +void InstMatchGeneratorMulti::collectInstantiations2( QuantifiersEngine* qe, InstMatch& m, int& addedLemmas, + std::vector< IndexedTrie >& unique_var_tries, + int uvtIndex, InstMatchTrie* tr, int trieIndex ){ + if( uvtIndex<(int)unique_var_tries.size() ){ + int childIndex = unique_var_tries[uvtIndex].first.first; + if( !tr ){ + tr = unique_var_tries[uvtIndex].second; + trieIndex = unique_var_tries[uvtIndex].first.second; + } + if( trieIndex<(int)d_children_trie[childIndex].getOrdering()->d_order.size() ){ + int curr_index = d_children_trie[childIndex].getOrdering()->d_order[trieIndex]; + Node curr_ic = qe->getInstantiationConstant( d_f, curr_index ); + //unique non-set variable, add to InstMatch + for( std::map< Node, InstMatchTrie >::iterator it = tr->d_data.begin(); it != tr->d_data.end(); ++it ){ + InstMatch mn( &m ); + mn.d_map[ curr_ic ] = it->first; + collectInstantiations2( qe, mn, addedLemmas, unique_var_tries, uvtIndex, &(it->second), trieIndex+1 ); + } + }else{ + collectInstantiations2( qe, m, addedLemmas, unique_var_tries, uvtIndex+1 ); + } + }else{ + //m is an instantiation + if( qe->addInstantiation( d_f, m, true ) ){ + addedLemmas++; + Debug("smart-multi-trigger") << "-> Produced instantiation " << m << std::endl; + } + } +} + +int InstMatchGeneratorMulti::addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit, bool addSplits ){ + int addedLemmas = 0; + Debug("smart-multi-trigger") << "Process smart multi trigger" << std::endl; + for( int i=0; i<(int)d_children.size(); i++ ){ + Debug("smart-multi-trigger") << "Calculate matches " << i << std::endl; + std::vector< InstMatch > newMatches; + InstMatch m; + while( d_children[i]->getNextMatch( m, qe ) ){ + m.makeRepresentative( qe ); + newMatches.push_back( InstMatch( &m ) ); + m.clear(); + } + for( int j=0; j<(int)newMatches.size(); j++ ){ + processNewMatch( qe, newMatches[j], i, addedLemmas ); + } + } + return addedLemmas; +} + +void InstMatchGeneratorMulti::processNewMatch( QuantifiersEngine* qe, InstMatch& m, int fromChildIndex, int& addedLemmas ){ + //see if these produce new matches + d_children_trie[fromChildIndex].addInstMatch( qe, d_f, m, true ); + //possibly only do the following if we know that new matches will be produced? + //the issue is that instantiations are filtered in quantifiers engine, and so there is no guarentee that + // we can safely skip the following lines, even when we have already produced this match. + Debug("smart-multi-trigger") << "Child " << fromChildIndex << " produced match " << m << std::endl; + //collect new instantiations + int childIndex = (fromChildIndex+1)%(int)d_children.size(); + std::vector< IndexedTrie > unique_var_tries; + collectInstantiations( qe, m, addedLemmas, + d_children_trie[childIndex].getTrie(), unique_var_tries, 0, childIndex, fromChildIndex, true ); +} + +int InstMatchGeneratorMulti::addTerm( Node f, Node t, QuantifiersEngine* qe ){ + Assert( Options::current()->eagerInstQuant ); + int addedLemmas = 0; + for( int i=0; i<(int)d_children.size(); i++ ){ + if( ((InstMatchGenerator*)d_children[i])->d_match_pattern.getOperator()==t.getOperator() ){ + InstMatch m; + //if it produces a match, then process it with the rest + if( ((InstMatchGenerator*)d_children[i])->getMatch( t, m, qe ) ){ + processNewMatch( qe, m, i, addedLemmas ); + } + } + } + return addedLemmas; +} + +int InstMatchGeneratorSimple::addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit, bool addSplits ){ + InstMatch m; + m.add( baseMatch ); + int addedLemmas = 0; + if( d_match_pattern.getType()==NodeManager::currentNM()->booleanType() ){ + for( int i=0; i<2; i++ ){ + addInstantiations( m, qe, addedLemmas, 0, &(qe->getTermDatabase()->d_pred_map_trie[i][ d_match_pattern.getOperator() ]), + instLimit, addSplits ); + } + }else{ + addInstantiations( m, qe, addedLemmas, 0, &(qe->getTermDatabase()->d_func_map_trie[ d_match_pattern.getOperator() ]), + instLimit, addSplits ); + } + return addedLemmas; +} + +void InstMatchGeneratorSimple::addInstantiations( InstMatch& m, QuantifiersEngine* qe, int& addedLemmas, int argIndex, + TermArgTrie* tat, int instLimit, bool addSplits ){ + if( argIndex==(int)d_match_pattern.getNumChildren() ){ + //m is an instantiation + if( qe->addInstantiation( d_f, m, addSplits ) ){ + addedLemmas++; + Debug("simple-multi-trigger") << "-> Produced instantiation " << m << std::endl; + } + }else{ + if( d_match_pattern[argIndex].getKind()==INST_CONSTANT ){ + Node ic = d_match_pattern[argIndex]; + for( std::map< Node, TermArgTrie >::iterator it = tat->d_data.begin(); it != tat->d_data.end(); ++it ){ + Node t = it->first; + if( m.d_map[ ic ].isNull() || m.d_map[ ic ]==t ){ + Node prev = m.d_map[ ic ]; + m.d_map[ ic ] = t; + addInstantiations( m, qe, addedLemmas, argIndex+1, &(it->second), instLimit, addSplits ); + m.d_map[ ic ] = prev; + } + } + }else{ + Node r = qe->getEqualityQuery()->getRepresentative( d_match_pattern[argIndex] ); + std::map< Node, TermArgTrie >::iterator it = tat->d_data.find( r ); + if( it!=tat->d_data.end() ){ + addInstantiations( m, qe, addedLemmas, argIndex+1, &(it->second), instLimit, addSplits ); + } + } + } +} + +int InstMatchGeneratorSimple::addTerm( Node f, Node t, QuantifiersEngine* qe ){ + Assert( Options::current()->eagerInstQuant ); + InstMatch m; + for( int i=0; i<(int)t.getNumChildren(); i++ ){ + if( d_match_pattern[i].getKind()==INST_CONSTANT ){ + m.d_map[d_match_pattern[i]] = t[i]; + }else if( !qe->getEqualityQuery()->areEqual( d_match_pattern[i], t[i] ) ){ + return 0; + } + } + return qe->addInstantiation( f, m ) ? 1 : 0; +} diff --git a/src/theory/inst_match.h b/src/theory/inst_match.h new file mode 100644 index 000000000..73a99bcc5 --- /dev/null +++ b/src/theory/inst_match.h @@ -0,0 +1,443 @@ +/********************* */ +/*! \file inst_match.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief inst match class + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__INST_MATCH_H +#define __CVC4__INST_MATCH_H + +#include "theory/theory.h" +#include "util/hash.h" + +#include +#include +#include + +#include "theory/uf/equality_engine.h" +#include "theory/uf/theory_uf.h" +#include "context/cdlist.h" + +//#define USE_EFFICIENT_E_MATCHING + +namespace CVC4 { +namespace theory { + +/** Attribute true for nodes that should not be used for matching */ +struct NoMatchAttributeId {}; +/** use the special for boolean flag */ +typedef expr::Attribute< NoMatchAttributeId, + bool, + expr::attr::NullCleanupStrategy, + true // context dependent + > NoMatchAttribute; + +class QuantifiersEngine; + +namespace uf { + class InstantiatorTheoryUf; + class TheoryUF; +}/* CVC4::theory::uf namespace */ + +class CandidateGenerator { +public: + CandidateGenerator(){} + ~CandidateGenerator(){} + + /** Get candidates functions. These set up a context to get all match candidates. + cg->reset( eqc ); + do{ + Node cand = cg->getNextCandidate(); + //....... + }while( !cand.isNull() ); + + eqc is the equivalence class you are searching in + */ + virtual void reset( Node eqc ) = 0; + virtual Node getNextCandidate() = 0; + /** add candidate to list of nodes returned by this generator */ + virtual void addCandidate( Node n ) {} + /** call this at the beginning of each instantiation round */ + virtual void resetInstantiationRound() = 0; +public: + /** legal candidate */ + static bool isLegalCandidate( Node n ); +};/* class CandidateGenerator */ + +/** candidate generator queue (for manual candidate generation) */ +class CandidateGeneratorQueue : public CandidateGenerator { +private: + std::vector< Node > d_candidates; + int d_candidate_index; +public: + CandidateGeneratorQueue() : d_candidate_index( 0 ){} + ~CandidateGeneratorQueue(){} + + void addCandidate( Node n ); + + void resetInstantiationRound(){} + void reset( Node eqc ); + Node getNextCandidate(); +};/* class CandidateGeneratorQueue */ + +class EqualityQuery { +public: + EqualityQuery(){} + ~EqualityQuery(){} + /** contains term */ + virtual bool hasTerm( Node a ) = 0; + /** get the representative of the equivalence class of a */ + virtual Node getRepresentative( Node a ) = 0; + /** returns true if a and b are equal in the current context */ + virtual bool areEqual( Node a, Node b ) = 0; + /** returns true is a and b are disequal in the current context */ + virtual bool areDisequal( Node a, Node b ) = 0; + /** getInternalRepresentative gets the current best representative in the equivalence class of a, based on some criteria. + If cbqi is active, this will return a term in the equivalence class of "a" that does + not contain instantiation constants, if such a term exists. + */ + virtual Node getInternalRepresentative( Node a ) = 0; +};/* class EqualityQuery */ + +/** basic class defining an instantiation */ +class InstMatch { +public: + InstMatch(); + InstMatch( InstMatch* m ); + + /** set the match of v to m */ + bool setMatch( EqualityQuery* q, Node v, Node m ); + /** fill all unfilled values with m */ + bool add( InstMatch& m ); + /** if compatible, fill all unfilled values with m and return true + return false otherwise */ + bool merge( EqualityQuery* q, InstMatch& m ); + /** debug print method */ + void debugPrint( const char* c ); + /** make complete */ + void makeComplete( Node f, QuantifiersEngine* qe ); + /** make internal: ensure that no term in d_map contains instantiation constants */ + void makeInternal( QuantifiersEngine* qe ); + /** make representative */ + void makeRepresentative( QuantifiersEngine* qe ); + /** apply rewrite */ + void applyRewrite(); + /** compute d_match */ + void computeTermVec( QuantifiersEngine* qe, const std::vector< Node >& vars, std::vector< Node >& match ); + /** compute d_match */ + void computeTermVec( const std::vector< Node >& vars, std::vector< Node >& match ); + /** clear */ + void clear(){ d_map.clear(); } + /** is_empty */ + bool empty(){ return d_map.empty(); } + /* map from variable to ground terms */ + std::map< Node, Node > d_map; + /* Node used for matching the trigger only for mono-trigger (just for + efficiency because I need only that) */ + Node d_matched; + /** to stream */ + inline void toStream(std::ostream& out) const { + out << "INST_MATCH( "; + for( std::map< Node, Node >::const_iterator it = d_map.begin(); it != d_map.end(); ++it ){ + if( it != d_map.begin() ){ out << ", "; } + out << it->first << " -> " << it->second; + } + out << " )"; + } +};/* class InstMatch */ + +inline std::ostream& operator<<(std::ostream& out, const InstMatch& m) { + m.toStream(out); + return out; +} + +/** trie for InstMatch objects */ +class InstMatchTrie { +public: + class ImtIndexOrder { + public: + std::vector< int > d_order; + };/* class InstMatchTrie ImtIndexOrder */ +private: + /** add match m for quantifier f starting at index, take into account equalities q, return true if successful */ + void addInstMatch2( QuantifiersEngine* qe, Node f, InstMatch& m, int index, ImtIndexOrder* imtio ); + /** exists match */ + bool existsInstMatch( QuantifiersEngine* qe, Node f, InstMatch& m, bool modEq, int index, ImtIndexOrder* imtio ); +public: + /** the data */ + std::map< Node, InstMatchTrie > d_data; +public: + InstMatchTrie(){} + ~InstMatchTrie(){} +public: + /** add match m for quantifier f, take into account equalities if modEq = true, + if imtio is non-null, this is the order to add to trie + return true if successful + */ + bool addInstMatch( QuantifiersEngine* qe, Node f, InstMatch& m, bool modEq = false, ImtIndexOrder* imtio = NULL ); +};/* class InstMatchTrie */ + +class InstMatchTrieOrdered { +private: + InstMatchTrie::ImtIndexOrder* d_imtio; + InstMatchTrie d_imt; +public: + InstMatchTrieOrdered( InstMatchTrie::ImtIndexOrder* imtio ) : d_imtio( imtio ){} + ~InstMatchTrieOrdered(){} + /** get ordering */ + InstMatchTrie::ImtIndexOrder* getOrdering() { return d_imtio; } + /** get trie */ + InstMatchTrie* getTrie() { return &d_imt; } +public: + /** add match m, return true if successful */ + bool addInstMatch( QuantifiersEngine* qe, Node f, InstMatch& m, bool modEq = false ){ + return d_imt.addInstMatch( qe, f, m, modEq, d_imtio ); + } +};/* class InstMatchTrieOrdered */ + +template +class InstMatchTrie2 { +private: + + class Tree { + public: + typedef std::hash_map< Node, Tree *, NodeHashFunction > MLevel; + MLevel e; + const size_t level; //context level of creation + Tree() CVC4_UNDEFINED; + const Tree & operator =(const Tree & t) CVC4_UNDEFINED; + Tree(size_t l): level(l) {}; + ~Tree(){ + for(typename MLevel::iterator i = e.begin(); i!=e.end(); ++i) + delete(i->second); + }; + };/* class InstMatchTrie2::Tree */ + + + typedef std::pair Mod; + + class CleanUp { + public: + inline void operator()(Mod * m){ + typename Tree::MLevel::iterator i = m->first->e.find(m->second); + Assert (i != m->first->e.end()); //should not have been already removed + m->first->e.erase(i); + } + };/* class InstMatchTrie2::CleanUp */ + + EqualityQuery* d_eQ; + eq::EqualityEngine* d_eE; + + /* before for the order of destruction */ + Tree d_data; + + context::Context* d_context; + context::CDList > d_mods; + + typedef std::map::const_iterator mapIter; + + /** add the substitution given by the iterator*/ + void addSubTree( Tree* root, mapIter current, mapIter end, size_t currLevel); + /** test if it exists match, modulo uf-equations if modEq is true if + * return false the deepest point of divergence is put in [e] and + * [diverge]. + */ + bool existsInstMatch( Tree* root, + mapIter & current, mapIter& end, + Tree*& e, mapIter& diverge) const; + +public: + InstMatchTrie2(context::Context* c, QuantifiersEngine* q); + InstMatchTrie2(const InstMatchTrie2&) CVC4_UNDEFINED; + const InstMatchTrie2& operator=(const InstMatchTrie2 & e) CVC4_UNDEFINED; + /** add match m in the trie, + modEq specify to take into account equalities, + return true if it was never seen */ + bool addInstMatch( InstMatch& m); +};/* class InstMatchTrie2 */ + +/** base class for producing InstMatch objects */ +class IMGenerator { +public: + /** reset instantiation round (call this at beginning of instantiation round) */ + virtual void resetInstantiationRound( QuantifiersEngine* qe ) = 0; + /** reset, eqc is the equivalence class to search in (any if eqc=null) */ + virtual void reset( Node eqc, QuantifiersEngine* qe ) = 0; + /** get the next match. must call reset( eqc ) before this function. */ + virtual bool getNextMatch( InstMatch& m, QuantifiersEngine* qe ) = 0; + /** return true if whatever Node is subsituted for the variables the + given Node can't match the pattern */ + virtual bool nonunifiable( TNode t, const std::vector & vars) = 0; + /** add instantiations directly */ + virtual int addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit = 0, bool addSplits = false ) = 0; + /** add ground term t, called when t is added to term db */ + virtual int addTerm( Node f, Node t, QuantifiersEngine* qe ) = 0; +};/* class IMGenerator */ + + +class InstMatchGenerator : public IMGenerator { +private: + /** candidate generator */ + CandidateGenerator* d_cg; + /** policy to use for matching */ + int d_matchPolicy; + /** children generators */ + std::vector< InstMatchGenerator* > d_children; + std::vector< int > d_children_index; + /** partial vector */ + std::vector< InstMatch > d_partial; + /** eq class */ + Node d_eq_class; + /** for arithmetic matching */ + std::map< Node, Node > d_arith_coeffs; + /** initialize pattern */ + void initializePatterns( std::vector< Node >& pats, QuantifiersEngine* qe ); + void initializePattern( Node pat, QuantifiersEngine* qe ); +public: + enum { + //options for producing matches + MATCH_GEN_DEFAULT = 0, + MATCH_GEN_EFFICIENT_E_MATCH, //generate matches via Efficient E-matching for SMT solvers + //others (internally used) + MATCH_GEN_INTERNAL_ARITHMETIC, + MATCH_GEN_INTERNAL_ERROR, + }; +private: + /** get the next match. must call d_cg->reset( ... ) before using. + only valid for use where !d_match_pattern.isNull(). + */ + bool getNextMatch2( InstMatch& m, QuantifiersEngine* qe, bool saveMatched = false ); + /** for arithmetic */ + bool getMatchArithmetic( Node t, InstMatch& m, QuantifiersEngine* qe ); +public: + /** get the match against ground term or formula t. + d_match_mattern and t should have the same shape. + only valid for use where !d_match_pattern.isNull(). + */ + bool getMatch( Node t, InstMatch& m, QuantifiersEngine* qe ); + + /** constructors */ + InstMatchGenerator( Node pat, QuantifiersEngine* qe, int matchOption = 0 ); + InstMatchGenerator( std::vector< Node >& pats, QuantifiersEngine* qe, int matchOption = 0 ); + /** destructor */ + ~InstMatchGenerator(){} + /** The pattern we are producing matches for. + If null, this is a multi trigger that is merging matches from d_children. + */ + Node d_pattern; + /** match pattern */ + Node d_match_pattern; +public: + /** reset instantiation round (call this whenever equivalence classes have changed) */ + void resetInstantiationRound( QuantifiersEngine* qe ); + /** reset, eqc is the equivalence class to search in (any if eqc=null) */ + void reset( Node eqc, QuantifiersEngine* qe ); + /** get the next match. must call reset( eqc ) before this function. */ + bool getNextMatch( InstMatch& m, QuantifiersEngine* qe ); + /** return true if whatever Node is subsituted for the variables the + given Node can't match the pattern */ + bool nonunifiable( TNode t, const std::vector & vars); + /** add instantiations */ + int addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit = 0, bool addSplits = false ); + /** add ground term t */ + int addTerm( Node f, Node t, QuantifiersEngine* qe ); +};/* class InstMatchGenerator */ + +/** smart multi-trigger implementation */ +class InstMatchGeneratorMulti : public IMGenerator { +private: + void processNewMatch( QuantifiersEngine* qe, InstMatch& m, int fromChildIndex, int& addedLemmas ); +private: + /** indexed trie */ + typedef std::pair< std::pair< int, int >, InstMatchTrie* > IndexedTrie; + /** collect instantiations */ + void collectInstantiations( QuantifiersEngine* qe, InstMatch& m, int& addedLemmas, InstMatchTrie* tr, + std::vector< IndexedTrie >& unique_var_tries, + int trieIndex, int childIndex, int endChildIndex, bool modEq ); + /** collect instantiations 2 */ + void collectInstantiations2( QuantifiersEngine* qe, InstMatch& m, int& addedLemmas, + std::vector< IndexedTrie >& unique_var_tries, + int uvtIndex, InstMatchTrie* tr = NULL, int trieIndex = 0 ); +private: + /** var contains (variable indicies) for each pattern node */ + std::map< Node, std::vector< int > > d_var_contains; + /** variable indicies contained to pattern nodes */ + std::map< int, std::vector< Node > > d_var_to_node; + /** quantifier to use */ + Node d_f; + /** policy to use for matching */ + int d_matchPolicy; + /** children generators */ + std::vector< InstMatchGenerator* > d_children; + /** inst match tries for each child */ + std::vector< InstMatchTrieOrdered > d_children_trie; + /** calculate matches */ + void calculateMatches( QuantifiersEngine* qe ); +public: + /** constructors */ + InstMatchGeneratorMulti( Node f, std::vector< Node >& pats, QuantifiersEngine* qe, int matchOption = 0 ); + /** destructor */ + ~InstMatchGeneratorMulti(){} + /** reset instantiation round (call this whenever equivalence classes have changed) */ + void resetInstantiationRound( QuantifiersEngine* qe ); + /** reset, eqc is the equivalence class to search in (any if eqc=null) */ + void reset( Node eqc, QuantifiersEngine* qe ); + /** get the next match. must call reset( eqc ) before this function. (not implemented) */ + bool getNextMatch( InstMatch& m, QuantifiersEngine* qe ) { return false; } + /** return true if whatever Node is subsituted for the variables the + given Node can't match the pattern */ + bool nonunifiable( TNode t, const std::vector & vars) { return true; } + /** add instantiations */ + int addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit = 0, bool addSplits = false ); + /** add ground term t */ + int addTerm( Node f, Node t, QuantifiersEngine* qe ); +};/* class InstMatchGeneratorMulti */ + +class TermArgTrie; + +/** smart (single)-trigger implementation */ +class InstMatchGeneratorSimple : public IMGenerator { +private: + /** quantifier for match term */ + Node d_f; + /** match term */ + Node d_match_pattern; + /** add instantiations */ + void addInstantiations( InstMatch& m, QuantifiersEngine* qe, int& addedLemmas, + int argIndex, TermArgTrie* tat, int instLimit, bool addSplits ); +public: + /** constructors */ + InstMatchGeneratorSimple( Node f, Node pat ) : d_f( f ), d_match_pattern( pat ){} + /** destructor */ + ~InstMatchGeneratorSimple(){} + /** reset instantiation round (call this whenever equivalence classes have changed) */ + void resetInstantiationRound( QuantifiersEngine* qe ) {} + /** reset, eqc is the equivalence class to search in (any if eqc=null) */ + void reset( Node eqc, QuantifiersEngine* qe ) {} + /** get the next match. must call reset( eqc ) before this function. (not implemented) */ + bool getNextMatch( InstMatch& m, QuantifiersEngine* qe ) { return false; } + /** return true if whatever Node is subsituted for the variables the + given Node can't match the pattern */ + bool nonunifiable( TNode t, const std::vector & vars) { return true; } + /** add instantiations */ + int addInstantiations( Node f, InstMatch& baseMatch, QuantifiersEngine* qe, int instLimit = 0, bool addSplits = false ); + /** add ground term t, possibly add instantiations */ + int addTerm( Node f, Node t, QuantifiersEngine* qe ); +};/* class InstMatchGeneratorSimple */ + +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__INST_MATCH_H */ diff --git a/src/theory/inst_match_impl.h b/src/theory/inst_match_impl.h new file mode 100644 index 000000000..18c4998b8 --- /dev/null +++ b/src/theory/inst_match_impl.h @@ -0,0 +1,125 @@ +/********************* */ +/*! \file inst_match.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief inst match class + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__INST_MATCH_IMPL_H +#define __CVC4__INST_MATCH_IMPL_H + +#include "theory/inst_match.h" +#include "theory/theory_engine.h" +#include "theory/quantifiers_engine.h" +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/uf/theory_uf_candidate_generator.h" +#include "theory/uf/equality_engine.h" + +namespace CVC4 { +namespace theory { + +template +InstMatchTrie2::InstMatchTrie2(context::Context* c, QuantifiersEngine* qe): + d_data(c->getLevel()), d_context(c), d_mods(c) { + d_eQ = qe->getEqualityQuery(); + d_eE = ((uf::TheoryUF*)qe->getTheoryEngine()->getTheory( THEORY_UF ))->getEqualityEngine(); +}; + +/** add match m for quantifier f starting at index, take into account equalities q, return true if successful */ +template +void InstMatchTrie2::addSubTree( Tree * root, mapIter current, mapIter end, size_t currLevel ) { + if( current == end ) return; + + Assert(root->e.find(current->second) == root->e.end()); + Tree * root2 = new Tree(currLevel); + root->e.insert(make_pair(current->second, root2)); + addSubTree(root2, ++current, end, currLevel ); +} + +/** exists match */ +template +bool InstMatchTrie2::existsInstMatch(InstMatchTrie2::Tree * root, + mapIter & current, mapIter & end, + Tree * & e, mapIter & diverge) const{ + if( current == end ) { + Debug("Trie2") << "Trie2 Bottom " << std::endl; + --current; + return true; + }; //Already their + + if (current->first > diverge->first){ + // this point is the deepest point currently seen map are ordered + e = root; + diverge = current; + }; + + TNode n = current->second; + typename InstMatchTrie2::Tree::MLevel::iterator it = + root->e.find( n ); + if( it!=root->e.end() && + existsInstMatch( (*it).second, ++current, end, e, diverge) ){ + Debug("Trie2") << "Trie2 Directly here " << n << std::endl; + --current; + return true; + } + Assert( it==root->e.end() || e != root ); + + // Even if n is in the trie others of the equivalence class + // can also be in it since the equality can have appeared + // after they have been added + if( modEq && d_eE->hasTerm( n ) ){ + //check modulo equality if any other instantiation match exists + eq::EqClassIterator eqc( d_eQ->getRepresentative( n ), d_eE ); + for( ;!eqc.isFinished();++eqc ){ + TNode en = (*eqc); + if( en == n ) continue; // already tested + typename InstMatchTrie2::Tree::MLevel::iterator itc = + root->e.find( en ); + if( itc!=root->e.end() && + existsInstMatch( (*itc).second, ++current, end, e, diverge) ){ + Debug("Trie2") << "Trie2 Indirectly here by equality " << n << " = " << en << std::endl; + --current; + return true; + } + Assert( itc==root->e.end() || e != root ); + } + } + --current; + return false; +} + +template +bool InstMatchTrie2::addInstMatch( InstMatch& m ) { + mapIter begin = m.d_map.begin(); + mapIter end = m.d_map.end(); + InstMatchTrie2::Tree * e = &d_data; + mapIter diverge = begin; + if( !existsInstMatch(e, begin, end, e, diverge ) ){ + Assert(!diverge->second.isNull()); + size_t currLevel = d_context->getLevel(); + addSubTree( e, diverge, end, currLevel ); + if(e->level != currLevel) + //If same level that e, will be removed at the same time than e + d_mods.push_back(make_pair(e,diverge->second)); + return true; + }else{ + return false; + } +} + +}/* CVC4::theory namespace */ + +}/* CVC4 namespace */ + +#endif /* __CVC4__INST_MATCH_IMPL_H */ diff --git a/src/theory/instantiator_default.cpp b/src/theory/instantiator_default.cpp new file mode 100644 index 000000000..4d6ea2fdb --- /dev/null +++ b/src/theory/instantiator_default.cpp @@ -0,0 +1,54 @@ +/********************* */ +/*! \file instantiator_default.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of instantiator_default class + **/ + +#include "theory/instantiator_default.h" +#include "theory/theory_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; + +InstantiatorDefault::InstantiatorDefault(context::Context* c, QuantifiersEngine* ie, Theory* th) : + Instantiator( c, ie, th ) { +} + +void InstantiatorDefault::assertNode( Node assertion ){ +} + +void InstantiatorDefault::processResetInstantiationRound( Theory::Effort effort ){ +} + +int InstantiatorDefault::process( Node f, Theory::Effort effort, int e, int limitInst ){ + if( e < 4 ){ + return InstStrategy::STATUS_UNFINISHED; + }else if( e == 4 ){ + Debug("quant-default") << "Process " << f << " : " << std::endl; + InstMatch m; + for( int j=0; j<(int)d_quantEngine->getNumInstantiationConstants( f ); j++ ){ + Node i = d_quantEngine->getInstantiationConstant( f, j ); + Debug("quant-default") << "Getting value for " << i << std::endl; + if( d_quantEngine->getTheoryEngine()->theoryOf( i )==getTheory() ){ //if it belongs to this theory + Node val = d_th->getValue( i ); + Debug("quant-default") << "Default Instantiate for " << d_th->getId() << ", setting " << i << " = " << val << std::endl; + m.d_map[ i ] = val; + } + } + d_quantEngine->addInstantiation( f, m ); + } + return InstStrategy::STATUS_UNKNOWN; +} diff --git a/src/theory/instantiator_default.h b/src/theory/instantiator_default.h new file mode 100644 index 000000000..351d0c4a3 --- /dev/null +++ b/src/theory/instantiator_default.h @@ -0,0 +1,48 @@ +/********************* */ +/*! \file instantiator_default.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief instantiator_default + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__INSTANTIATOR_DEFAULT_H +#define __CVC4__INSTANTIATOR_DEFAULT_H + +#include +#include "theory/quantifiers_engine.h" + +namespace CVC4 { +namespace theory { + +class InstantiatorDefault : public Instantiator { + friend class QuantifiersEngine; +protected: + /** reset instantiation round */ + void processResetInstantiationRound(Theory::Effort effort); + /** process quantifier */ + int process(Node f, Theory::Effort effort, int e, int limitInst = 0); +public: + InstantiatorDefault(context::Context* c, QuantifiersEngine* ie, Theory* th); + ~InstantiatorDefault() { } + /** check function, assertion is asserted to theory */ + void assertNode( Node assertion ); + /** identify */ + std::string identify() const { return std::string("InstantiatorDefault"); } +};/* class Instantiatior */ + +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__INSTANTIATOR_DEFAULT_H */ diff --git a/src/theory/instantiator_tables_template.cpp b/src/theory/instantiator_tables_template.cpp new file mode 100644 index 000000000..7a78c3aae --- /dev/null +++ b/src/theory/instantiator_tables_template.cpp @@ -0,0 +1,40 @@ +/********************* */ +/*! \file instantiator_tables_template.cpp + ** \verbatim + ** Original author: mdeters + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011, 2012 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Instantiator tables for quantifier-friendly theories + ** + ** This file contains template code for the instantiator tables that are + ** generated from the Theory kinds files. + **/ + +#include "context/context.h" +#include "theory/quantifiers_engine.h" + +${instantiator_includes} + +#line 26 "${template}" + +namespace CVC4 { +namespace theory { + +Instantiator* Theory::makeInstantiator(context::Context* c, theory::QuantifiersEngine* qe) { + switch(d_id) { +${make_instantiator_cases} +#line 34 "${template}" + default: + Unhandled(d_id); + } +} + +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ diff --git a/src/theory/mkinstantiator b/src/theory/mkinstantiator new file mode 100755 index 000000000..1908d2e96 --- /dev/null +++ b/src/theory/mkinstantiator @@ -0,0 +1,242 @@ +#!/bin/bash +# +# mkinstantiator +# Morgan Deters for CVC4 +# Copyright (c) 2010-2012 The CVC4 Project +# +# The purpose of this script is to create rewriter_tables.h from a template +# and a list of theory kinds. +# +# Invocation: +# +# mkinstantiator template-file theory-kind-files... +# +# Output is to standard out. +# + +copyright=2010-2012 + +cat <&2 + exit 1; + fi + + seen_theory=true + if [ "$1" = THEORY_BUILTIN ]; then + if $seen_theory_builtin; then + echo "$kf:$lineno: error: \"builtin\" theory redefined" >&2 + exit 1 + fi + seen_theory_builtin=true + elif [ -z "$1" -o -z "$2" -o -z "$3" ]; then + echo "$kf:$lineno: error: \"theory\" directive missing class or header argument" >&2 + exit 1 + elif ! expr "$2" : '\(::*\)' >/dev/null; then + echo "$kf:$lineno: warning: theory class \`$2' isn't fully-qualified (e.g., ::CVC4::theory::foo)" >&2 + elif ! expr "$2" : '\(::CVC4::theory::*\)' >/dev/null; then + echo "$kf:$lineno: warning: theory class not under ::CVC4::theory namespace" >&2 + fi + + theory_id="$1" + theory_class="$2" + theory_header="$3" + + instantiator_class= + instantiator=NULL +} + +function instantiator { + # instantiator class header + lineno=${BASH_LINENO[0]} + check_theory_seen + + if [ -n "$instantiator_class" ]; then + echo "$kf:$lineno: error: cannot have two \"instantiator\" directives" >&2 + exit 1 + fi + + instantiator_class="$1" + instantiator_header="$2" + + if [ -z "$instantiator_class" -o -z "$instantiator_header" ]; then + echo "$kf:$lineno: error: \"instantiator\" directive missing class or header argument" >&2 + exit 1 + fi + + instantiator_includes="${instantiator_includes}#include \"$theory_header\" +#line $lineno \"$kf\" +#include \"$instantiator_header\" +" + instantiator="new $instantiator_class(c, qe, static_cast< $theory_class* >(this))"; +} + +function properties { + # properties prop* + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function endtheory { + # endtheory + lineno=${BASH_LINENO[0]} + check_theory_seen + seen_endtheory=true + + make_instantiator_cases="${make_instantiator_cases} +#line $lineno \"$kf\" + case $theory_id: + return $instantiator; +" +} + +function typechecker { + # typechecker header + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function typerule { + # typerule OPERATOR typechecking-class + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function rewriter { + # rewriter class header + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function sort { + # sort TYPE cardinality [well-founded ground-term header | not-well-founded] ["comment"] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function cardinality { + # cardinality TYPE cardinality-computer [header] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function well-founded { + # well-founded TYPE wellfoundedness-computer [header] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function variable { + # variable K ["comment"] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function operator { + # operator K #children ["comment"] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function parameterized { + # parameterized K1 K2 #children ["comment"] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function constant { + # constant K T Hasher header ["comment"] + lineno=${BASH_LINENO[0]} + check_theory_seen +} + +function check_theory_seen { + if $seen_endtheory; then + echo "$kf:$lineno: error: command after \"endtheory\" declaration (endtheory has to be last)" >&2 + exit 1 + fi + if ! $seen_theory; then + echo "$kf:$lineno: error: no \"theory\" declaration found (it has to be first)" >&2 + exit 1 + fi +} + +function check_builtin_theory_seen { + if ! $seen_theory_builtin; then + echo "$me: warning: no declaration for the builtin theory found" >&2 + fi +} + +while [ $# -gt 0 ]; do + kf=$1 + seen_theory=false + seen_endtheory=false + b=$(basename $(dirname "$kf")) + source "$kf" + if ! $seen_theory; then + echo "$kf: error: no theory content found in file!" >&2 + exit 1 + fi + if ! $seen_endtheory; then + echo "$kf:$lineno: error: no \"endtheory\" declaration found (it is required at the end)" >&2 + exit 1 + fi + shift +done +check_builtin_theory_seen + +## output + +# generate warnings about incorrect #line annotations in templates +nl -ba -s' ' "$template" | grep '^ *[0-9][0-9]* # *line' | + awk '{OFS="";if($1+1!=$3) print "'"$template"':",$1,": warning: incorrect annotation \"#line ",$3,"\" (it should be \"#line ",($1+1),"\")"}' >&2 + +text=$(cat "$template") +for var in \ + instantiator_includes \ + make_instantiator_cases \ + template \ + ; do + eval text="\${text//\\\$\\{$var\\}/\${$var}}" +done +error=`expr "$text" : '.*\${\([^}]*\)}.*'` +if [ -n "$error" ]; then + echo "$template:0: error: undefined replacement \${$error}" >&2 + exit 1 +fi +echo "$text" diff --git a/src/theory/mkrewriter b/src/theory/mkrewriter index b8fa51d77..780409d52 100755 --- a/src/theory/mkrewriter +++ b/src/theory/mkrewriter @@ -2,7 +2,7 @@ # # mkrewriter # Morgan Deters for CVC4 -# Copyright (c) 2010-2011 The CVC4 Project +# Copyright (c) 2010-2012 The CVC4 Project # # The purpose of this script is to create rewriter_tables.h from a template # and a list of theory kinds. @@ -14,7 +14,7 @@ # Output is to standard out. # -copyright=2010-2011 +copyright=2010-2012 cat < for CVC4 -# Copyright (c) 2010-2011 The CVC4 Project +# Copyright (c) 2010-2012 The CVC4 Project # # The purpose of this script is to create theory_traits.h from a template # and a list of theory kinds. @@ -14,7 +14,7 @@ # Output is to standard out. # -copyright=2010-2011 +copyright=2010-2012 cat < struct TheoryTraits<${theory_id}> { typedef ${theory_class} theory_class; typedef ${rewriter_class} rewriter_class; + typedef ${instantiator_class} instantiator_class; static const bool isStableInfinite = ${theory_stable_infinite}; static const bool isFinite = ${theory_finite}; @@ -188,6 +192,18 @@ function typerule { check_theory_seen } +function instantiator { + # instantiator class header + lineno=${BASH_LINENO[0]} + check_theory_seen + + instantiator_class="$1" + instantiator_header="$2" + + theory_includes="${theory_includes}#include \"$2\" +" +} + function properties { # properties property* lineno=${BASH_LINENO[0]} diff --git a/src/theory/output_channel.h b/src/theory/output_channel.h index 5c2cedf5b..b1a5fc60c 100644 --- a/src/theory/output_channel.h +++ b/src/theory/output_channel.h @@ -148,6 +148,64 @@ public: return lemma(n.orNode(n.notNode())); } + /** + * If a decision is made on n, it must be in the phase specified. + * Note that this is enforced *globally*, i.e., it is completely + * context-INdependent. If you ever requirePhase() on a literal, + * it is phase-locked forever and ever. If it is to ever have the + * other phase as its assignment, it will be because it has been + * propagated that way (or it's a unit, at decision level 0). + * + * @param n - a theory atom with a SAT literal assigned; must have + * been pre-registered + * @param phase - the phase to decide on n + */ + virtual void requirePhase(TNode n, bool phase) + throw(Interrupted, TypeCheckingExceptionPrivate, AssertionException) = 0; + + /** + * Flips the most recent unflipped decision to the other phase and + * returns true. If all decisions have been flipped, the root + * decision is re-flipped and flipDecision() returns false. If no + * decisions (flipped nor unflipped) are on the decision stack, the + * state is not affected and flipDecision() returns false. + * + * For example, if l1, l2, and l3 are all decision literals, and + * have been decided in positive phase, a series of flipDecision() + * calls has the following effects: + * + * l1 l2 l3
+ * l1 l2 ~l3
+ * l1 ~l2
+ * ~l1
+ * l1 (and flipDecision() returns false) + * + * Naturally, flipDecision() might be interleaved with search. For example: + * + * l1 l2 l3
+ * flipDecision()
+ * l1 l2 ~l3
+ * flipDecision()
+ * l1 ~l2
+ * SAT decides l3
+ * l1 ~l2 l3
+ * flipDecision()
+ * l1 ~l2 ~l3
+ * flipDecision()
+ * ~l1
+ * SAT decides l2
+ * ~l1 l2
+ * flipDecision()
+ * ~l1 ~l2
+ * flipDecision() returns FALSE
+ * l1 + * + * @return true if a decision was flipped; false if no decision + * could be flipped, or if the root decision was re-flipped + */ + virtual bool flipDecision() + throw(Interrupted, TypeCheckingExceptionPrivate, AssertionException) = 0; + /** * Notification from a theory that it realizes it is incomplete at * this context level. If SAT is later determined by the diff --git a/src/theory/quantifiers/Makefile b/src/theory/quantifiers/Makefile new file mode 100644 index 000000000..8ffdfb575 --- /dev/null +++ b/src/theory/quantifiers/Makefile @@ -0,0 +1,4 @@ +topdir = ../../.. +srcdir = src/theory/quantifiers + +include $(topdir)/Makefile.subdir diff --git a/src/theory/quantifiers/Makefile.am b/src/theory/quantifiers/Makefile.am new file mode 100644 index 000000000..de74e44f8 --- /dev/null +++ b/src/theory/quantifiers/Makefile.am @@ -0,0 +1,21 @@ +AM_CPPFLAGS = \ + -D__BUILDING_CVC4LIB \ + -I@srcdir@/../../include -I@srcdir@/../.. -I@builddir@/../.. +AM_CXXFLAGS = -Wall $(FLAG_VISIBILITY_HIDDEN) + +noinst_LTLIBRARIES = libquantifiers.la + +libquantifiers_la_SOURCES = \ + theory_quantifiers_type_rules.h \ + theory_quantifiers.h \ + quantifiers_rewriter.h \ + quantifiers_rewriter.cpp \ + theory_quantifiers.cpp \ + theory_quantifiers_instantiator.h \ + theory_quantifiers_instantiator.cpp \ + instantiation_engine.h \ + instantiation_engine.cpp \ + model_engine.h \ + model_engine.cpp + +EXTRA_DIST = kinds \ No newline at end of file diff --git a/src/theory/quantifiers/instantiation_engine.cpp b/src/theory/quantifiers/instantiation_engine.cpp new file mode 100644 index 000000000..8478dff1e --- /dev/null +++ b/src/theory/quantifiers/instantiation_engine.cpp @@ -0,0 +1,393 @@ +/********************* */ +/*! \file instantiation_engine.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of instantiation engine class + **/ + +#include "theory/quantifiers/instantiation_engine.h" + +#include "theory/theory_engine.h" +#include "theory/uf/theory_uf_instantiator.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::quantifiers; + +//#define IE_PRINT_PROCESS_TIMES + +InstantiationEngine::InstantiationEngine( TheoryQuantifiers* th ) : +d_th( th ){ + +} + +QuantifiersEngine* InstantiationEngine::getQuantifiersEngine(){ + return d_th->getQuantifiersEngine(); +} + +bool InstantiationEngine::hasAddedCbqiLemma( Node f ) { + return d_ce_lit.find( f ) != d_ce_lit.end(); +} + +void InstantiationEngine::addCbqiLemma( Node f ){ + Assert( doCbqi( f ) && !hasAddedCbqiLemma( f ) ); + //code for counterexample-based quantifier instantiation + Debug("cbqi") << "Do cbqi for " << f << std::endl; + //make the counterexample body + //Node ceBody = f[1].substitute( getQuantifiersEngine()->d_vars[f].begin(), getQuantifiersEngine()->d_vars[f].end(), + // getQuantifiersEngine()->d_inst_constants[f].begin(), + // getQuantifiersEngine()->d_inst_constants[f].end() ); + //get the counterexample literal + Node ceBody = getQuantifiersEngine()->getCounterexampleBody( f ); + Node ceLit = d_th->getValuation().ensureLiteral( ceBody.notNode() ); + d_ce_lit[ f ] = ceLit; + getQuantifiersEngine()->setInstantiationConstantAttr( ceLit, f ); + // set attributes, mark all literals in the body of n as dependent on cel + //registerLiterals( ceLit, f ); + //require any decision on cel to be phase=true + d_th->getOutputChannel().requirePhase( ceLit, true ); + Debug("cbqi-debug") << "Require phase " << ceLit << " = true." << std::endl; + //add counterexample lemma + NodeBuilder<> nb(kind::OR); + nb << f << ceLit; + Node lem = nb; + Debug("cbqi-debug") << "Counterexample lemma : " << lem << std::endl; + d_th->getOutputChannel().lemma( lem ); +} + +bool InstantiationEngine::doInstantiationRound( Theory::Effort effort ){ + //if counterexample-based quantifier instantiation is active + if( Options::current()->cbqi ){ + //check if any cbqi lemma has not been added yet + bool addedLemma = false; + for( int i=0; i<(int)getQuantifiersEngine()->getNumAssertedQuantifiers(); i++ ){ + Node f = getQuantifiersEngine()->getAssertedQuantifier( i ); + if( doCbqi( f ) && !hasAddedCbqiLemma( f ) ){ + //add cbqi lemma + addCbqiLemma( f ); + addedLemma = true; + } + } + if( addedLemma ){ + return true; + } + } + //if not, proceed to instantiation round + Debug("inst-engine") << "IE: Instantiation Round." << std::endl; + Debug("inst-engine-ctrl") << "IE: Instantiation Round." << std::endl; + //reset instantiators + Debug("inst-engine-ctrl") << "Reset IE" << std::endl; + for( int i=0; igetInstantiator( i ) ){ + getQuantifiersEngine()->getInstantiator( i )->resetInstantiationRound( effort ); + } + } + getQuantifiersEngine()->getTermDatabase()->reset( effort ); + //iterate over an internal effort level e + int e = 0; + int eLimit = effort==Theory::EFFORT_LAST_CALL ? 10 : 2; + d_inst_round_status = InstStrategy::STATUS_UNFINISHED; + //while unfinished, try effort level=0,1,2.... + while( d_inst_round_status==InstStrategy::STATUS_UNFINISHED && e<=eLimit ){ + Debug("inst-engine") << "IE: Prepare instantiation (" << e << ")." << std::endl; + d_inst_round_status = InstStrategy::STATUS_SAT; + //instantiate each quantifier + for( int q=0; qgetNumAssertedQuantifiers(); q++ ){ + Node f = getQuantifiersEngine()->getAssertedQuantifier( q ); + Debug("inst-engine-debug") << "IE: Instantiate " << f << "..." << std::endl; + //if this quantifier is active + if( getQuantifiersEngine()->getActive( f ) ){ + //int e_use = getQuantifiersEngine()->getRelevance( f )==-1 ? e - 1 : e; + int e_use = e; + if( e_use>=0 ){ + //use each theory instantiator to instantiate f + for( int i=0; igetInstantiator( i ) ){ + Debug("inst-engine-debug") << "Do " << getQuantifiersEngine()->getInstantiator( i )->identify() << " " << e_use << std::endl; + int limitInst = 0; + int quantStatus = getQuantifiersEngine()->getInstantiator( i )->doInstantiation( f, effort, e_use, limitInst ); + Debug("inst-engine-debug") << " -> status is " << quantStatus << std::endl; + InstStrategy::updateStatus( d_inst_round_status, quantStatus ); + } + } + } + } + } + //do not consider another level if already added lemma at this level + if( getQuantifiersEngine()->hasAddedLemma() ){ + d_inst_round_status = InstStrategy::STATUS_UNKNOWN; + } + e++; + } + Debug("inst-engine") << "All instantiators finished, # added lemmas = "; + Debug("inst-engine") << (int)getQuantifiersEngine()->d_lemmas_waiting.size() << std::endl; + //Notice() << "All instantiators finished, # added lemmas = " << (int)d_lemmas_waiting.size() << std::endl; + if( !getQuantifiersEngine()->hasAddedLemma() ){ + Debug("inst-engine-stuck") << "No instantiations produced at this state: " << std::endl; + for( int i=0; igetInstantiator( i ) ){ + getQuantifiersEngine()->getInstantiator( i )->debugPrint("inst-engine-stuck"); + Debug("inst-engine-stuck") << std::endl; + } + } + Debug("inst-engine-ctrl") << "---Fail." << std::endl; + return false; + }else{ + Debug("inst-engine-ctrl") << "---Done. " << (int)getQuantifiersEngine()->d_lemmas_waiting.size() << std::endl; +#ifdef IE_PRINT_PROCESS_TIMES + Notice() << "lemmas = " << (int)getQuantifiersEngine()->d_lemmas_waiting.size() << std::endl; +#endif + //flush lemmas to output channel + getQuantifiersEngine()->flushLemmas( &d_th->getOutputChannel() ); + return true; + } +} + +int ierCounter = 0; + +void InstantiationEngine::check( Theory::Effort e ){ + if( e==Theory::EFFORT_FULL ){ + ierCounter++; + } + //determine if we should perform check, based on instWhenMode + bool performCheck = false; + if( Options::current()->instWhenMode==Options::INST_WHEN_FULL ){ + performCheck = ( e >= Theory::EFFORT_FULL ); + }else if( Options::current()->instWhenMode==Options::INST_WHEN_FULL_LAST_CALL ){ + performCheck = ( ( e==Theory::EFFORT_FULL && ierCounter%2==0 ) || e==Theory::EFFORT_LAST_CALL ); + }else if( Options::current()->instWhenMode==Options::INST_WHEN_LAST_CALL ){ + performCheck = ( e >= Theory::EFFORT_LAST_CALL ); + }else{ + performCheck = true; + } + if( performCheck ){ + Debug("inst-engine") << "IE: Check " << e << " " << ierCounter << std::endl; +#ifdef IE_PRINT_PROCESS_TIMES + double clSet = double(clock())/double(CLOCKS_PER_SEC); + Notice() << "Run instantiation round " << e << " " << ierCounter << std::endl; +#endif + bool quantActive = false; + //for each quantifier currently asserted, + // such that the counterexample literal is not in positive in d_counterexample_asserts + // for( BoolMap::iterator i = d_forall_asserts.begin(); i != d_forall_asserts.end(); i++ ) { + // if( (*i).second ) { + for( int i=0; i<(int)getQuantifiersEngine()->getNumAssertedQuantifiers(); i++ ){ + Node n = getQuantifiersEngine()->getAssertedQuantifier( i ); + if( Options::current()->cbqi && hasAddedCbqiLemma( n ) ){ + Node cel = d_ce_lit[ n ]; + bool active, value; + bool ceValue = false; + if( d_th->getValuation().hasSatValue( cel, value ) ){ + active = value; + ceValue = true; + }else{ + active = true; + } + getQuantifiersEngine()->setActive( n, active ); + if( active ){ + Debug("quantifiers") << " Active : " << n; + quantActive = true; + }else{ + Debug("quantifiers") << " NOT active : " << n; + if( d_th->getValuation().isDecision( cel ) ){ + Debug("quant-req-phase") << "Bad decision : " << cel << std::endl; + } + //note that the counterexample literal must not be a decision + Assert( !d_th->getValuation().isDecision( cel ) ); + } + if( d_th->getValuation().hasSatValue( n, value ) ){ + Debug("quantifiers") << ", value = " << value; + } + if( ceValue ){ + Debug("quantifiers") << ", ce is asserted"; + } + Debug("quantifiers") << std::endl; + }else{ + getQuantifiersEngine()->setActive( n, true ); + quantActive = true; + Debug("quantifiers") << " Active : " << n << ", no ce assigned." << std::endl; + } + Debug("quantifiers-relevance") << "Quantifier : " << n << std::endl; + Debug("quantifiers-relevance") << " Relevance : " << getQuantifiersEngine()->getRelevance( n ) << std::endl; + Debug("quantifiers") << " Relevance : " << getQuantifiersEngine()->getRelevance( n ) << std::endl; + } + //} + if( quantActive ){ + bool addedLemmas = doInstantiationRound( e ); + //Debug("quantifiers-dec") << "Do instantiation, level = " << d_th->getValuation().getDecisionLevel() << std::endl; + //for( int i=1; i<=(int)d_valuation.getDecisionLevel(); i++ ){ + // Debug("quantifiers-dec") << " " << d_valuation.getDecision( i ) << std::endl; + //} + if( e==Theory::EFFORT_LAST_CALL ){ + if( !addedLemmas ){ + if( d_inst_round_status==InstStrategy::STATUS_SAT ){ + Debug("inst-engine") << "No instantiation given, returning SAT..." << std::endl; + debugSat( SAT_INST_STRATEGY ); + }else{ + Debug("inst-engine") << "No instantiation given, returning unknown..." << std::endl; + d_th->getOutputChannel().setIncomplete(); + } + } + } + }else{ + if( e==Theory::EFFORT_LAST_CALL ){ + if( Options::current()->cbqi ){ + debugSat( SAT_CBQI ); + } + } + } +#ifdef IE_PRINT_PROCESS_TIMES + double clSet2 = double(clock())/double(CLOCKS_PER_SEC); + Notice() << "Done Run instantiation round " << (clSet2-clSet) << std::endl; +#endif + } +} + +void InstantiationEngine::registerQuantifier( Node f ){ + //Notice() << "do cbqi " << f << " ? " << std::endl; + Node ceBody = getQuantifiersEngine()->getCounterexampleBody( f ); + if( !doCbqi( f ) ){ + getQuantifiersEngine()->addTermToDatabase( ceBody, true ); + //need to tell which instantiators will be responsible + //by default, just chose the UF instantiator + getQuantifiersEngine()->getInstantiator( theory::THEORY_UF )->setHasConstraintsFrom( f ); + } + + //take into account user patterns + if( f.getNumChildren()==3 ){ + Node subsPat = getQuantifiersEngine()->getSubstitutedNode( f[2], f ); + //add patterns + for( int i=0; i<(int)subsPat.getNumChildren(); i++ ){ + //Notice() << "Add pattern " << subsPat[i] << " for " << f << std::endl; + ((uf::InstantiatorTheoryUf*)getQuantifiersEngine()->getInstantiator( theory::THEORY_UF ))->addUserPattern( f, subsPat[i] ); + } + } +} + +void InstantiationEngine::assertNode( Node f ){ + ////if we are doing cbqi and have not added the lemma yet, do so + //if( doCbqi( f ) && !hasAddedCbqiLemma( f ) ){ + // addCbqiLemma( f ); + //} +} + +bool InstantiationEngine::hasApplyUf( Node f ){ + if( f.getKind()==APPLY_UF ){ + return true; + }else{ + for( int i=0; i<(int)f.getNumChildren(); i++ ){ + if( hasApplyUf( f[i] ) ){ + return true; + } + } + return false; + } +} +bool InstantiationEngine::hasNonArithmeticVariable( Node f ){ + for( int i=0; i<(int)f[0].getNumChildren(); i++ ){ + TypeNode tn = f[0][i].getType(); + if( !tn.isInteger() && !tn.isReal() ){ + return true; + } + } + return false; +} + +bool InstantiationEngine::doCbqi( Node f ){ + if( Options::current()->cbqiSetByUser ){ + return Options::current()->cbqi; + }else if( Options::current()->cbqi ){ + //if quantifier has a non-arithmetic variable, then do not use cbqi + //if quantifier has an APPLY_UF term, then do not use cbqi + return !hasNonArithmeticVariable( f ) && !hasApplyUf( f[1] ); + }else{ + return false; + } +} + + + + + + + + + + + + + +//void InstantiationEngine::registerLiterals( Node n, Node f ){ +// if( n.getAttribute(InstConstantAttribute())==f ){ +// for( int i=0; i<(int)n.getNumChildren(); i++ ){ +// registerLiterals( n[i], f ); +// } +// if( !d_ce_lit[ f ].isNull() ){ +// if( getQuantifiersEngine()->d_te->getPropEngine()->isSatLiteral( n ) && n.getKind()!=NOT ){ +// if( n!=d_ce_lit[ f ] && n.notNode()!=d_ce_lit[ f ] ){ +// Debug("quant-dep-dec") << "Make " << n << " dependent on "; +// Debug("quant-dep-dec") << d_ce_lit[ f ] << std::endl; +// d_th->getOutputChannel().dependentDecision( d_ce_lit[ f ], n ); +// } +// } +// } +// } +//} + +void InstantiationEngine::debugSat( int reason ){ + if( reason==SAT_CBQI ){ + //Debug("quantifiers-sat") << "Decisions:" << std::endl; + //for( int i=1; i<=(int)d_th->getValuation().getDecisionLevel(); i++ ){ + // Debug("quantifiers-sat") << " " << i << ": " << d_th->getValuation().getDecision( i ) << std::endl; + //} + //for( BoolMap::iterator i = d_forall_asserts.begin(); i != d_forall_asserts.end(); i++ ) { + // if( (*i).second ) { + for( int i=0; i<(int)getQuantifiersEngine()->getNumAssertedQuantifiers(); i++ ){ + Node f = getQuantifiersEngine()->getAssertedQuantifier( i ); + Node cel = d_ce_lit[ f ]; + Assert( !cel.isNull() ); + bool value; + if( d_th->getValuation().hasSatValue( cel, value ) ){ + if( !value ){ + AlwaysAssert(! d_th->getValuation().isDecision( cel ), + "bad decision on counterexample literal"); + } + } + } + //} + Debug("quantifiers-sat") << "return SAT: Cbqi, no quantifier is active. " << std::endl; + //static bool setTrust = false; + //if( !setTrust ){ + // setTrust = true; + // Notice() << "trust-"; + //} + }else if( reason==SAT_INST_STRATEGY ){ + Debug("quantifiers-sat") << "return SAT: No strategy chose to add an instantiation." << std::endl; + //Notice() << "sat "; + //Unimplemented(); + } +} + +void InstantiationEngine::propagate( Theory::Effort level ){ + //propagate as decision all counterexample literals that are not asserted + for( std::map< Node, Node >::iterator it = d_ce_lit.begin(); it != d_ce_lit.end(); ++it ){ + bool value; + if( !d_th->getValuation().hasSatValue( it->second, value ) ){ + //if not already set, propagate as decision + d_th->getOutputChannel().propagateAsDecision( it->second ); + Debug("cbqi-prop-as-dec") << "CBQI: propagate as decision " << it->second << std::endl; + } + } +} diff --git a/src/theory/quantifiers/instantiation_engine.h b/src/theory/quantifiers/instantiation_engine.h new file mode 100644 index 000000000..c6aaed18a --- /dev/null +++ b/src/theory/quantifiers/instantiation_engine.h @@ -0,0 +1,79 @@ +/********************* */ +/*! \file instantiation_engine.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Instantiation Engine classes + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__INSTANTIATION_ENGINE_H +#define __CVC4__INSTANTIATION_ENGINE_H + +#include "theory/quantifiers_engine.h" +#include "theory/quantifiers/theory_quantifiers.h" + +namespace CVC4 { +namespace theory { +namespace quantifiers { + +class InstantiationEngine : public QuantifiersModule +{ +private: + TheoryQuantifiers* d_th; + QuantifiersEngine* getQuantifiersEngine(); +private: + typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap; + /** status of instantiation round (one of InstStrategy::STATUS_*) */ + int d_inst_round_status; + /** map from universal quantifiers to their counterexample literals */ + std::map< Node, Node > d_ce_lit; +private: + bool hasAddedCbqiLemma( Node f ); + void addCbqiLemma( Node f ); +private: + /** helper functions */ + bool hasNonArithmeticVariable( Node f ); + bool hasApplyUf( Node f ); + /** whether to do CBQI for quantifier f */ + bool doCbqi( Node f ); +private: + /** do instantiation round */ + bool doInstantiationRound( Theory::Effort effort ); + /** register literals of n, f is the quantifier it belongs to */ + //void registerLiterals( Node n, Node f ); +private: + enum{ + SAT_CBQI, + SAT_INST_STRATEGY, + }; + /** debug sat */ + void debugSat( int reason ); +public: + InstantiationEngine( TheoryQuantifiers* th ); + ~InstantiationEngine(){} + + void check( Theory::Effort e ); + void registerQuantifier( Node f ); + void assertNode( Node f ); + Node explain(TNode n){ return Node::null(); } + void propagate( Theory::Effort level ); +public: + /** get the corresponding counterexample literal for quantified formula node n */ + Node getCounterexampleLiteralFor( Node f ) { return d_ce_lit.find( f )==d_ce_lit.end() ? Node::null() : d_ce_lit[ f ]; } +}; + +} +} +} + +#endif diff --git a/src/theory/quantifiers/kinds b/src/theory/quantifiers/kinds new file mode 100644 index 000000000..106d95cef --- /dev/null +++ b/src/theory/quantifiers/kinds @@ -0,0 +1,48 @@ +# kinds -*- sh -*- +# +# For documentation on this file format, please refer to +# src/theory/builtin/kinds. +# + +theory THEORY_QUANTIFIERS ::CVC4::theory::quantifiers::TheoryQuantifiers "theory/quantifiers/theory_quantifiers.h" +typechecker "theory/quantifiers/theory_quantifiers_type_rules.h" +instantiator ::CVC4::theory::quantifiers::InstantiatorTheoryQuantifiers "theory/quantifiers/theory_quantifiers_instantiator.h" + +properties check propagate presolve + +rewriter ::CVC4::theory::quantifiers::QuantifiersRewriter "theory/quantifiers/quantifiers_rewriter.h" + +operator FORALL 2:3 "universally quantified formula" + +operator EXISTS 2:3 "existentially quantified formula" + +variable INST_CONSTANT "instantiation constant" + +sort BOUND_VAR_LIST_TYPE \ + Cardinality::INTEGERS \ + not-well-founded \ + "Bound Var type" + +operator BOUND_VAR_LIST 1: "bound variables" + +sort INST_PATTERN_TYPE \ + Cardinality::INTEGERS \ + not-well-founded \ + "Instantiation pattern type" + +operator INST_PATTERN 1: "instantiation pattern" + +sort INST_PATTERN_LIST_TYPE \ + Cardinality::INTEGERS \ + not-well-founded \ + "Instantiation pattern list type" + +operator INST_PATTERN_LIST 1: "instantiation pattern list" + +typerule FORALL ::CVC4::theory::quantifiers::QuantifierForallTypeRule +typerule EXISTS ::CVC4::theory::quantifiers::QuantifierExistsTypeRule +typerule BOUND_VAR_LIST ::CVC4::theory::quantifiers::QuantifierBoundVarListTypeRule +typerule INST_PATTERN ::CVC4::theory::quantifiers::QuantifierInstPatternTypeRule +typerule INST_PATTERN_LIST ::CVC4::theory::quantifiers::QuantifierInstPatternListTypeRule + +endtheory diff --git a/src/theory/quantifiers/model_engine.cpp b/src/theory/quantifiers/model_engine.cpp new file mode 100644 index 000000000..a72b103d1 --- /dev/null +++ b/src/theory/quantifiers/model_engine.cpp @@ -0,0 +1,1401 @@ +/********************* */ +/*! \file model_engine.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of model engine class + **/ + +#include "theory/quantifiers/model_engine.h" +#include "theory/theory_engine.h" +#include "theory/uf/equality_engine.h" +#include "theory/uf/theory_uf.h" +#include "theory/uf/theory_uf_strong_solver.h" +#include "theory/uf/theory_uf_instantiator.h" + +//#define ME_PRINT_PROCESS_TIMES + +//#define DISABLE_EVAL_SKIP_MULTIPLE +#define RECONSIDER_FUNC_DEFAULT_VALUE +#define RECONSIDER_FUNC_CONSTANT +#define USE_INDEX_ORDERING +//#define ONE_INST_PER_QUANT_PER_ROUND + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::quantifiers; + +void printRepresentative( const char* c, QuantifiersEngine* qe, Node r ){ + if( r.getType()==NodeManager::currentNM()->booleanType() ){ + if( qe->getEqualityQuery()->areEqual( r, NodeManager::currentNM()->mkConst( true ) ) ){ + Debug( c ) << "true"; + }else{ + Debug( c ) << "false"; + } + }else{ + Debug( c ) << qe->getEqualityQuery()->getRepresentative( r ); + } +} + +RepAlphabet::RepAlphabet( RepAlphabet& ra, QuantifiersEngine* qe ){ + //translate to current representatives + for( std::map< TypeNode, std::vector< Node > >::iterator it = ra.d_type_reps.begin(); it != ra.d_type_reps.end(); ++it ){ + std::vector< Node > reps; + for( int i=0; i<(int)it->second.size(); i++ ){ + //reps.push_back( ie->getEqualityQuery()->getRepresentative( it->second[i] ) ); + reps.push_back( it->second[i] ); + } + set( it->first, reps ); + } +} + +void RepAlphabet::set( TypeNode t, std::vector< Node >& reps ){ + d_type_reps[t].insert( d_type_reps[t].begin(), reps.begin(), reps.end() ); + for( int i=0; i<(int)reps.size(); i++ ){ + d_tmap[ reps[i] ] = i; + } +} + +void RepAlphabet::debugPrint( const char* c, QuantifiersEngine* qe ){ + for( std::map< TypeNode, std::vector< Node > >::iterator it = d_type_reps.begin(); it != d_type_reps.end(); ++it ){ + Debug( c ) << it->first << " : " << std::endl; + for( int i=0; i<(int)it->second.size(); i++ ){ + Debug( c ) << " " << i << ": " << it->second[i] << std::endl; + Debug( c ) << " eq_class( " << it->second[i] << " ) : "; + ((uf::InstantiatorTheoryUf*)qe->getInstantiator( THEORY_UF ))->outputEqClass( c, it->second[i] ); + Debug( c ) << std::endl; + } + } +} + +RepAlphabetIterator::RepAlphabetIterator( QuantifiersEngine* qe, Node f, ModelEngine* model ){ + for( size_t i=0; i& indexOrder ){ + d_index_order.insert( d_index_order.begin(), indexOrder.begin(), indexOrder.end() ); + initialize( qe, f, model ); +} + +void RepAlphabetIterator::initialize( QuantifiersEngine* qe, Node f, ModelEngine* model ){ + d_f = f; + d_model = model; + //store instantiation constants + for( size_t i=0; igetInstantiationConstant( d_f, i ) ); + d_index.push_back( 0 ); + } + //make the d_var_order mapping + for( size_t i=0; i=0 && d_index[counter]==(int)(d_model->getReps()->d_type_reps[d_f[0][d_index_order[counter]].getType()].size()-1) ){ + counter--; + } + if( counter==-1 ){ + d_index.clear(); + }else{ + for( int i=(int)d_index.size()-1; i>counter; i-- ){ + d_index[i] = 0; + d_model->clearEvalFailed( i ); + } + d_index[counter]++; + d_model->clearEvalFailed( counter ); + } +} + +void RepAlphabetIterator::increment( QuantifiersEngine* qe ){ + if( !isFinished() ){ + increment2( qe, (int)d_index.size()-1 ); + } +} + +bool RepAlphabetIterator::isFinished(){ + return d_index.empty(); +} + +void RepAlphabetIterator::getMatch( QuantifiersEngine* ie, InstMatch& m ){ + for( int i=0; i<(int)d_index.size(); i++ ){ + m.d_map[ ie->getInstantiationConstant( d_f, i ) ] = getTerm( i ); + } +} + +Node RepAlphabetIterator::getTerm( int i ){ + TypeNode tn = d_f[0][d_index_order[i]].getType(); + Assert( d_model->getReps()->d_type_reps.find( tn )!=d_model->getReps()->d_type_reps.end() ); + return d_model->getReps()->d_type_reps[tn][d_index[d_index_order[i]]]; +} + +void RepAlphabetIterator::calculateTerms( QuantifiersEngine* qe ){ + d_terms.clear(); + for( int i=0; igetNumInstantiationConstants( d_f ); i++ ){ + d_terms.push_back( getTerm( i ) ); + } +} + +void RepAlphabetIterator::debugPrint( const char* c ){ + for( int i=0; i<(int)d_index.size(); i++ ){ + Debug( c ) << i << ": " << d_index[i] << ", (" << getTerm( i ) << " / " << d_ic[ i ] << std::endl; + } +} + +void RepAlphabetIterator::debugPrintSmall( const char* c ){ + Debug( c ) << "RI: "; + for( int i=0; i<(int)d_index.size(); i++ ){ + Debug( c ) << d_index[i] << ": " << getTerm( i ) << " "; + } + Debug( c ) << std::endl; +} + +//set value function +void UfModelTree::setValue( QuantifiersEngine* qe, Node n, Node v, std::vector< int >& indexOrder, bool ground, int argIndex ){ + if( d_data.empty() ){ + d_value = v; + }else if( !d_value.isNull() && d_value!=v ){ + d_value = Node::null(); + } + if( argIndex<(int)n.getNumChildren() ){ + //take r = null when argument is the model basis + Node r; + if( ground || !n[ indexOrder[argIndex] ].getAttribute(ModelBasisAttribute()) ){ + r = qe->getEqualityQuery()->getRepresentative( n[ indexOrder[argIndex] ] ); + } + d_data[ r ].setValue( qe, n, v, indexOrder, ground, argIndex+1 ); + } +} + +//get value function +Node UfModelTree::getValue( QuantifiersEngine* qe, Node n, std::vector< int >& indexOrder, int& depIndex, int argIndex ){ + if( !d_value.isNull() && isTotal( n.getOperator(), argIndex ) ){ + //Notice() << "Constant, return " << d_value << ", depIndex = " << argIndex << std::endl; + depIndex = argIndex; + return d_value; + }else{ + Node val; + int childDepIndex[2] = { argIndex, argIndex }; + for( int i=0; i<2; i++ ){ + //first check the argument, then check default + Node r; + if( i==0 ){ + r = qe->getEqualityQuery()->getRepresentative( n[ indexOrder[argIndex] ] ); + } + std::map< Node, UfModelTree >::iterator it = d_data.find( r ); + if( it!=d_data.end() ){ + val = it->second.getValue( qe, n, indexOrder, childDepIndex[i], argIndex+1 ); + if( !val.isNull() ){ + break; + } + }else{ + //argument is not a defined argument: thus, it depends on this argument + childDepIndex[i] = argIndex+1; + } + } + //update depIndex + depIndex = childDepIndex[0]>childDepIndex[1] ? childDepIndex[0] : childDepIndex[1]; + //Notice() << "Return " << val << ", depIndex = " << depIndex; + //Notice() << " ( " << childDepIndex[0] << ", " << childDepIndex[1] << " )" << std::endl; + return val; + } +} + +//simplify function +void UfModelTree::simplify( Node op, Node defaultVal, int argIndex ){ + if( argIndex<(int)op.getType().getNumChildren()-1 ){ + std::vector< Node > eraseData; + //first process the default argument + Node r; + std::map< Node, UfModelTree >::iterator it = d_data.find( r ); + if( it!=d_data.end() ){ + if( !defaultVal.isNull() && it->second.d_value==defaultVal ){ + eraseData.push_back( r ); + }else{ + it->second.simplify( op, defaultVal, argIndex+1 ); + if( !it->second.d_value.isNull() && it->second.isTotal( op, argIndex+1 ) ){ + defaultVal = it->second.d_value; + }else{ + defaultVal = Node::null(); + } + } + } + //now see if any children can be removed, and simplify the ones that cannot + for( std::map< Node, UfModelTree >::iterator it = d_data.begin(); it != d_data.end(); ++it ){ + if( !it->first.isNull() ){ + if( !defaultVal.isNull() && it->second.d_value==defaultVal ){ + eraseData.push_back( it->first ); + }else{ + it->second.simplify( op, defaultVal, argIndex+1 ); + } + } + } + for( int i=0; i<(int)eraseData.size(); i++ ){ + d_data.erase( eraseData[i] ); + } + } +} + +//is total function +bool UfModelTree::isTotal( Node op, int argIndex ){ + if( argIndex==(int)(op.getType().getNumChildren()-1) ){ + return !d_value.isNull(); + }else{ + Node r; + std::map< Node, UfModelTree >::iterator it = d_data.find( r ); + if( it!=d_data.end() ){ + return it->second.isTotal( op, argIndex+1 ); + }else{ + return false; + } + } +} + +Node UfModelTree::getConstantValue( QuantifiersEngine* qe, Node n, std::vector< int >& indexOrder, int argIndex ){ + return d_value; +} + +void indent( const char* c, int ind ){ + for( int i=0; i& indexOrder, int ind, int arg ){ + if( !d_data.empty() ){ + for( std::map< Node, UfModelTree >::iterator it = d_data.begin(); it != d_data.end(); ++it ){ + if( !it->first.isNull() ){ + indent( c, ind ); + Debug( c ) << "if x_" << indexOrder[arg] << " == " << it->first << std::endl; + it->second.debugPrint( c, qe, indexOrder, ind+2, arg+1 ); + } + } + if( d_data.find( Node::null() )!=d_data.end() ){ + d_data[ Node::null() ].debugPrint( c, qe, indexOrder, ind, arg+1 ); + } + }else{ + indent( c, ind ); + Debug( c ) << "return "; + printRepresentative( c, qe, d_value ); + //Debug( c ) << " { "; + //for( int i=0; i<(int)d_explicit.size(); i++ ){ + // Debug( c ) << d_explicit[i] << " "; + //} + //Debug( c ) << "}"; + Debug( c ) << std::endl; + } +} + +UfModel::UfModel( Node op, ModelEngine* me ) : d_op( op ), d_me( me ), + d_model_constructed( false ), d_reconsider_model( false ){ + + d_tree = UfModelTreeOrdered( op ); TypeNode tn = d_op.getType(); tn = tn[(int)tn.getNumChildren()-1]; Assert( tn==NodeManager::currentNM()->booleanType() || uf::StrongSolverTheoryUf::isRelevantType( tn ) ); //look at ground assertions + for( int i=0; i<(int)d_me->getQuantifiersEngine()->getTermDatabase()->d_op_map[ d_op ].size(); i++ ){ + Node n = d_me->getQuantifiersEngine()->getTermDatabase()->d_op_map[ d_op ][i]; + bool add = true; + if( n.getAttribute(NoMatchAttribute()) ){ + add = false; + //determine if it has model basis attribute + for( int j=0; j<(int)n.getNumChildren(); j++ ){ + if( n[j].getAttribute(ModelBasisAttribute()) ){ + add = true; + break; + } + } + } + if( add ){ + d_ground_asserts.push_back( n ); + Node r = d_me->getQuantifiersEngine()->getEqualityQuery()->getRepresentative( n ); + d_ground_asserts_reps.push_back( r ); + } + } + //determine if it is constant + if( !d_ground_asserts.empty() ){ + bool isConstant = true; + for( int i=1; i<(int)d_ground_asserts.size(); i++ ){ + if( d_ground_asserts_reps[0]!=d_ground_asserts_reps[i] ){ + isConstant = false; + break; + } + } + if( isConstant ){ + //set constant value + Node t = d_me->getModelBasisApplyUfTerm( d_op ); + Node r = d_ground_asserts_reps[0]; + setValue( t, r, false ); + setModel(); + d_reconsider_model = true; + Debug("fmf-model-cons") << "Function " << d_op << " is the constant function "; + printRepresentative( "fmf-model-cons", d_me->getQuantifiersEngine(), r ); + Debug("fmf-model-cons") << std::endl; + } + } +} + +void UfModel::setValue( Node n, Node v, bool ground ){ + d_set_values[ ground ? 1 : 0 ][n] = v; +} + +void UfModel::setModel(){ + makeModel( d_me->getQuantifiersEngine(), d_tree ); + d_model_constructed = true; +} + +void UfModel::clearModel(){ + for( int k=0; k<2; k++ ){ + d_set_values[k].clear(); + } + d_tree.clear(); + d_model_constructed = false; +} + +Node UfModel::getConstantValue( QuantifiersEngine* qe, Node n ){ + if( d_model_constructed ){ + return d_tree.getConstantValue( qe, n ); + }else{ + return Node::null(); + } +} + +bool UfModel::isConstant(){ + Node gn = d_me->getModelBasisApplyUfTerm( d_op ); + Node n = getConstantValue( d_me->getQuantifiersEngine(), gn ); + return !n.isNull(); +} + +void UfModel::buildModel(){ +#ifdef RECONSIDER_FUNC_CONSTANT + if( d_model_constructed ){ + if( d_reconsider_model ){ + //if we are allowed to reconsider default value, then see if the default value can be improved + Node t = d_me->getModelBasisApplyUfTerm( d_op ); + Node v = d_set_values[0][t]; + if( d_value_pro_con[1][v].size()>d_value_pro_con[0][v].size() ){ + Debug("fmf-model-cons-debug") << "Consider changing the default value for " << d_op << std::endl; + clearModel(); + } + } + } +#endif + //now, construct models for each uninterpretted function/predicate + if( !d_model_constructed ){ + Debug("fmf-model-cons") << "Construct model for " << d_op << "..." << std::endl; + //now, set the values in the model + for( int i=0; i<(int)d_ground_asserts.size(); i++ ){ + Node n = d_ground_asserts[i]; + Node v = d_ground_asserts_reps[i]; + //if this assertion did not help the model, just consider it ground + //set n = v in the model tree + Debug("fmf-model-cons") << " Set " << n << " = "; + printRepresentative( "fmf-model-cons", d_me->getQuantifiersEngine(), v ); + Debug("fmf-model-cons") << std::endl; + //set it as ground value + setValue( n, v ); + } + //set the default value + //chose defaultVal based on heuristic (the best proportion of "pro" responses) + Node defaultVal; + double maxScore = -1; + for( int i=0; i<(int)d_values.size(); i++ ){ + Node v = d_values[i]; + double score = ( 1.0 + (double)d_value_pro_con[0][v].size() )/( 1.0 + (double)d_value_pro_con[1][v].size() ); + Debug("fmf-model-cons") << " - score( "; + printRepresentative( "fmf-model-cons", d_me->getQuantifiersEngine(), v ); + Debug("fmf-model-cons") << " ) = " << score << std::endl; + if( score>maxScore ){ + defaultVal = v; + maxScore = score; + } + } +#ifdef RECONSIDER_FUNC_DEFAULT_VALUE + if( maxScore<1.0 ){ + //consider finding another value, if possible + Debug("fmf-model-cons-debug") << "Poor choice for default value, score = " << maxScore << std::endl; + TypeNode tn = d_op.getType(); + Node newDefaultVal = d_me->getArbitraryElement( tn[(int)tn.getNumChildren()-1], d_values ); + if( !newDefaultVal.isNull() ){ + defaultVal = newDefaultVal; + Debug("fmf-model-cons-debug") << "-> Change default value to "; + printRepresentative( "fmf-model-cons-debug", d_me->getQuantifiersEngine(), defaultVal ); + Debug("fmf-model-cons-debug") << std::endl; + }else{ + Debug("fmf-model-cons-debug") << "-> Could not find arbitrary element of type " << tn[(int)tn.getNumChildren()-1] << std::endl; + Debug("fmf-model-cons-debug") << " Excluding: "; + for( int i=0; i<(int)d_values.size(); i++ ){ + Debug("fmf-model-cons-debug") << d_values[i] << " "; + } + Debug("fmf-model-cons-debug") << std::endl; + } + } +#endif + Assert( !defaultVal.isNull() ); + //get the default term (this term must be defined non-ground in model) + Node defaultTerm = d_me->getModelBasisApplyUfTerm( d_op ); + Debug("fmf-model-cons") << " Choose "; + printRepresentative("fmf-model-cons", d_me->getQuantifiersEngine(), defaultVal ); + Debug("fmf-model-cons") << " as default value (" << defaultTerm << ")" << std::endl; + Debug("fmf-model-cons") << " # quantifiers pro = " << d_value_pro_con[0][defaultVal].size() << std::endl; + Debug("fmf-model-cons") << " # quantifiers con = " << d_value_pro_con[1][defaultVal].size() << std::endl; + setValue( defaultTerm, defaultVal, false ); + Debug("fmf-model-cons") << " Making model..."; + setModel(); + Debug("fmf-model-cons") << " Finished constructing model for " << d_op << "." << std::endl; + } +} + +void UfModel::setValuePreference( Node f, Node n, bool isPro ){ + Node v = d_me->getQuantifiersEngine()->getEqualityQuery()->getRepresentative( n ); + //Notice() << "Set value preference " << n << " = " << v << " " << isPro << std::endl; + if( std::find( d_values.begin(), d_values.end(), v )==d_values.end() ){ + d_values.push_back( v ); + } + int index = isPro ? 0 : 1; + if( std::find( d_value_pro_con[index][v].begin(), d_value_pro_con[index][v].end(), f )==d_value_pro_con[index][v].end() ){ + d_value_pro_con[index][v].push_back( f ); + } +} + +void UfModel::makeModel( QuantifiersEngine* qe, UfModelTreeOrdered& tree ){ + for( int k=0; k<2; k++ ){ + for( std::map< Node, Node >::iterator it = d_set_values[k].begin(); it != d_set_values[k].end(); ++it ){ + tree.setValue( qe, it->first, it->second, k==1 ); + } + } + tree.simplify(); +} + +void UfModel::debugPrint( const char* c ){ + //Debug( c ) << "Function " << d_op << std::endl; + //Debug( c ) << " Type: " << d_op.getType() << std::endl; + //Debug( c ) << " Ground asserts:" << std::endl; + //for( int i=0; i<(int)d_ground_asserts.size(); i++ ){ + // Debug( c ) << " " << d_ground_asserts[i] << " = "; + // printRepresentative( c, d_me->getQuantifiersEngine(), d_ground_asserts[i] ); + // Debug( c ) << std::endl; + //} + //Debug( c ) << " Model:" << std::endl; + + TypeNode t = d_op.getType(); + Debug( c ) << d_op << "( "; + for( int i=0; i<(int)(t.getNumChildren()-1); i++ ){ + Debug( c ) << "x_" << i << " : " << t[i]; + if( i<(int)(t.getNumChildren()-2) ){ + Debug( c ) << ", "; + } + } + Debug( c ) << " ) : " << t[(int)t.getNumChildren()-1] << std::endl; + if( d_tree.isEmpty() ){ + Debug( c ) << " [undefined]" << std::endl; + }else{ + d_tree.debugPrint( c, d_me->getQuantifiersEngine(), 3 ); + Debug( c ) << std::endl; + } + //Debug( c ) << " Phase reqs:" << std::endl; //for( int i=0; i<2; i++ ){ + // for( std::map< Node, std::vector< Node > >::iterator it = d_reqs[i].begin(); it != d_reqs[i].end(); ++it ){ + // Debug( c ) << " " << it->first << std::endl; + // for( int j=0; j<(int)it->second.size(); j++ ){ + // Debug( c ) << " " << it->second[j] << " -> " << (i==1) << std::endl; + // } + // } + //} + //Debug( c ) << std::endl; + //for( int i=0; i<2; i++ ){ + // for( std::map< Node, std::map< Node, std::vector< Node > > >::iterator it = d_eq_reqs[i].begin(); it != d_eq_reqs[i].end(); ++it ){ + // Debug( c ) << " " << "For " << it->first << ":" << std::endl; + // for( std::map< Node, std::vector< Node > >::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2 ){ + // for( int j=0; j<(int)it2->second.size(); j++ ){ + // Debug( c ) << " " << it2->first << ( i==1 ? "==" : "!=" ) << it2->second[j] << std::endl; + // } + // } + // } + //} +} + +//Model Engine constructor +ModelEngine::ModelEngine( TheoryQuantifiers* th ){ + d_th = th; + d_quantEngine = th->getQuantifiersEngine(); + d_ss = ((uf::TheoryUF*)d_quantEngine->getTheoryEngine()->getTheory( THEORY_UF ))->getStrongSolver(); +} + +void ModelEngine::check( Theory::Effort e ){ + if( e==Theory::EFFORT_LAST_CALL ){ + bool quantsInit = true; + //first, check if we can minimize the model further + if( !d_ss->minimize() ){ + return; + } + if( useModel() ){ + //now, check if any quantifiers are un-initialized + for( int i=0; igetNumAssertedQuantifiers(); i++ ){ + Node f = d_quantEngine->getAssertedQuantifier( i ); + if( !initializeQuantifier( f ) ){ + quantsInit = false; + } + } + } + if( quantsInit ){ +#ifdef ME_PRINT_PROCESS_TIMES + Notice() << "---Instantiation Round---" << std::endl; +#endif + Debug("fmf-model-debug") << "---Begin Instantiation Round---" << std::endl; + ++(d_statistics.d_inst_rounds); + d_quantEngine->getTermDatabase()->reset( e ); + //build the representatives + Debug("fmf-model-debug") << "Building representatives..." << std::endl; + buildRepresentatives(); + if( useModel() ){ + //initialize the model + Debug("fmf-model-debug") << "Initializing model..." << std::endl; + initializeModel(); + //analyze the quantifiers + Debug("fmf-model-debug") << "Analyzing quantifiers..." << std::endl; + analyzeQuantifiers(); + //build the model + Debug("fmf-model-debug") << "Building model..." << std::endl; + for( std::map< Node, UfModel >::iterator it = d_uf_model.begin(); it != d_uf_model.end(); ++it ){ + it->second.buildModel(); + } + } + //print debug + debugPrint("fmf-model-complete"); + //try exhaustive instantiation + Debug("fmf-model-debug") << "Do exhaustive instantiation..." << std::endl; + int addedLemmas = 0; + for( int i=0; igetNumAssertedQuantifiers(); i++ ){ + Node f = d_quantEngine->getAssertedQuantifier( i ); + if( d_quant_sat.find( f )==d_quant_sat.end() ){ + addedLemmas += instantiateQuantifier( f ); + } + } +#ifdef ME_PRINT_PROCESS_TIMES + Notice() << "Added Lemmas = " << addedLemmas << std::endl; +#endif + if( addedLemmas==0 ){ + //debugPrint("fmf-consistent"); + //for( std::map< Node, UfModel >::iterator it = d_uf_model.begin(); it != d_uf_model.end(); ++it ){ + // it->second.simplify(); + //} + Debug("fmf-consistent") << std::endl; + debugPrint("fmf-consistent"); + } + } + d_quantEngine->flushLemmas( &d_th->getOutputChannel() ); + } +} + +void ModelEngine::registerQuantifier( Node f ){ + +} + +void ModelEngine::assertNode( Node f ){ + +} + +bool ModelEngine::useModel() { + return Options::current()->fmfModelBasedInst; +} + +bool ModelEngine::initializeQuantifier( Node f ){ + if( d_quant_init.find( f )==d_quant_init.end() ){ + d_quant_init[f] = true; + Debug("inst-fmf-init") << "Initialize " << f << std::endl; + //add the model basis instantiation + // This will help produce the necessary information for model completion. + // We do this by extending distinguish ground assertions (those + // containing terms with "model basis" attribute) to hold for all cases. + + ////first, check if any variables are required to be equal + //for( std::map< Node, bool >::iterator it = d_quantEngine->d_phase_reqs[f].begin(); + // it != d_quantEngine->d_phase_reqs[f].end(); ++it ){ + // Node n = it->first; + // if( n.getKind()==EQUAL && n[0].getKind()==INST_CONSTANT && n[1].getKind()==INST_CONSTANT ){ + // Notice() << "Unhandled phase req: " << n << std::endl; + // } + //} + + std::vector< Node > terms; + for( int j=0; j<(int)f[0].getNumChildren(); j++ ){ + terms.push_back( getModelBasisTerm( f[0][j].getType() ) ); + } + ++(d_statistics.d_num_quants_init); + if( d_quantEngine->addInstantiation( f, terms ) ){ + return false; + }else{ + //usually shouldn't happen + //Notice() << "No model basis for " << f << std::endl; + ++(d_statistics.d_num_quants_init_fail); + } + } + return true; +} + +void ModelEngine::buildRepresentatives(){ + d_ra.clear(); + //collect all representatives for all types and store as representative alphabet + for( int i=0; igetNumCardinalityTypes(); i++ ){ + TypeNode tn = d_ss->getCardinalityType( i ); + std::vector< Node > reps; + d_ss->getRepresentatives( tn, reps ); + Assert( !reps.empty() ); + //if( (int)reps.size()!=d_ss->getCardinality( tn ) ){ + // Notice() << "InstStrategyFinteModelFind::processResetInstantiationRound: Bad representatives for type." << std::endl; + // Notice() << " " << tn << " has cardinality " << d_ss->getCardinality( tn ); + // Notice() << " but only " << (int)reps.size() << " were given." << std::endl; + // Unimplemented( 27 ); + //} + Debug("fmf-model-debug") << " " << tn << " -> " << reps.size() << std::endl; + Debug("fmf-model-debug") << " "; + for( int i=0; i<(int)reps.size(); i++ ){ + Debug("fmf-model-debug") << reps[i] << " "; + } + Debug("fmf-model-debug") << std::endl; + //set them in the alphabet + d_ra.set( tn, reps ); +#ifdef ME_PRINT_PROCESS_TIMES + Notice() << tn << " has " << reps.size() << " representatives. " << std::endl; +#endif + } +} + +void ModelEngine::initializeModel(){ + d_uf_model.clear(); + d_quant_sat.clear(); + for( int k=0; k<2; k++ ){ + d_pro_con_quant[k].clear(); + } + + ////now analyze quantifiers (temporary) + //for( int i=0; i<(int)d_quantEngine->getNumAssertedQuantifiers(); i++ ){ + // Node f = d_quantEngine->getAssertedQuantifier( i ); + // Debug("fmf-model-req") << "Phase requirements for " << f << ": " << std::endl; + // for( std::map< Node, bool >::iterator it = d_quantEngine->d_phase_reqs[f].begin(); + // it != d_quantEngine->d_phase_reqs[f].end(); ++it ){ + // Node n = it->first; + // Debug("fmf-model-req") << " " << n << " -> " << it->second << std::endl; + // if( n.getKind()==APPLY_UF ){ + // processPredicate( f, n, it->second ); + // }else if( n.getKind()==EQUAL ){ + // processEquality( f, n, it->second ); + // } + // } + //} + for( int i=0; i<(int)d_quantEngine->getNumAssertedQuantifiers(); i++ ){ + Node f = d_quantEngine->getAssertedQuantifier( i ); + initializeUf( f[1] ); + //register model basis terms + std::vector< Node > vars; + std::vector< Node > subs; + for( int j=0; j<(int)f[0].getNumChildren(); j++ ){ + vars.push_back( d_quantEngine->getInstantiationConstant( f, j ) ); + subs.push_back( getModelBasisTerm( f[0][j].getType() ) ); + } + Node n = d_quantEngine->getCounterexampleBody( f ); + Node gn = n.substitute( vars.begin(), vars.end(), subs.begin(), subs.end() ); + registerModelBasis( n, gn ); + } +} + +void ModelEngine::analyzeQuantifiers(){ + int quantSatInit = 0; + int nquantSatInit = 0; + //analyze the preferences of each quantifier + for( int i=0; i<(int)d_quantEngine->getNumAssertedQuantifiers(); i++ ){ + Node f = d_quantEngine->getAssertedQuantifier( i ); + Debug("fmf-model-prefs") << "Analyze quantifier " << f << std::endl; + std::vector< Node > pro_con[2]; + std::vector< Node > pro_con_patterns[2]; + //check which model basis terms have good and bad definitions according to f + for( std::map< Node, bool >::iterator it = d_quantEngine->d_phase_reqs[f].begin(); + it != d_quantEngine->d_phase_reqs[f].end(); ++it ){ + Node n = it->first; + Node gn = d_model_basis[n]; + Debug("fmf-model-req") << " Req: " << n << " -> " << it->second << std::endl; + int pref = 0; + bool isConst = true; + std::vector< Node > uf_terms; + std::vector< Node > uf_term_patterns; + if( gn.getKind()==APPLY_UF ){ + if( d_quantEngine->getEqualityQuery()->hasTerm( gn ) ){ + uf_terms.push_back( gn ); + uf_term_patterns.push_back( n ); + bool phase = areEqual( gn, NodeManager::currentNM()->mkConst( true ) ); + pref = phase!=it->second ? 1 : -1; + } + }else if( gn.getKind()==EQUAL ){ + bool success = true; + for( int j=0; j<2; j++ ){ + if( n[j].getKind()==APPLY_UF ){ + Node op = gn[j].getOperator(); + if( d_uf_model.find( op )!=d_uf_model.end() ){ + Assert( gn[j].getKind()==APPLY_UF ); + uf_terms.push_back( gn[j] ); + uf_term_patterns.push_back( n[j] ); + }else{ + //found undefined uf operator + success = false; + } + }else if( n[j].hasAttribute(InstConstantAttribute()) ){ + isConst = false; + } + } + if( success && !uf_terms.empty() ){ + if( (!it->second && areEqual( gn[0], gn[1] )) || (it->second && areDisequal( gn[0], gn[1] )) ){ + pref = 1; + }else if( (it->second && areEqual( gn[0], gn[1] )) || (!it->second && areDisequal( gn[0], gn[1] )) ){ + pref = -1; + } + } + } + if( pref!=0 ){ + Debug("fmf-model-prefs") << " It is " << ( pref==1 ? "pro" : "con" ); + Debug("fmf-model-prefs") << " the definition of " << n << std::endl; + if( pref==1 ){ + if( isConst ){ + for( int j=0; j<(int)uf_terms.size(); j++ ){ + //the only uf that is initialized are those that are constant + Node op = uf_terms[j].getOperator(); + Assert( d_uf_model.find( op )!=d_uf_model.end() ); + if( !d_uf_model[op].isConstant() ){ + isConst = false; + break; + } + } + if( isConst ){ + d_quant_sat[f] = true; + //we only need to consider current term definition(s) for this quantifier to be satisified, ignore the others + for( int k=0; k<2; k++ ){ + pro_con[k].clear(); + pro_con_patterns[k].clear(); + } + //instead, just note to the model for each uf term that f is pro its definition + for( int j=0; j<(int)uf_terms.size(); j++ ){ + Node op = uf_terms[j].getOperator(); + d_uf_model[op].d_reconsider_model = false; + } + } + } + } + if( d_quant_sat.find( f )!=d_quant_sat.end() ){ + Debug("fmf-model-prefs") << " * Constant SAT due to definition of " << n << std::endl; + break; + }else{ + int pcIndex = pref==1 ? 0 : 1; + for( int j=0; j<(int)uf_terms.size(); j++ ){ + pro_con[pcIndex].push_back( uf_terms[j] ); + pro_con_patterns[pcIndex].push_back( uf_term_patterns[j] ); + } + } + } + } + if( d_quant_sat.find( f )!=d_quant_sat.end() ){ + quantSatInit++; + d_statistics.d_pre_sat_quant += quantSatInit; + }else{ + nquantSatInit++; + d_statistics.d_pre_nsat_quant += quantSatInit; + } + //add quantifier's preferences to vector + for( int k=0; k<2; k++ ){ + for( int j=0; j<(int)pro_con[k].size(); j++ ){ + Node op = pro_con[k][j].getOperator(); + d_uf_model[op].setValuePreference( f, pro_con[k][j], k==0 ); + d_pro_con_quant[k][ f ].push_back( pro_con_patterns[k][j] ); + } + } + } + Debug("fmf-model-prefs") << "Pre-Model Completion: Quantifiers SAT: " << quantSatInit << " / " << (quantSatInit+nquantSatInit) << std::endl; +} + +int ModelEngine::instantiateQuantifier( Node f ){ + int addedLemmas = 0; + Debug("inst-fmf-ei") << "Add matches for " << f << "..." << std::endl; + Debug("inst-fmf-ei") << " Instantiation Constants: "; + for( size_t i=0; igetInstantiationConstant( f, i ) << " "; + } + Debug("inst-fmf-ei") << std::endl; + for( int k=0; k<2; k++ ){ + Debug("inst-fmf-ei") << " " << ( k==0 ? "Pro" : "Con" ) << " definitions:" << std::endl; + for( int i=0; i<(int)d_pro_con_quant[k][f].size(); i++ ){ + Debug("inst-fmf-ei") << " " << d_pro_con_quant[k][f][i] << std::endl; + } + } + if( d_pro_con_quant[0][f].empty() ){ + Debug("inst-fmf-ei") << "WARNING: " << f << " has no pros for default literal definitions" << std::endl; + } + d_eval_failed_lits.clear(); + d_eval_failed.clear(); + d_eval_term_model.clear(); + //d_eval_term_vals.clear(); + //d_eval_term_fv_deps.clear(); + RepAlphabetIterator riter( d_quantEngine, f, this ); + increment( &riter ); +#ifdef ONE_INST_PER_QUANT_PER_ROUND + while( !riter.isFinished() && addedLemmas==0 ){ +#else + while( !riter.isFinished() ){ +#endif + InstMatch m; + riter.getMatch( d_quantEngine, m ); + Debug("fmf-model-eval") << "* Add instantiation " << std::endl; + riter.d_inst_tried++; + if( d_quantEngine->addInstantiation( f, m ) ){ + addedLemmas++; + } + riter.increment( d_quantEngine ); + increment( &riter ); + } + if( Debug.isOn("inst-fmf-ei") ){ + int totalInst = 1; + for( int i=0; i<(int)f[0].getNumChildren(); i++ ){ + totalInst = totalInst * (int)getReps()->d_type_reps[ f[0][i].getType() ].size(); + } + Debug("inst-fmf-ei") << "Finished: " << std::endl; + Debug("inst-fmf-ei") << " Inst Skipped: " << (totalInst-riter.d_inst_tried) << std::endl; + Debug("inst-fmf-ei") << " Inst Tried: " << riter.d_inst_tried << std::endl; + Debug("inst-fmf-ei") << " Inst Added: " << addedLemmas << std::endl; + Debug("inst-fmf-ei") << " # Tests: " << riter.d_inst_tests << std::endl; + } + return addedLemmas; +} + +void ModelEngine::registerModelBasis( Node n, Node gn ){ + if( d_model_basis.find( n )==d_model_basis.end() ){ + d_model_basis[n] = gn; + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + registerModelBasis( n[i], gn[i] ); + } + } +} + +Node ModelEngine::getArbitraryElement( TypeNode tn, std::vector< Node >& exclude ){ + Node retVal; + if( tn==NodeManager::currentNM()->booleanType() ){ + if( exclude.empty() ){ + retVal = NodeManager::currentNM()->mkConst( false ); + }else if( exclude.size()==1 ){ + retVal = NodeManager::currentNM()->mkConst( areEqual( exclude[0], NodeManager::currentNM()->mkConst( false ) ) ); + } + }else if( d_ra.d_type_reps.find( tn )!=d_ra.d_type_reps.end() ){ + for( int i=0; i<(int)d_ra.d_type_reps[tn].size(); i++ ){ + if( std::find( exclude.begin(), exclude.end(), d_ra.d_type_reps[tn][i] )==exclude.end() ){ + retVal = d_ra.d_type_reps[tn][i]; + break; + } + } + } + if( !retVal.isNull() ){ + return d_quantEngine->getEqualityQuery()->getRepresentative( retVal ); + }else{ + return Node::null(); + } +} + +Node ModelEngine::getModelBasisTerm( TypeNode tn, int i ){ + return d_ss->getCardinalityTerm( tn ); +} + +Node ModelEngine::getModelBasisApplyUfTerm( Node op ){ + if( d_model_basis_term.find( op )==d_model_basis_term.end() ){ + TypeNode t = op.getType(); + std::vector< Node > children; + children.push_back( op ); + for( int i=0; i<(int)t.getNumChildren()-1; i++ ){ + children.push_back( getModelBasisTerm( t[i] ) ); + } + d_model_basis_term[op] = NodeManager::currentNM()->mkNode( APPLY_UF, children ); + } + return d_model_basis_term[op]; +} + +bool ModelEngine::isModelBasisTerm( Node op, Node n ){ + if( n.getOperator()==op ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( !n[i].getAttribute(ModelBasisAttribute()) ){ + return false; + } + } + return true; + }else{ + return false; + } +} + +void ModelEngine::initializeUf( Node n ){ + std::vector< Node > terms; + collectUfTerms( n, terms ); + for( int i=0; i<(int)terms.size(); i++ ){ + initializeUfModel( terms[i].getOperator() ); + } +} + +void ModelEngine::collectUfTerms( Node n, std::vector< Node >& terms ){ + if( n.getKind()==APPLY_UF ){ + terms.push_back( n ); + } + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + collectUfTerms( n[i], terms ); + } +} + +void ModelEngine::initializeUfModel( Node op ){ + if( d_uf_model.find( op )==d_uf_model.end() ){ + TypeNode tn = op.getType(); + tn = tn[ (int)tn.getNumChildren()-1 ]; + if( tn==NodeManager::currentNM()->booleanType() || uf::StrongSolverTheoryUf::isRelevantType( tn ) ){ + d_uf_model[ op ] = UfModel( op, this ); + } + } +} + +void ModelEngine::makeEvalTermModel( Node n ){ + if( d_eval_term_model.find( n )==d_eval_term_model.end() ){ + makeEvalTermIndexOrder( n ); + if( !d_eval_term_use_default_model[n] ){ + Node op = n.getOperator(); + d_eval_term_model[n] = UfModelTreeOrdered( op, d_eval_term_index_order[n] ); + d_uf_model[op].makeModel( d_quantEngine, d_eval_term_model[n] ); + Debug("fmf-model-index-order") << "Make model for " << n << " : " << std::endl; + d_eval_term_model[n].debugPrint( "fmf-model-index-order", d_quantEngine, 2 ); + } + } +} + +struct sortGetMaxVariableNum { + std::map< Node, int > d_max_var_num; + int computeMaxVariableNum( Node n ){ + if( n.getKind()==INST_CONSTANT ){ + return n.getAttribute(InstVarNumAttribute()); + }else if( n.hasAttribute(InstConstantAttribute()) ){ + int maxVal = -1; + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + int val = getMaxVariableNum( n[i] ); + if( val>maxVal ){ + maxVal = val; + } + } + return maxVal; + }else{ + return -1; + } + } + int getMaxVariableNum( Node n ){ + std::map< Node, int >::iterator it = d_max_var_num.find( n ); + if( it==d_max_var_num.end() ){ + int num = computeMaxVariableNum( n ); + d_max_var_num[n] = num; + return num; + }else{ + return it->second; + } + } + bool operator() (Node i,Node j) { return (getMaxVariableNum(i) > argIndex; + std::vector< Node > args; + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( argIndex.find( n[i] )==argIndex.end() ){ + args.push_back( n[i] ); + } + argIndex[n[i]].push_back( i ); + } + sortGetMaxVariableNum sgmvn; + std::sort( args.begin(), args.end(), sgmvn ); + for( int i=0; i<(int)args.size(); i++ ){ + for( int j=0; j<(int)argIndex[ args[i] ].size(); j++ ){ + d_eval_term_index_order[n].push_back( argIndex[ args[i] ][j] ); + } + } + bool useDefault = true; + for( int i=0; i<(int)d_eval_term_index_order[n].size(); i++ ){ + if( i!=d_eval_term_index_order[n][i] ){ + useDefault = false; + break; + } + } + d_eval_term_use_default_model[n] = useDefault; + Debug("fmf-model-index-order") << "Will consider the following index ordering for " << n << " : "; + for( int i=0; i<(int)d_eval_term_index_order[n].size(); i++ ){ + Debug("fmf-model-index-order") << d_eval_term_index_order[n][i] << " "; + } + Debug("fmf-model-index-order") << std::endl; + } +} + +//void ModelEngine::processPredicate( Node f, Node p, bool phase ){ +// Node op = p.getOperator(); +// initializeUfModel( op ); +// d_uf_model[ op ].addRequirement( f, p, phase ); +//} +// +//void ModelEngine::processEquality( Node f, Node eq, bool phase ){ +// for( int i=0; i<2; i++ ){ +// int j = i==0 ? 1 : 0; +// if( eq[i].getKind()==APPLY_UF && eq[i].hasAttribute(InstConstantAttribute()) ){ +// Node op = eq[i].getOperator(); +// initializeUfModel( op ); +// d_uf_model[ op ].addEqRequirement( f, eq[i], eq[j], phase ); +// } +// } +//} + +void ModelEngine::increment( RepAlphabetIterator* rai ){ + if( useModel() ){ + bool success; + do{ + success = true; + if( !rai->isFinished() ){ + //see if instantiation is already true in current model + Debug("fmf-model-eval") << "Evaulating "; + rai->debugPrintSmall("fmf-model-eval"); + //calculate represenative terms we are currently considering + rai->calculateTerms( d_quantEngine ); + rai->d_inst_tests++; + //if eVal is not (int)rai->d_index.size(), then the instantiation is already true in the model, + // and eVal is the highest index in rai which we can safely iterate + int depIndex; + if( evaluate( rai, d_quantEngine->getCounterexampleBody( rai->d_f ), depIndex )==1 ){ + Debug("fmf-model-eval") << " Returned success with depIndex = " << depIndex << std::endl; + //Notice() << "Returned eVal = " << eVal << "/" << rai->d_index.size() << std::endl; + if( depIndex<(int)rai->d_index.size() ){ +#ifdef DISABLE_EVAL_SKIP_MULTIPLE + depIndex = (int)rai->d_index.size()-1; +#endif + rai->increment2( d_quantEngine, depIndex ); + success = false; + } + }else{ + Debug("fmf-model-eval") << " Returned failure." << std::endl; + } + } + }while( !success ); + } +} + +//if evaluate( rai, n, phaseReq ) = eVal, +// if eVal = rai->d_index.size() +// then the formula n instantiated with rai cannot be proven to be equal to phaseReq +// otherwise, +// each n{rai->d_index[0]/x_0...rai->d_index[eVal]/x_eVal, */x_(eVal+1) ... */x_n } is equal to phaseReq in the current model +int ModelEngine::evaluate( RepAlphabetIterator* rai, Node n, int& depIndex ){ + ++(d_statistics.d_eval_formulas); + //Debug("fmf-model-eval-debug") << "Evaluate " << n << " " << phaseReq << std::endl; + if( n.getKind()==NOT ){ + int val = evaluate( rai, n[0], depIndex ); + return val==1 ? -1 : ( val==-1 ? 1 : 0 ); + }else if( n.getKind()==OR || n.getKind()==AND || n.getKind()==IMPLIES ){ + int baseVal = n.getKind()==AND ? 1 : -1; + int eVal = baseVal; + int posDepIndex = (int)rai->d_index.size(); + int negDepIndex = -1; + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + //evaluate subterm + int childDepIndex; + Node nn = ( i==0 && n.getKind()==IMPLIES ) ? n[i].notNode() : n[i]; + int eValT = evaluate( rai, nn, childDepIndex ); + if( eValT==baseVal ){ + if( eVal==baseVal ){ + if( childDepIndex>negDepIndex ){ + negDepIndex = childDepIndex; + } + } + }else if( eValT==-baseVal ){ + eVal = -baseVal; + if( childDepIndexdepIndex2 ? depIndex1 : depIndex2; + return eVal==eVal2 ? 1 : -1; + } + } + return 0; + }else if( n.getKind()==ITE ){ + int depIndex1; + int eVal = evaluate( rai, n[0], depIndex1 ); + if( eVal==0 ){ + //DO_THIS: evaluate children to see if they are the same value? + return 0; + }else{ + int depIndex2; + int eValT = evaluate( rai, n[eVal==1 ? 1 : 2], depIndex2 ); + depIndex = depIndex1>depIndex2 ? depIndex1 : depIndex2; + return eValT; + } + }else if( n.getKind()==FORALL ){ + return 0; + }else{ + ////if we know we will fail again, immediately return + //if( d_eval_failed.find( n )!=d_eval_failed.end() ){ + // if( d_eval_failed[n] ){ + // return -1; + // } + //} + //Debug("fmf-model-eval-debug") << "Evaluate literal " << n << std::endl; + //this should be a literal + Node gn = n.substitute( rai->d_ic.begin(), rai->d_ic.end(), rai->d_terms.begin(), rai->d_terms.end() ); + //Debug("fmf-model-eval-debug") << " Ground version = " << gn << std::endl; + int retVal = 0; + std::vector< Node > fv_deps; + if( n.getKind()==APPLY_UF ){ + //case for boolean predicates + Node val = evaluateTerm( n, gn, fv_deps ); + if( d_quantEngine->getEqualityQuery()->hasTerm( val ) ){ + if( areEqual( val, NodeManager::currentNM()->mkConst( true ) ) ){ + retVal = 1; + }else{ + retVal = -1; + } + } + }else if( n.getKind()==EQUAL ){ + //case for equality + retVal = evaluateEquality( n[0], n[1], gn[0], gn[1], fv_deps ); + } + if( retVal!=0 ){ + int maxIndex = -1; + for( int i=0; i<(int)fv_deps.size(); i++ ){ + int index = rai->d_var_order[ fv_deps[i].getAttribute(InstVarNumAttribute()) ]; + if( index>maxIndex ){ + maxIndex = index; + if( index==(int)rai->d_index.size()-1 ){ + break; + } + } + } + Debug("fmf-model-eval-debug") << "Evaluate literal: return " << retVal << ", depends = " << maxIndex << std::endl; + depIndex = maxIndex; + } + return retVal; + } +} + +int ModelEngine::evaluateEquality( Node n1, Node n2, Node gn1, Node gn2, std::vector< Node >& fv_deps ){ + ++(d_statistics.d_eval_eqs); + Debug("fmf-model-eval-debug") << "Evaluate equality: " << std::endl; + Debug("fmf-model-eval-debug") << " " << n1 << " = " << n2 << std::endl; + Debug("fmf-model-eval-debug") << " " << gn1 << " = " << gn2 << std::endl; + Node val1 = evaluateTerm( n1, gn1, fv_deps ); + Node val2 = evaluateTerm( n2, gn2, fv_deps ); + Debug("fmf-model-eval-debug") << " Values : "; + printRepresentative( "fmf-model-eval-debug", d_quantEngine, val1 ); + Debug("fmf-model-eval-debug") << " = "; + printRepresentative( "fmf-model-eval-debug", d_quantEngine, val2 ); + Debug("fmf-model-eval-debug") << std::endl; + int retVal = 0; + if( areEqual( val1, val2 ) ){ + retVal = 1; + }else if( areDisequal( val1, val2 ) ){ + retVal = -1; + } + if( retVal!=0 ){ + Debug("fmf-model-eval-debug") << " ---> Success, value = " << (retVal==1) << std::endl; + }else{ + Debug("fmf-model-eval-debug") << " ---> Failed" << std::endl; + } + Debug("fmf-model-eval-debug") << " Value depends on variables: "; + for( int i=0; i<(int)fv_deps.size(); i++ ){ + Debug("fmf-model-eval-debug") << fv_deps[i] << " "; + } + Debug("fmf-model-eval-debug") << std::endl; + return retVal; +} + +Node ModelEngine::evaluateTerm( Node n, Node gn, std::vector< Node >& fv_deps ){ + if( n.hasAttribute(InstConstantAttribute()) ){ + if( n.getKind()==INST_CONSTANT ){ + fv_deps.push_back( n ); + return gn; + //}else if( d_eval_term_fv_deps.find( n )!=d_eval_term_fv_deps.end() && + // d_eval_term_fv_deps[n].find( gn )!=d_eval_term_fv_deps[n].end() ){ + // fv_deps.insert( fv_deps.end(), d_eval_term_fv_deps[n][gn].begin(), d_eval_term_fv_deps[n][gn].end() ); + // return d_eval_term_vals[gn]; + }else{ + //Debug("fmf-model-eval-debug") << "Evaluate term " << n << " (" << gn << ")" << std::endl; + //first we must evaluate the arguments + Node val = gn; + if( n.getKind()==APPLY_UF ){ + Node op = gn.getOperator(); + //if it is a defined UF, then consult the interpretation + Node gnn = gn; + ++(d_statistics.d_eval_uf_terms); + int depIndex = 0; + //first we must evaluate the arguments + bool childrenChanged = false; + std::vector< Node > children; + children.push_back( op ); + std::map< int, std::vector< Node > > children_var_deps; + //for each argument, calculate its value, and the variables its value depends upon + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + Node nn = evaluateTerm( n[i], gn[i], children_var_deps[i] ); + children.push_back( nn ); + childrenChanged = childrenChanged || nn!=gn[i]; + } + //remake gn if changed + if( childrenChanged ){ + gnn = NodeManager::currentNM()->mkNode( APPLY_UF, children ); + } + if( d_uf_model.find( op )!=d_uf_model.end() ){ +#ifdef USE_INDEX_ORDERING + //make the term model specifically for n + makeEvalTermModel( n ); + //now, consult the model + if( d_eval_term_use_default_model[n] ){ + val = d_uf_model[op].d_tree.getValue( d_quantEngine, gnn, depIndex ); + }else{ + val = d_eval_term_model[ n ].getValue( d_quantEngine, gnn, depIndex ); + } + //Debug("fmf-model-eval-debug") << "Evaluate term " << n << " (" << gn << ", " << gnn << ")" << std::endl; + //d_eval_term_model[ n ].debugPrint("fmf-model-eval-debug", d_quantEngine ); + Assert( !val.isNull() ); +#else + //now, consult the model + val = d_uf_model[op].d_tree.getValue( d_quantEngine, gnn, depIndex ); +#endif + }else{ + d_eval_term_use_default_model[n] = true; + val = gnn; + depIndex = (int)n.getNumChildren(); + } + Debug("fmf-model-eval-debug") << "Evaluate term " << n << " = " << gn << " = " << gnn << " = "; + printRepresentative( "fmf-model-eval-debug", d_quantEngine, val ); + Debug("fmf-model-eval-debug") << ", depIndex = " << depIndex << std::endl; + if( !val.isNull() ){ +#ifdef USE_INDEX_ORDERING + for( int i=0; i >::iterator it = children_var_deps.begin(); it != children_var_deps.end(); ++it ){ + if( it->firstsecond.begin(), it->second.end() ); + } + } +#endif + } + ////cache the result + //d_eval_term_vals[gn] = val; + //d_eval_term_fv_deps[n][gn].insert( d_eval_term_fv_deps[n][gn].end(), fv_deps.begin(), fv_deps.end() ); + } + return val; + } + }else{ + return n; + } +} + +void ModelEngine::clearEvalFailed( int index ){ + for( int i=0; i<(int)d_eval_failed_lits[index].size(); i++ ){ + d_eval_failed[ d_eval_failed_lits[index][i] ] = false; + } + d_eval_failed_lits[index].clear(); +} + +bool ModelEngine::areEqual( Node a, Node b ){ + return d_quantEngine->getEqualityQuery()->areEqual( a, b ); +} + +bool ModelEngine::areDisequal( Node a, Node b ){ + return d_quantEngine->getEqualityQuery()->areDisequal( a, b ); +} + +void ModelEngine::debugPrint( const char* c ){ + Debug( c ) << "---Current Model---" << std::endl; + Debug( c ) << "Representatives: " << std::endl; + d_ra.debugPrint( c, d_quantEngine ); + Debug( c ) << "Quantifiers: " << std::endl; + for( int i=0; i<(int)d_quantEngine->getNumAssertedQuantifiers(); i++ ){ + Node f = d_quantEngine->getAssertedQuantifier( i ); + Debug( c ) << " "; + if( d_quant_sat.find( f )!=d_quant_sat.end() ){ + Debug( c ) << "*SAT* "; + }else{ + Debug( c ) << " "; + } + Debug( c ) << f << std::endl; + } + Debug( c ) << "Functions: " << std::endl; + for( std::map< Node, UfModel >::iterator it = d_uf_model.begin(); it != d_uf_model.end(); ++it ){ + it->second.debugPrint( c ); + Debug( c ) << std::endl; + } +} + +ModelEngine::Statistics::Statistics(): + d_inst_rounds("ModelEngine::Inst_Rounds", 0), + d_pre_sat_quant("ModelEngine::Status_quant_pre_sat", 0), + d_pre_nsat_quant("ModelEngine::Status_quant_pre_non_sat", 0), + d_eval_formulas("ModelEngine::Eval_Formulas", 0 ), + d_eval_eqs("ModelEngine::Eval_Equalities", 0 ), + d_eval_uf_terms("ModelEngine::Eval_Uf_Terms", 0 ), + d_num_quants_init("ModelEngine::Num_Quants", 0 ), + d_num_quants_init_fail("ModelEngine::Num_Quants_No_Basis", 0 ) +{ + StatisticsRegistry::registerStat(&d_inst_rounds); + StatisticsRegistry::registerStat(&d_pre_sat_quant); + StatisticsRegistry::registerStat(&d_pre_nsat_quant); + StatisticsRegistry::registerStat(&d_eval_formulas); + StatisticsRegistry::registerStat(&d_eval_eqs); + StatisticsRegistry::registerStat(&d_eval_uf_terms); + StatisticsRegistry::registerStat(&d_num_quants_init); + StatisticsRegistry::registerStat(&d_num_quants_init_fail); +} + +ModelEngine::Statistics::~Statistics(){ + StatisticsRegistry::unregisterStat(&d_inst_rounds); + StatisticsRegistry::unregisterStat(&d_pre_sat_quant); + StatisticsRegistry::unregisterStat(&d_pre_nsat_quant); + StatisticsRegistry::unregisterStat(&d_eval_formulas); + StatisticsRegistry::unregisterStat(&d_eval_eqs); + StatisticsRegistry::unregisterStat(&d_eval_uf_terms); + StatisticsRegistry::unregisterStat(&d_num_quants_init); + StatisticsRegistry::unregisterStat(&d_num_quants_init_fail); +} diff --git a/src/theory/quantifiers/model_engine.h b/src/theory/quantifiers/model_engine.h new file mode 100644 index 000000000..4031efdf9 --- /dev/null +++ b/src/theory/quantifiers/model_engine.h @@ -0,0 +1,369 @@ +/********************* */ +/*! \file instantiation_engine.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Instantiation Engine classes + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__MODEL_ENGINE_H +#define __CVC4__MODEL_ENGINE_H + +#include "theory/quantifiers_engine.h" +#include "theory/quantifiers/theory_quantifiers.h" + +namespace CVC4 { +namespace theory { + +namespace uf{ + class StrongSolverTheoryUf; +} + +namespace quantifiers { + +/** this class stores a representative alphabet */ +class RepAlphabet { +public: + RepAlphabet(){} + RepAlphabet( RepAlphabet& ra, QuantifiersEngine* qe ); + ~RepAlphabet(){} + std::map< TypeNode, std::vector< Node > > d_type_reps; + std::map< Node, int > d_tmap; + /** clear the alphabet */ + void clear(){ + d_type_reps.clear(); + d_tmap.clear(); + } + /** set the representatives for type */ + void set( TypeNode t, std::vector< Node >& reps ); + /** returns index in d_type_reps for node n */ + int getIndexFor( Node n ) { return d_tmap.find( n )!=d_tmap.end() ? d_tmap[n] : -1; } + /** debug print */ + void debugPrint( const char* c, QuantifiersEngine* qe ); +}; + +class ModelEngine; + +/** this class iterates over a RepAlphabet */ +class RepAlphabetIterator { +private: + void initialize( QuantifiersEngine* qe, Node f, ModelEngine* model ); +public: + RepAlphabetIterator( QuantifiersEngine* qe, Node f, ModelEngine* model ); + RepAlphabetIterator( QuantifiersEngine* qe, Node f, ModelEngine* model, std::vector< int >& indexOrder ); + ~RepAlphabetIterator(){} + //pointer to quantifier + Node d_f; + //pointer to model + ModelEngine* d_model; + //index we are considering + std::vector< int > d_index; + //ordering for variables we are indexing over + // for example, given reps = { a, b } and quantifier forall( x, y, z ) P( x, y, z ) with d_index_order = { 2, 0, 1 }, + // then we consider instantiations in this order: + // a/x a/y a/z + // a/x b/y a/z + // b/x a/y a/z + // b/x b/y a/z + // ... + std::vector< int > d_index_order; + //variables to index they are considered at + // for example, if d_index_order = { 2, 0, 1 } + // then d_var_order = { 0 -> 1, 1 -> 2, 2 -> 0 } + std::map< int, int > d_var_order; + //the instantiation constants of d_f + std::vector< Node > d_ic; + //the current terms we are considering + std::vector< Node > d_terms; +public: + /** increment the iterator */ + void increment2( QuantifiersEngine* qe, int counter ); + void increment( QuantifiersEngine* qe ); + /** is the iterator finished? */ + bool isFinished(); + /** produce the match that this iterator represents */ + void getMatch( QuantifiersEngine* qe, InstMatch& m ); + /** get the i_th term we are considering */ + Node getTerm( int i ); + /** get the number of terms we are considering */ + int getNumTerms() { return d_f[0].getNumChildren(); } + /** refresh d_term to be current with d_index */ + void calculateTerms( QuantifiersEngine* qe ); + /** debug print */ + void debugPrint( const char* c ); + void debugPrintSmall( const char* c ); + //for debugging + int d_inst_tried; + int d_inst_tests; +}; + + +class UfModelTree +{ +public: + UfModelTree(){} + /** the data */ + std::map< Node, UfModelTree > d_data; + /** the value of this tree node (if all paths lead to same value) */ + Node d_value; +public: + //is this model tree empty? + bool isEmpty() { return d_data.empty(); } + //clear + void clear(){ + d_data.clear(); + d_value = Node::null(); + } + /** setValue function + * + * For each argument of n with ModelBasisAttribute() set to true will be considered default arguments if ground=false + * + */ + void setValue( QuantifiersEngine* qe, Node n, Node v, std::vector< int >& indexOrder, bool ground, int argIndex ); + /** getValue function + * + * returns $val, the value of ground term n + * Say n is f( t_0...t_n ) + * depIndex is the index for which every term of the form f( t_0 ... t_depIndex, *,... * ) is equal to $val + * for example, if g( x_0, x_1, x_2 ) := lambda x_0 x_1 x_2. if( x_1==a ) b else c, + * then g( a, a, a ) would return b with depIndex = 1 + * If ground = true, we are asking whether the term n is constant (assumes that all non-model basis arguments are ground) + * + */ + Node getValue( QuantifiersEngine* qe, Node n, std::vector< int >& indexOrder, int& depIndex, int argIndex ); + ///** getConstant Value function + // * + // * given term n, where n may contain model basis arguments + // * if n is constant for its entire domain, then this function returns the value of its domain + // * otherwise, it returns null + // * for example, if f( x_0, x_1 ) := if( x_0 = a ) b else if( x_1 = a ) a else b, + // * then f( a, e ) would return b, while f( e, a ) would return null + // * + // */ + Node getConstantValue( QuantifiersEngine* qe, Node n, std::vector< int >& indexOrder, int argIndex ); + /** simplify function */ + void simplify( Node op, Node defaultVal, int argIndex ); + // is total ? + bool isTotal( Node op, int argIndex ); +public: + void debugPrint( const char* c, QuantifiersEngine* qe, std::vector< int >& indexOrder, int ind = 0, int arg = 0 ); +}; + +class UfModelTreeOrdered +{ +private: + Node d_op; + std::vector< int > d_index_order; + UfModelTree d_tree; +public: + UfModelTreeOrdered(){} + UfModelTreeOrdered( Node op ) : d_op( op ){ + TypeNode tn = d_op.getType(); + for( int i=0; i<(int)(tn.getNumChildren()-1); i++ ){ + d_index_order.push_back( i ); + } + } + UfModelTreeOrdered( Node op, std::vector< int >& indexOrder ) : d_op( op ){ + d_index_order.insert( d_index_order.end(), indexOrder.begin(), indexOrder.end() ); + } + bool isEmpty() { return d_tree.isEmpty(); } + void clear() { d_tree.clear(); } + void setValue( QuantifiersEngine* qe, Node n, Node v, bool ground = true ){ + d_tree.setValue( qe, n, v, d_index_order, ground, 0 ); + } + Node getValue( QuantifiersEngine* qe, Node n, int& depIndex ){ + return d_tree.getValue( qe, n, d_index_order, depIndex, 0 ); + } + Node getConstantValue( QuantifiersEngine* qe, Node n ) { + return d_tree.getConstantValue( qe, n, d_index_order, 0 ); + } + void simplify() { d_tree.simplify( d_op, Node::null(), 0 ); } + bool isTotal() { return d_tree.isTotal( d_op, 0 ); } +public: + void debugPrint( const char* c, QuantifiersEngine* qe, int ind = 0 ){ + d_tree.debugPrint( c, qe, d_index_order, ind ); + } +}; + +class UfModel +{ +//public: + //std::map< Node, std::vector< Node > > d_reqs[2]; + //std::map< Node, std::map< Node, std::vector< Node > > > d_eq_reqs[2]; + ///** add requirement */ + //void addRequirement( Node f, Node p, bool phase ) { d_reqs[ phase ? 1 : 0 ][ f ].push_back( p ); } + ///** add equality requirement */ + //void addEqRequirement( Node f, Node t, Node te, bool phase ) { d_eq_reqs[ phase ? 1 : 0 ][ f ][ t ].push_back( te ); } +private: + Node d_op; + ModelEngine* d_me; + std::vector< Node > d_ground_asserts; + std::vector< Node > d_ground_asserts_reps; + bool d_model_constructed; + //store for set values + std::map< Node, Node > d_set_values[2]; + // preferences for default values + std::vector< Node > d_values; + std::map< Node, std::vector< Node > > d_value_pro_con[2]; + /** set value */ + void setValue( Node n, Node v, bool ground = true ); + /** set model */ + void setModel(); + /** clear model */ + void clearModel(); +public: + UfModel(){} + UfModel( Node op, ModelEngine* qe ); + ~UfModel(){} + //data structure that stores the model + UfModelTreeOrdered d_tree; + //quantifiers that are satisfied because of the constant definition of d_op + bool d_reconsider_model; +public: + /** debug print */ + void debugPrint( const char* c ); + /** get constant value */ + Node getConstantValue( QuantifiersEngine* qe, Node n ); + /** is empty */ + bool isEmpty() { return d_ground_asserts.empty(); } + /** is constant */ + bool isConstant(); +public: + /** build model */ + void buildModel(); + /** make model */ + void makeModel( QuantifiersEngine* qe, UfModelTreeOrdered& tree ); +public: + /** set value preference */ + void setValuePreference( Node f, Node n, bool isPro ); +}; + + + + +class ModelEngine : public QuantifiersModule +{ + friend class UfModel; + friend class RepAlphabetIterator; +private: + TheoryQuantifiers* d_th; + QuantifiersEngine* d_quantEngine; + uf::StrongSolverTheoryUf* d_ss; + //which quantifiers have been initialized + std::map< Node, bool > d_quant_init; + //map from ops to model basis terms + std::map< Node, Node > d_model_basis_term; + //map from instantiation terms to their model basis equivalent + std::map< Node, Node > d_model_basis; + //the model we are working with + RepAlphabet d_ra; + std::map< Node, UfModel > d_uf_model; + ////map from model basis terms to quantifiers that are pro/con their definition + //std::map< Node, std::vector< Node > > d_quant_pro_con[2]; + //map from quantifiers to model basis terms that are pro the definition of + std::map< Node, std::vector< Node > > d_pro_con_quant[2]; + //map from quantifiers to if are constant SAT + std::map< Node, bool > d_quant_sat; +private: + int evaluate( RepAlphabetIterator* rai, Node n, int& depIndex ); + int evaluateEquality( Node n1, Node n2, Node gn1, Node gn2, std::vector< Node >& fv_deps ); + Node evaluateTerm( Node n, Node gn, std::vector< Node >& fv_deps ); + //temporary storing which literals have failed + void clearEvalFailed( int index ); + std::map< Node, bool > d_eval_failed; + std::map< int, std::vector< Node > > d_eval_failed_lits; + ////temporary storing for values/free variable dependencies + //std::map< Node, Node > d_eval_term_vals; + //std::map< Node, std::map< Node, std::vector< Node > > > d_eval_term_fv_deps; +private: + //map from terms to the models used to calculate their value + std::map< Node, UfModelTreeOrdered > d_eval_term_model; + std::map< Node, bool > d_eval_term_use_default_model; + void makeEvalTermModel( Node n ); + //index ordering to use for each term + std::map< Node, std::vector< int > > d_eval_term_index_order; + int getMaxVariableNum( int n ); + void makeEvalTermIndexOrder( Node n ); +public: + void increment( RepAlphabetIterator* rai ); +private: + //queries about equality + bool areEqual( Node a, Node b ); + bool areDisequal( Node a, Node b ); +private: + bool useModel(); +private: + //initialize quantifiers, return false if lemma needed to be added + bool initializeQuantifier( Node f ); + //build representatives + void buildRepresentatives(); + //initialize model + void initializeModel(); + //analyze quantifiers + void analyzeQuantifiers(); + //instantiate quantifier, return number of lemmas produced + int instantiateQuantifier( Node f ); +private: + //register instantiation terms with their corresponding model basis terms + void registerModelBasis( Node n, Node gn ); + //for building UF model + void initializeUf( Node n ); + void collectUfTerms( Node n, std::vector< Node >& terms ); + void initializeUfModel( Node op ); + //void processPredicate( Node f, Node p, bool phase ); + //void processEquality( Node f, Node eq, bool phase ); +public: + ModelEngine( TheoryQuantifiers* th ); + ~ModelEngine(){} + //get quantifiers engine + QuantifiersEngine* getQuantifiersEngine() { return d_quantEngine; } + //get representatives + RepAlphabet* getReps() { return &d_ra; } + //get arbitrary element + Node getArbitraryElement( TypeNode tn, std::vector< Node >& exclude ); + //get model basis term + Node getModelBasisTerm( TypeNode tn, int i = 0 ); + //get model basis term for op + Node getModelBasisApplyUfTerm( Node op ); + //is model basis term for op + bool isModelBasisTerm( Node op, Node n ); +public: + void check( Theory::Effort e ); + void registerQuantifier( Node f ); + void assertNode( Node f ); + Node explain(TNode n){ return Node::null(); } + void propagate( Theory::Effort level ){} + void debugPrint( const char* c ); +public: + /** statistics class */ + class Statistics { + public: + IntStat d_inst_rounds; + IntStat d_pre_sat_quant; + IntStat d_pre_nsat_quant; + IntStat d_eval_formulas; + IntStat d_eval_eqs; + IntStat d_eval_uf_terms; + IntStat d_num_quants_init; + IntStat d_num_quants_init_fail; + Statistics(); + ~Statistics(); + }; + Statistics d_statistics; +}; + +} +} +} + +#endif diff --git a/src/theory/quantifiers/quantifiers_rewriter.cpp b/src/theory/quantifiers/quantifiers_rewriter.cpp new file mode 100644 index 000000000..0fba9d59e --- /dev/null +++ b/src/theory/quantifiers/quantifiers_rewriter.cpp @@ -0,0 +1,722 @@ +/********************* */ +/*! \file theory_quantifiers_rewriter.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of QuantifiersRewriter class + **/ + +#include "theory/quantifiers/quantifiers_rewriter.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::quantifiers; + +bool QuantifiersRewriter::isClause( Node n ){ + if( isLiteral( n ) ){ + return true; + }else if( n.getKind()==NOT ){ + return isCube( n[0] ); + }else if( n.getKind()==OR ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( !isClause( n[i] ) ){ + return false; + } + } + return true; + }else if( n.getKind()==IMPLIES ){ + return isCube( n[0] ) && isClause( n[1] ); + }else{ + return false; + } +} + +bool QuantifiersRewriter::isLiteral( Node n ){ + switch( n.getKind() ){ + case NOT: + return isLiteral( n[0] ); + break; + case OR: + case AND: + case IMPLIES: + case XOR: + case ITE: + case IFF: + return false; + break; + case EQUAL: + return n[0].getType()!=NodeManager::currentNM()->booleanType(); + break; + default: + break; + } + return true; +} + +bool QuantifiersRewriter::isCube( Node n ){ + if( isLiteral( n ) ){ + return true; + }else if( n.getKind()==NOT ){ + return isClause( n[0] ); + }else if( n.getKind()==AND ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( !isCube( n[i] ) ){ + return false; + } + } + return true; + }else{ + return false; + } +} + +void QuantifiersRewriter::addNodeToOrBuilder( Node n, NodeBuilder<>& t ){ + if( n.getKind()==OR ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + t << n[i]; + } + }else{ + t << n; + } +} + +void QuantifiersRewriter::computeArgs( std::map< Node, bool >& active, Node n ){ + if( active.find( n )!=active.end() ){ + active[n] = true; + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + computeArgs( active, n[i] ); + } + } +} + +void QuantifiersRewriter::computeArgs( std::vector< Node >& args, std::vector< Node >& activeArgs, Node n ){ + std::map< Node, bool > active; + for( int i=0; i<(int)args.size(); i++ ){ + active[ args[i] ] = false; + } + //Notice() << "For " << n << " : " << std::endl; + computeArgs( active, n ); + activeArgs.clear(); + for( std::map< Node, bool >::iterator it = active.begin(); it != active.end(); ++it ){ + Node n = it->first; + //Notice() << " " << it->first << " is " << it->second << std::endl; + if( it->second ){ //only add bound variables that occur in body + activeArgs.push_back( it->first ); + } + } +} + +bool QuantifiersRewriter::hasArg( std::vector< Node >& args, Node n ){ + if( std::find( args.begin(), args.end(), n )!=args.end() ){ + return true; + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( hasArg( args, n[i] ) ){ + return true; + } + } + return false; + } +} + +void QuantifiersRewriter::setNestedQuantifiers( Node n, Node q ){ + if( n.getKind()==FORALL || n.getKind()==EXISTS ){ + Debug("quantifiers-rewrite-debug") << "Set nested quant attribute " << n << std::endl; + NestedQuantAttribute nqai; + n.setAttribute(nqai,q); + } + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + setNestedQuantifiers( n[i], q ); + } +} + +RewriteResponse QuantifiersRewriter::preRewrite(TNode in) { + Debug("quantifiers-rewrite-debug") << "pre-rewriting " << in << " " << in.hasAttribute(NestedQuantAttribute()) << std::endl; + if( in.getKind()==kind::EXISTS || in.getKind()==kind::FORALL ){ + if( !in.hasAttribute(NestedQuantAttribute()) ){ + setNestedQuantifiers( in[ 1 ], in ); + } + std::vector< Node > args; + for( int i=0; i<(int)in[0].getNumChildren(); i++ ){ + args.push_back( in[0][i] ); + } + Node body = in[1]; + bool doRewrite = false; + while( body.getNumChildren()>=2 && body.getKind()==in.getKind() ){ + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + args.push_back( body[0][i] ); + } + body = body[1]; + doRewrite = true; + } + if( doRewrite ){ + std::vector< Node > children; + children.push_back( NodeManager::currentNM()->mkNode(kind::BOUND_VAR_LIST,args) ); + children.push_back( body ); + if( in.getNumChildren()==3 ){ + children.push_back( in[2] ); + } + Node n = NodeManager::currentNM()->mkNode( in.getKind(), children ); + if( in!=n ){ + if( in.hasAttribute(NestedQuantAttribute()) ){ + setNestedQuantifiers( n, in.getAttribute(NestedQuantAttribute()) ); + } + Debug("quantifiers-pre-rewrite") << "*** pre-rewrite " << in << std::endl; + Debug("quantifiers-pre-rewrite") << " to " << std::endl; + Debug("quantifiers-pre-rewrite") << n << std::endl; + } + return RewriteResponse(REWRITE_DONE, n); + } + } + return RewriteResponse(REWRITE_DONE, in); +} + +RewriteResponse QuantifiersRewriter::postRewrite(TNode in) { + Debug("quantifiers-rewrite-debug") << "post-rewriting " << in << " " << in.hasAttribute(NestedQuantAttribute()) << std::endl; + if( in.getKind()==kind::EXISTS || in.getKind()==kind::FORALL ){ + //get the arguments + std::vector< Node > args; + for( int i=0; i<(int)in[0].getNumChildren(); i++ ){ + args.push_back( in[0][i] ); + } + //get the body + Node body = in[1]; + if( in.getKind()==EXISTS ){ + body = body.getKind()==NOT ? body[0] : body.notNode(); + } + //get the instantiation pattern list + Node ipl; + if( in.getNumChildren()==3 ){ + ipl = in[2]; + } + bool isNested = in.hasAttribute(NestedQuantAttribute()); + //compute miniscoping first + Node n = body;//computeNNF( body ); TODO: compute NNF here (current bad idea since arithmetic rewrites equalities) + if( body!=n ){ + Notice() << "NNF " << body << " -> " << n << std::endl; + } + n = computeMiniscoping( args, n, ipl, isNested ); + if( in.getKind()==kind::EXISTS ){ + n = n.getKind()==NOT ? n[0] : n.notNode(); + } + //compute other rewrite options for each produced quantifier + n = rewriteQuants( n, isNested, true ); + //print if changed + if( in!=n ){ + if( in.hasAttribute(NestedQuantAttribute()) ){ + setNestedQuantifiers( n, in.getAttribute(NestedQuantAttribute()) ); + } + Debug("quantifiers-rewrite") << "*** rewrite " << in << std::endl; + Debug("quantifiers-rewrite") << " to " << std::endl; + Debug("quantifiers-rewrite") << n << std::endl; + if( in.hasAttribute(InstConstantAttribute()) ){ + InstConstantAttribute ica; + n.setAttribute(ica,in.getAttribute(InstConstantAttribute()) ); + } + } + return RewriteResponse(REWRITE_DONE, n ); + } + return RewriteResponse(REWRITE_DONE, in); +} + +Node QuantifiersRewriter::computeNNF( Node body ){ + if( body.getKind()==NOT ){ + if( body[0].getKind()==NOT ){ + return computeNNF( body[0][0] ); + }else if( isLiteral( body[0] ) ){ + return body; + }else{ + std::vector< Node > children; + Kind k = body[0].getKind(); + if( body[0].getKind()==OR || body[0].getKind()==IMPLIES || body[0].getKind()==AND ){ + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + Node nn = body[0].getKind()==IMPLIES && i==0 ? body[0][i] : body[0][i].notNode(); + children.push_back( computeNNF( nn ) ); + } + k = body[0].getKind()==AND ? OR : AND; + }else if( body[0].getKind()==XOR || body[0].getKind()==IFF ){ + for( int i=0; i<2; i++ ){ + Node nn = i==0 ? body[0][i] : body[0][i].notNode(); + children.push_back( computeNNF( nn ) ); + } + }else if( body[0].getKind()==ITE ){ + for( int i=0; i<3; i++ ){ + Node nn = i==0 ? body[0][i] : body[0][i].notNode(); + children.push_back( computeNNF( nn ) ); + } + }else{ + Notice() << "Unhandled Quantifiers NNF: " << body << std::endl; + return body; + } + return NodeManager::currentNM()->mkNode( k, children ); + } + }else if( isLiteral( body ) ){ + return body; + }else{ + std::vector< Node > children; + bool childrenChanged = false; + for( int i=0; i<(int)body.getNumChildren(); i++ ){ + Node nc = computeNNF( body[i] ); + children.push_back( nc ); + childrenChanged = childrenChanged || nc!=body[i]; + } + if( childrenChanged ){ + return NodeManager::currentNM()->mkNode( body.getKind(), children ); + }else{ + return body; + } + } +} + +Node QuantifiersRewriter::computeVarElimination( Node body, std::vector< Node >& args, Node& ipl ){ + //Notice() << "Compute var elimination for " << f << std::endl; + std::map< Node, bool > litPhaseReq; + QuantifiersEngine::computePhaseReqs( body, false, litPhaseReq ); + std::vector< Node > vars; + std::vector< Node > subs; + for( std::map< Node, bool >::iterator it = litPhaseReq.begin(); it != litPhaseReq.end(); ++it ){ + //Notice() << " " << it->first << " -> " << ( it->second ? "true" : "false" ) << std::endl; + if( it->first.getKind()==EQUAL ){ + if( it->second ){ + for( int i=0; i<2; i++ ){ + int j = i==0 ? 1 : 0; + std::vector< Node >::iterator ita = std::find( args.begin(), args.end(), it->first[i] ); + if( ita!=args.end() ){ + std::vector< Node > temp; + temp.push_back( it->first[i] ); + if( !hasArg( temp, it->first[j] ) ){ + vars.push_back( it->first[i] ); + subs.push_back( it->first[j] ); + args.erase( ita ); + break; + } + } + } + if( !vars.empty() ){ + break; + } + } + } + } + if( !vars.empty() ){ + //Notice() << "VE " << vars.size() << "/" << n[0].getNumChildren() << std::endl; + //remake with eliminated nodes + body = body.substitute( vars.begin(), vars.end(), subs.begin(), subs.end() ); + body = Rewriter::rewrite( body ); + if( !ipl.isNull() ){ + ipl = ipl.substitute( vars.begin(), vars.end(), subs.begin(), subs.end() ); + } + } + return body; +} + +Node QuantifiersRewriter::computeClause( Node n ){ + Assert( isClause( n ) ); + if( isLiteral( n ) ){ + return n; + }else{ + NodeBuilder<> t(OR); + if( n.getKind()==NOT ){ + if( n[0].getKind()==NOT ){ + return computeClause( n[0][0] ); + }else{ + //De-Morgan's law + Assert( n[0].getKind()==AND ); + for( int i=0; i<(int)n[0].getNumChildren(); i++ ){ + Node nn = computeClause( n[0][i].notNode() ); + addNodeToOrBuilder( nn, t ); + } + } + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + Node nc = ( ( i==0 && n.getKind()==IMPLIES ) ? n[i].notNode() : n[i] ); + Node nn = computeClause( nc ); + addNodeToOrBuilder( nn, t ); + } + } + return t.constructNode(); + } +} + +Node QuantifiersRewriter::computeCNF( Node n, std::vector< Node >& args, NodeBuilder<>& defs, bool forcePred ){ + if( isLiteral( n ) ){ + return n; + }else if( !forcePred && isClause( n ) ){ + return computeClause( n ); + }else{ + Kind k = ( n.getKind()==IMPLIES ? OR : ( n.getKind()==XOR ? IFF : n.getKind() ) ); + NodeBuilder<> t(k); + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + Node nc = ( i==0 && ( n.getKind()==IMPLIES || n.getKind()==XOR ) ) ? n[i].notNode() : n[i]; + Node ncnf = computeCNF( nc, args, defs, k!=OR ); + if( k==OR ){ + addNodeToOrBuilder( ncnf, t ); + }else{ + t << ncnf; + } + } + if( !forcePred && k==OR ){ + return t.constructNode(); + }else{ + //compute the free variables + Node nt = t; + std::vector< Node > activeArgs; + computeArgs( args, activeArgs, nt ); + std::vector< TypeNode > argTypes; + for( int i=0; i<(int)activeArgs.size(); i++ ){ + argTypes.push_back( activeArgs[i].getType() ); + } + //create the predicate + Assert( argTypes.size()>0 ); + TypeNode typ = NodeManager::currentNM()->mkFunctionType( argTypes, NodeManager::currentNM()->booleanType() ); + std::stringstream ss; + ss << "cnf_" << n.getKind() << "_" << n.getId(); + Node op = NodeManager::currentNM()->mkVar( ss.str(), typ ); + std::vector< Node > predArgs; + predArgs.push_back( op ); + predArgs.insert( predArgs.end(), activeArgs.begin(), activeArgs.end() ); + Node pred = NodeManager::currentNM()->mkNode( APPLY_UF, predArgs ); + Debug("quantifiers-rewrite-cnf-debug") << "Made predicate " << pred << " for " << nt << std::endl; + //create the bound var list + Node bvl = NodeManager::currentNM()->mkNode( BOUND_VAR_LIST, activeArgs ); + //now, look at the structure of nt + if( nt.getKind()==NOT ){ + //case for NOT + for( int i=0; i<2; i++ ){ + NodeBuilder<> tt(OR); + tt << ( i==0 ? nt[0].notNode() : nt[0] ); + tt << ( i==0 ? pred.notNode() : pred ); + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + } + }else if( nt.getKind()==OR ){ + //case for OR + for( int i=0; i<(int)nt.getNumChildren(); i++ ){ + NodeBuilder<> tt(OR); + tt << nt[i].notNode() << pred; + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + } + NodeBuilder<> tt(OR); + for( int i=0; i<(int)nt.getNumChildren(); i++ ){ + tt << nt[i]; + } + tt << pred.notNode(); + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + }else if( nt.getKind()==AND ){ + //case for AND + for( int i=0; i<(int)nt.getNumChildren(); i++ ){ + NodeBuilder<> tt(OR); + tt << nt[i] << pred.notNode(); + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + } + NodeBuilder<> tt(OR); + for( int i=0; i<(int)nt.getNumChildren(); i++ ){ + tt << nt[i].notNode(); + } + tt << pred; + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + }else if( nt.getKind()==IFF ){ + //case for IFF + for( int i=0; i<4; i++ ){ + NodeBuilder<> tt(OR); + tt << ( ( i==0 || i==3 ) ? nt[0].notNode() : nt[0] ); + tt << ( ( i==1 || i==3 ) ? nt[1].notNode() : nt[1] ); + tt << ( ( i==0 || i==1 ) ? pred.notNode() : pred ); + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + } + }else if( nt.getKind()==ITE ){ + //case for ITE + for( int j=1; j<=2; j++ ){ + for( int i=0; i<2; i++ ){ + NodeBuilder<> tt(OR); + tt << ( ( j==1 ) ? nt[0].notNode() : nt[0] ); + tt << ( ( i==1 ) ? nt[j].notNode() : nt[j] ); + tt << ( ( i==0 ) ? pred.notNode() : pred ); + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + } + } + for( int i=0; i<2; i++ ){ + NodeBuilder<> tt(OR); + tt << ( i==0 ? nt[1].notNode() : nt[1] ); + tt << ( i==0 ? nt[2].notNode() : nt[2] ); + tt << ( i==1 ? pred.notNode() : pred ); + defs << NodeManager::currentNM()->mkNode( FORALL, bvl, tt.constructNode() ); + } + }else{ + Notice() << "Unhandled Quantifiers CNF: " << nt << std::endl; + } + return pred; + } + } +} + +Node QuantifiersRewriter::computePrenex( Node body, std::vector< Node >& args, bool pol, bool polReq ){ + if( body.getKind()==FORALL ){ + if( pol==polReq ){ + std::vector< Node > terms; + std::vector< Node > subs; + if( polReq ){ + //for doing prenexing of same-signed quantifiers + //must rename each variable that already exists + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + //if( std::find( args.begin(), args.end(), body[0][i] )!=args.end() ){ + terms.push_back( body[0][i] ); + subs.push_back( NodeManager::currentNM()->mkVar( body[0][i].getType() ) ); + } + args.insert( args.end(), subs.begin(), subs.end() ); + }else{ + std::vector< TypeNode > argTypes; + for( int i=0; i<(int)args.size(); i++ ){ + argTypes.push_back( args[i].getType() ); + } + //for doing pre-skolemization of opposite-signed quantifiers + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + terms.push_back( body[0][i] ); + //make the new function symbol + TypeNode typ = NodeManager::currentNM()->mkFunctionType( argTypes, body[0][i].getType() ); + Node op = NodeManager::currentNM()->mkVar( typ ); + std::vector< Node > funcArgs; + funcArgs.push_back( op ); + funcArgs.insert( funcArgs.end(), args.begin(), args.end() ); + subs.push_back( NodeManager::currentNM()->mkNode( APPLY_UF, funcArgs ) ); + } + } + Node newBody = body[1]; + newBody = newBody.substitute( terms.begin(), terms.end(), subs.begin(), subs.end() ); + return newBody; + }else{ + return body; + } + }else if( body.getKind()==ITE || body.getKind()==XOR || body.getKind()==IFF ){ + return body; + }else{ + Assert( body.getKind()!=EXISTS ); + bool childrenChanged = false; + std::vector< Node > newChildren; + for( int i=0; i<(int)body.getNumChildren(); i++ ){ + bool newPol = ( body.getKind()==NOT || ( body.getKind()==IMPLIES && i==0 ) ) ? !pol : pol; + Node n = computePrenex( body[i], args, newPol, polReq ); + newChildren.push_back( n ); + if( n!=body[i] ){ + childrenChanged = true; + } + } + if( childrenChanged ){ + if( body.getKind()==NOT && newChildren[0].getKind()==NOT ){ + return newChildren[0][0]; + }else{ + return NodeManager::currentNM()->mkNode( body.getKind(), newChildren ); + } + }else{ + return body; + } + } +} + +//general method for computing various rewrites +Node QuantifiersRewriter::computeOperation( Node f, int computeOption ){ + std::vector< Node > args; + for( int i=0; i<(int)f[0].getNumChildren(); i++ ){ + args.push_back( f[0][i] ); + } + NodeBuilder<> defs(kind::AND); + Node n = f[1]; + Node ipl; + if( f.getNumChildren()==3 ){ + ipl = f[2]; + } + if( computeOption==COMPUTE_NNF ){ + n = computeNNF( n ); + }else if( computeOption==COMPUTE_PRENEX || computeOption==COMPUTE_PRE_SKOLEM ){ + n = computePrenex( n, args, true, computeOption==COMPUTE_PRENEX ); + }else if( computeOption==COMPUTE_VAR_ELIMINATION ){ + Node prev; + do{ + prev = n; + n = computeVarElimination( n, args, ipl ); + }while( prev!=n && !args.empty() ); + }else if( computeOption==COMPUTE_CNF ){ + //n = computeNNF( n ); + n = computeCNF( n, args, defs, false ); + ipl = Node::null(); + } + if( f[1]==n && args.size()==long(f[0].getNumChildren()) ){ + return f; + }else{ + if( args.empty() ){ + defs << n; + }else{ + std::vector< Node > children; + children.push_back( NodeManager::currentNM()->mkNode(kind::BOUND_VAR_LIST, args ) ); + children.push_back( n ); + if( !ipl.isNull() ){ + children.push_back( ipl ); + } + defs << NodeManager::currentNM()->mkNode(kind::FORALL, children ); + } + return defs.getNumChildren()==1 ? defs.getChild( 0 ) : defs.constructNode(); + } +} + +Node QuantifiersRewriter::mkForAll( std::vector< Node >& args, Node body, Node ipl ){ + std::vector< Node > activeArgs; + computeArgs( args, activeArgs, body ); + if( activeArgs.empty() ){ + return body; + }else{ + std::vector< Node > children; + children.push_back( NodeManager::currentNM()->mkNode(kind::BOUND_VAR_LIST, activeArgs ) ); + children.push_back( body ); + if( !ipl.isNull() ){ + children.push_back( ipl ); + } + return NodeManager::currentNM()->mkNode( kind::FORALL, children ); + } +} + +Node QuantifiersRewriter::computeMiniscoping( std::vector< Node >& args, Node body, Node ipl, bool isNested ){ + //Notice() << "rewrite quant " << body << std::endl; + if( body.getKind()==FORALL ){ + //combine arguments + std::vector< Node > newArgs; + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + newArgs.push_back( body[0][i] ); + } + newArgs.insert( newArgs.end(), args.begin(), args.end() ); + return mkForAll( newArgs, body[ 1 ], ipl ); + }else if( !isNested ){ + if( body.getKind()==NOT ){ + //push not downwards + if( body[0].getKind()==NOT ){ + return computeMiniscoping( args, body[0][0], ipl ); + }else if( body[0].getKind()==AND ){ + if( doMiniscopingNoFreeVar() ){ + NodeBuilder<> t(kind::OR); + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + t << ( body[0][i].getKind()==NOT ? body[0][i][0] : body[0][i].notNode() ); + } + return computeMiniscoping( args, t.constructNode(), ipl ); + } + }else if( body[0].getKind()==OR || body[0].getKind()==IMPLIES ){ + if( doMiniscopingAnd() ){ + NodeBuilder<> t(kind::AND); + for( int i=0; i<(int)body[0].getNumChildren(); i++ ){ + Node trm = ( body[0].getKind()==IMPLIES && i==0 ) ? body[0][i] : ( body[0][i].getKind()==NOT ? body[0][i][0] : body[0][i].notNode() ); + t << computeMiniscoping( args, trm, ipl ); + } + return t.constructNode(); + } + } + }else if( body.getKind()==AND ){ + if( doMiniscopingAnd() ){ + //break apart + NodeBuilder<> t(kind::AND); + for( int i=0; i<(int)body.getNumChildren(); i++ ){ + t << computeMiniscoping( args, body[i], ipl ); + } + Node retVal = t; + return retVal; + } + }else if( body.getKind()==OR || body.getKind()==IMPLIES ){ + if( doMiniscopingNoFreeVar() ){ + Node newBody = body; + NodeBuilder<> body_split(kind::OR); + NodeBuilder<> tb(kind::OR); + for( int i=0; i<(int)body.getNumChildren(); i++ ){ + Node trm = ( body.getKind()==IMPLIES && i==0 ) ? ( body[i].getKind()==NOT ? body[i][0] : body[i].notNode() ) : body[i]; + if( hasArg( args, body[i] ) ){ + tb << trm; + }else{ + body_split << trm; + } + } + if( tb.getNumChildren()==0 ){ + return body_split; + }else if( body_split.getNumChildren()>0 ){ + newBody = tb.getNumChildren()==1 ? tb.getChild( 0 ) : tb; + body_split << mkForAll( args, newBody, ipl ); + return body_split.getNumChildren()==1 ? body_split.getChild( 0 ) : body_split; + } + } + } + } + return mkForAll( args, body, ipl ); +} + +Node QuantifiersRewriter::rewriteQuants( Node n, bool isNested, bool duringRewrite ){ + if( n.getKind()==FORALL ){ + return rewriteQuant( n, isNested, duringRewrite ); + }else if( isLiteral( n ) ){ + return n; + }else{ + NodeBuilder<> tt(n.getKind()); + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + tt << rewriteQuants( n[i], isNested, duringRewrite ); + } + return tt.constructNode(); + } +} + +Node QuantifiersRewriter::rewriteQuant( Node n, bool isNested, bool duringRewrite ){ + Node prev = n; + for( int op=0; opminiscopeQuantFreeVar; +} + +bool QuantifiersRewriter::doMiniscopingAnd(){ + if( Options::current()->miniscopeQuant ){ + return true; + }else{ + if( Options::current()->cbqi ){ + return true; + }else{ + return false; + } + } +} + +bool QuantifiersRewriter::doOperation( Node f, bool isNested, int computeOption, bool duringRewrite ){ + if( computeOption==COMPUTE_NNF ){ + return false;//TODO: compute NNF (current bad idea since arithmetic rewrites equalities) + }else if( computeOption==COMPUTE_PRE_SKOLEM ){ + return Options::current()->preSkolemQuant && !duringRewrite; + }else if( computeOption==COMPUTE_PRENEX ){ + return Options::current()->prenexQuant; + }else if( computeOption==COMPUTE_VAR_ELIMINATION ){ + return Options::current()->varElimQuant; + }else if( computeOption==COMPUTE_CNF ){ + return Options::current()->cnfQuant && !duringRewrite;// || Options::current()->finiteModelFind; + }else{ + return false; + } +} diff --git a/src/theory/quantifiers/quantifiers_rewriter.h b/src/theory/quantifiers/quantifiers_rewriter.h new file mode 100644 index 000000000..8c037d30b --- /dev/null +++ b/src/theory/quantifiers/quantifiers_rewriter.h @@ -0,0 +1,88 @@ +/********************* */ +/*! \file quantifiers_rewriter.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: mdeters + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Rewriter for the theory of inductive quantifiers + ** + ** Rewriter for the theory of inductive quantifiers. + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__QUANTIFIERS__QUANTIFIERS_REWRITER_H +#define __CVC4__THEORY__QUANTIFIERS__QUANTIFIERS_REWRITER_H + +#include "theory/rewriter.h" +#include "theory/quantifiers_engine.h" + +namespace CVC4 { +namespace theory { +namespace quantifiers { + +// attribute for "contains instantiation constants from" +struct NestedQuantAttributeId {}; +typedef expr::Attribute NestedQuantAttribute; + +class QuantifiersRewriter { +public: + static bool isClause( Node n ); + static bool isLiteral( Node n ); + static bool isCube( Node n ); +private: + static void addNodeToOrBuilder( Node n, NodeBuilder<>& t ); + static Node mkForAll( std::vector< Node >& args, Node body, Node ipl ); + static void computeArgs( std::vector< Node >& args, std::vector< Node >& activeArgs, Node n ); + static bool hasArg( std::vector< Node >& args, Node n ); + static void setNestedQuantifiers( Node n, Node q ); + static void computeArgs( std::map< Node, bool >& active, Node n ); + static Node computeClause( Node n ); +private: + static Node computeMiniscoping( std::vector< Node >& args, Node body, Node ipl, bool isNested = false ); + static Node computeNNF( Node body ); + static Node computeVarElimination( Node body, std::vector< Node >& args, Node& ipl ); + static Node computeCNF( Node body, std::vector< Node >& args, NodeBuilder<>& defs, bool forcePred ); + static Node computePrenex( Node body, std::vector< Node >& args, bool pol, bool polReq ); +private: + enum{ + COMPUTE_NNF = 0, + COMPUTE_PRE_SKOLEM, + COMPUTE_PRENEX, + COMPUTE_VAR_ELIMINATION, + //COMPUTE_FLATTEN_ARGS_UF, + COMPUTE_CNF, + COMPUTE_LAST + }; + static Node computeOperation( Node f, int computeOption ); +public: + static RewriteResponse preRewrite(TNode in); + static RewriteResponse postRewrite(TNode in); + static Node rewriteEquality(TNode equality) { + return postRewrite(equality).node; + } + static inline void init() {} + static inline void shutdown() {} +private: + /** options */ + static bool doMiniscopingNoFreeVar(); + static bool doMiniscopingAnd(); + static bool doOperation( Node f, bool isNested, int computeOption, bool duringRewrite = true ); +public: + static Node rewriteQuants( Node n, bool isNested = false, bool duringRewrite = true ); + static Node rewriteQuant( Node n, bool isNested = false, bool duringRewrite = true ); +};/* class QuantifiersRewriter */ + +}/* CVC4::theory::quantifiers namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__QUANTIFIERS__QUANTIFIERS_REWRITER_H */ + diff --git a/src/theory/quantifiers/theory_quantifiers.cpp b/src/theory/quantifiers/theory_quantifiers.cpp new file mode 100644 index 000000000..ead47e4b0 --- /dev/null +++ b/src/theory/quantifiers/theory_quantifiers.cpp @@ -0,0 +1,199 @@ +/********************* */ +/*! \file theory_quantifiers.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of the theory of quantifiers + ** + ** Implementation of the theory of quantifiers. + **/ + + +#include "theory/quantifiers/theory_quantifiers.h" +#include "theory/valuation.h" +#include "theory/quantifiers_engine.h" +#include "theory/quantifiers/instantiation_engine.h" +#include "theory/quantifiers/model_engine.h" +#include "expr/kind.h" +#include "util/Assert.h" +#include +#include +#include "theory/quantifiers/theory_quantifiers_instantiator.h" + +#define USE_FLIP_DECISION + +//static bool clockSet = false; +//double initClock; + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::quantifiers; + +TheoryQuantifiers::TheoryQuantifiers(Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_QUANTIFIERS, c, u, out, valuation, logicInfo, qe), + d_numRestarts(0){ + d_numInstantiations = 0; + d_baseDecLevel = -1; + if( Options::current()->finiteModelFind ){ + qe->addModule( new ModelEngine( this ) ); + }else{ + qe->addModule( new InstantiationEngine( this ) ); + } +} + + +TheoryQuantifiers::~TheoryQuantifiers() { +} + +void TheoryQuantifiers::addSharedTerm(TNode t) { + Debug("quantifiers-other") << "TheoryQuantifiers::addSharedTerm(): " + << t << endl; +} + + +void TheoryQuantifiers::notifyEq(TNode lhs, TNode rhs) { + Debug("quantifiers-other") << "TheoryQuantifiers::notifyEq(): " + << lhs << " = " << rhs << endl; + +} + +void TheoryQuantifiers::preRegisterTerm(TNode n) { + Debug("quantifiers-prereg") << "TheoryQuantifiers::preRegisterTerm() " << n << endl; + if( n.getKind()==FORALL && !n.hasAttribute(InstConstantAttribute()) ){ + getQuantifiersEngine()->registerQuantifier( n ); + } +} + + +void TheoryQuantifiers::presolve() { + Debug("quantifiers-presolve") << "TheoryQuantifiers::presolve()" << endl; +} + +Node TheoryQuantifiers::getValue(TNode n) { + //NodeManager* nodeManager = NodeManager::currentNM(); + switch(n.getKind()) { + case FORALL: + case EXISTS: + bool value; + if( d_valuation.hasSatValue( n, value ) ){ + return NodeManager::currentNM()->mkConst(value); + }else{ + return NodeManager::currentNM()->mkConst(false); //FIX_THIS? + } + break; + default: + Unhandled(n.getKind()); + } +} + +void TheoryQuantifiers::check(Effort e) { + CodeTimer codeTimer(d_theoryTime); + + Debug("quantifiers-check") << "quantifiers::check(" << e << ")" << std::endl; + while(!done()) { + Node assertion = get(); + Debug("quantifiers-assert") << "quantifiers::assert(): " << assertion << std::endl; + switch(assertion.getKind()) { + case kind::FORALL: + assertUniversal( assertion ); + break; + case kind::NOT: + { + switch( assertion[0].getKind()) { + case kind::FORALL: + assertExistential( assertion ); + break; + default: + Unhandled(assertion[0].getKind()); + break; + } + } + break; + default: + Unhandled(assertion.getKind()); + break; + } + } + // call the quantifiers engine to check + getQuantifiersEngine()->check( e ); +} + +void TheoryQuantifiers::propagate(Effort level){ + CodeTimer codeTimer(d_theoryTime); + + getQuantifiersEngine()->propagate( level ); +} + +void TheoryQuantifiers::assertUniversal( Node n ){ + Assert( n.getKind()==FORALL ); + if( !n.hasAttribute(InstConstantAttribute()) ){ + getQuantifiersEngine()->registerQuantifier( n ); + getQuantifiersEngine()->assertNode( n ); + } +} + +void TheoryQuantifiers::assertExistential( Node n ){ + Assert( n.getKind()== NOT && n[0].getKind()==FORALL ); + if( !n[0].hasAttribute(InstConstantAttribute()) ){ + if( d_skolemized.find( n )==d_skolemized.end() ){ + Node body = getQuantifiersEngine()->getSkolemizedBody( n[0] ); + NodeBuilder<> nb(kind::OR); + nb << n[0] << body.notNode(); + Node lem = nb; + Debug("quantifiers-sk") << "Skolemize lemma : " << lem << std::endl; + d_out->lemma( lem ); + d_skolemized[n] = true; + } + } +} + +bool TheoryQuantifiers::flipDecision(){ +#ifndef USE_FLIP_DECISION + return false; +#else + //Debug("quantifiers-flip") << "No instantiation given, flip decision, level = " << d_valuation.getDecisionLevel() << std::endl; + //for( int i=1; i<=(int)d_valuation.getDecisionLevel(); i++ ){ + // Debug("quantifiers-flip") << " " << d_valuation.getDecision( i ) << std::endl; + //} + //if( d_valuation.getDecisionLevel()>0 ){ + // double r = double(rand())/double(RAND_MAX); + // unsigned decisionLevel = (unsigned)(r*d_valuation.getDecisionLevel()); + // d_out->flipDecision( decisionLevel ); + // return true; + //}else{ + // return false; + //} + + if( !d_out->flipDecision() ){ + return restart(); + } + return true; +#endif +} + +bool TheoryQuantifiers::restart(){ + static const int restartLimit = 0; + if( d_numRestarts==restartLimit ){ + Debug("quantifiers-flip") << "No more restarts." << std::endl; + return false; + }else{ + d_numRestarts++; + Debug("quantifiers-flip") << "Do restart." << std::endl; + return true; + } +} + +void TheoryQuantifiers::performCheck(Effort e){ + getQuantifiersEngine()->check( e ); +} diff --git a/src/theory/quantifiers/theory_quantifiers.h b/src/theory/quantifiers/theory_quantifiers.h new file mode 100644 index 000000000..05c3b9695 --- /dev/null +++ b/src/theory/quantifiers/theory_quantifiers.h @@ -0,0 +1,77 @@ +/********************* */ +/*! \file theory_quantifiers.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Theory of quantifiers. + ** + ** Theory of quantifiers. + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_H +#define __CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_H + +#include "theory/theory.h" +#include "util/hash.h" +#include "util/stats.h" + +#include +#include +#include + +namespace CVC4 { +namespace theory { +namespace quantifiers { + +class TheoryEngine; + +class TheoryQuantifiers : public Theory { +private: + typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap; + /** quantifiers that have been skolemized */ + std::map< Node, bool > d_skolemized; + /** number of instantiations */ + int d_numInstantiations; + int d_baseDecLevel; + /** number of restarts */ + int d_numRestarts; + + KEEP_STATISTIC(TimerStat, d_theoryTime, "theory::quantifiers::theoryTime"); + +public: + TheoryQuantifiers(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe); + ~TheoryQuantifiers(); + + void addSharedTerm(TNode t); + void notifyEq(TNode lhs, TNode rhs); + void preRegisterTerm(TNode n); + void presolve(); + void check(Effort e); + void propagate(Effort level); + Node getValue(TNode n); + void shutdown() { } + std::string identify() const { return std::string("TheoryQuantifiers"); } + bool flipDecision(); +private: + void assertUniversal( Node n ); + void assertExistential( Node n ); + bool restart(); +public: + void performCheck(Effort e); +};/* class TheoryQuantifiers */ + +}/* CVC4::theory::quantifiers namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_H */ diff --git a/src/theory/quantifiers/theory_quantifiers_instantiator.cpp b/src/theory/quantifiers/theory_quantifiers_instantiator.cpp new file mode 100644 index 000000000..a5b6cc3bc --- /dev/null +++ b/src/theory/quantifiers/theory_quantifiers_instantiator.cpp @@ -0,0 +1,76 @@ +/********************* */ +/*! \file theory_quantifiers_instantiator.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory_quantifiers_instantiator class + **/ + +#include "theory/quantifiers/theory_quantifiers_instantiator.h" +#include "theory/quantifiers/theory_quantifiers.h" +#include "theory/theory_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::quantifiers; + +InstantiatorTheoryQuantifiers::InstantiatorTheoryQuantifiers(context::Context* c, QuantifiersEngine* ie, Theory* th) : +Instantiator( c, ie, th ){ + +} + +void InstantiatorTheoryQuantifiers::assertNode( Node assertion ){ + Debug("quant-quant-assert") << "InstantiatorTheoryQuantifiers::check: " << assertion << std::endl; + if( Options::current()->cbqi ){ + if( assertion.hasAttribute(InstConstantAttribute()) ){ + Debug("quant-quant-assert") << " -> has constraints from " << assertion.getAttribute(InstConstantAttribute()) << std::endl; + setHasConstraintsFrom( assertion.getAttribute(InstConstantAttribute()) ); + }else if( assertion.getKind()==NOT && assertion[0].hasAttribute(InstConstantAttribute()) ){ + Debug("quant-quant-assert") << " -> has constraints from " << assertion[0].getAttribute(InstConstantAttribute()) << std::endl; + setHasConstraintsFrom( assertion[0].getAttribute(InstConstantAttribute()) ); + } + } +} + +void InstantiatorTheoryQuantifiers::processResetInstantiationRound( Theory::Effort effort ){ + +} + + +int InstantiatorTheoryQuantifiers::process( Node f, Theory::Effort effort, int e, int limitInst ){ + Debug("quant-quant") << "Quant: Try to solve (" << e << ") for " << f << "... " << std::endl; + if( e<5 ){ + return InstStrategy::STATUS_UNFINISHED; + }else if( e==5 ){ + //add random addition + if( isOwnerOf( f ) ){ + InstMatch m; + if( d_quantEngine->addInstantiation( f, m ) ){ + ++(d_statistics.d_instantiations); + } + } + } + return InstStrategy::STATUS_UNKNOWN; +} + +InstantiatorTheoryQuantifiers::Statistics::Statistics(): + d_instantiations("InstantiatorTheoryQuantifiers::Instantiations_Total", 0) +{ + StatisticsRegistry::registerStat(&d_instantiations); +} + +InstantiatorTheoryQuantifiers::Statistics::~Statistics(){ + StatisticsRegistry::unregisterStat(&d_instantiations); +} + diff --git a/src/theory/quantifiers/theory_quantifiers_instantiator.h b/src/theory/quantifiers/theory_quantifiers_instantiator.h new file mode 100644 index 000000000..dda3bfeaa --- /dev/null +++ b/src/theory/quantifiers/theory_quantifiers_instantiator.h @@ -0,0 +1,60 @@ +/********************* */ +/*! \file instantiator_quantifiers_instantiator.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief instantiator_quantifiers_instantiator + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__INSTANTIATOR_QUANTIFIERS_H +#define __CVC4__INSTANTIATOR_QUANTIFIERS_H + +#include "theory/quantifiers_engine.h" + +#include "util/stats.h" + +namespace CVC4 { +namespace theory { +namespace quantifiers { + +class InstantiatorTheoryQuantifiers : public Instantiator{ + friend class QuantifiersEngine; +public: + InstantiatorTheoryQuantifiers(context::Context* c, QuantifiersEngine* ie, Theory* th); + ~InstantiatorTheoryQuantifiers() {} + + /** check function, assertion is asserted to theory */ + void assertNode( Node assertion ); + /** identify */ + std::string identify() const { return std::string("InstantiatorTheoryQuantifiers"); } +private: + /** reset instantiation */ + void processResetInstantiationRound( Theory::Effort effort ); + /** process at effort */ + int process( Node f, Theory::Effort effort, int e, int limitInst ); + + class Statistics { + public: + IntStat d_instantiations; + Statistics(); + ~Statistics(); + }; + Statistics d_statistics; +};/* class InstantiatiorTheoryArith */ + +} +} +} + +#endif \ No newline at end of file diff --git a/src/theory/quantifiers/theory_quantifiers_type_rules.h b/src/theory/quantifiers/theory_quantifiers_type_rules.h new file mode 100644 index 000000000..ceec36d7b --- /dev/null +++ b/src/theory/quantifiers/theory_quantifiers_type_rules.h @@ -0,0 +1,113 @@ +/********************* */ +/*! \file theory_quantifiers_type_rules.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Theory of quantifiers + ** + ** Theory of quantifiers. + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_TYPE_RULES_H +#define __CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_TYPE_RULES_H + +#include "util/matcher.h" + +namespace CVC4 { +namespace theory { +namespace quantifiers { + +struct QuantifierForallTypeRule { + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Debug("typecheck-q") << "type check for fa " << n << std::endl; + Assert(n.getKind() == kind::FORALL && n.getNumChildren()>0 ); + if( check ){ + if( n[ 0 ].getType(check)!=nodeManager->boundVarListType() ){ + throw TypeCheckingExceptionPrivate(n, "first argument of universal quantifier is not bound var list"); + } + if( n[ 1 ].getType(check)!=nodeManager->booleanType() ){ + throw TypeCheckingExceptionPrivate(n, "body of universal quantifier is not boolean"); + } + if( n.getNumChildren()==3 && n[2].getType(check)!=nodeManager->instPatternListType() ){ + throw TypeCheckingExceptionPrivate(n, "third argument of universal quantifier is not instantiation pattern list"); + } + } + return nodeManager->booleanType(); + } +};/* struct QuantifierForallTypeRule */ + +struct QuantifierExistsTypeRule { + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Debug("typecheck-q") << "type check for ex " << n << std::endl; + Assert(n.getKind() == kind::EXISTS && n.getNumChildren()>0 ); + if( check ){ + if( n[ 0 ].getType(check)!=nodeManager->boundVarListType() ){ + throw TypeCheckingExceptionPrivate(n, "first argument of existential quantifier is not bound var list"); + } + if( n[ 1 ].getType(check)!=nodeManager->booleanType() ){ + throw TypeCheckingExceptionPrivate(n, "body of existential quantifier is not boolean"); + } + if( n.getNumChildren()==3 && n[2].getType(check)!=nodeManager->instPatternListType() ){ + throw TypeCheckingExceptionPrivate(n, "third argument of existential quantifier is not instantiation pattern list"); + } + } + return nodeManager->booleanType(); + } +};/* struct QuantifierExistsTypeRule */ + +struct QuantifierBoundVarListTypeRule { + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Assert(n.getKind() == kind::BOUND_VAR_LIST ); + if( check ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( n[i].getKind()!=kind::VARIABLE ){ + throw TypeCheckingExceptionPrivate(n, "argument of bound var list is not variable"); + } + } + } + return nodeManager->boundVarListType(); + } +};/* struct QuantifierBoundVarListTypeRule */ + +struct QuantifierInstPatternTypeRule { + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Assert(n.getKind() == kind::INST_PATTERN ); + return nodeManager->instPatternType(); + } +};/* struct QuantifierInstPatternTypeRule */ + + +struct QuantifierInstPatternListTypeRule { + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Assert(n.getKind() == kind::INST_PATTERN_LIST ); + if( check ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( n[i].getKind()!=kind::INST_PATTERN ){ + throw TypeCheckingExceptionPrivate(n, "argument of inst pattern list is not inst pattern"); + } + } + } + return nodeManager->instPatternListType(); + } +};/* struct QuantifierInstPatternListTypeRule */ + +}/* CVC4::theory::quantifiers namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__QUANTIFIERS__THEORY_QUANTIFIERS_TYPE_RULES_H */ diff --git a/src/theory/quantifiers_engine.cpp b/src/theory/quantifiers_engine.cpp new file mode 100644 index 000000000..ddb085632 --- /dev/null +++ b/src/theory/quantifiers_engine.cpp @@ -0,0 +1,788 @@ +/********************* */ +/*! \file quantifiers_engine.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of quantifiers engine class + **/ + +#include "theory/quantifiers_engine.h" +#include "theory/theory_engine.h" +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/uf/theory_uf_strong_solver.h" +#include "theory/uf/equality_engine.h" +#include "theory/quantifiers/quantifiers_rewriter.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; + +//#define COMPUTE_RELEVANCE +//#define REWRITE_ASSERTED_QUANTIFIERS + + /** reset instantiation */ +void InstStrategy::resetInstantiationRound( Theory::Effort effort ){ + d_no_instantiate_temp.clear(); + d_no_instantiate_temp.insert( d_no_instantiate_temp.begin(), d_no_instantiate.begin(), d_no_instantiate.end() ); + processResetInstantiationRound( effort ); +} +/** do instantiation round method */ +int InstStrategy::doInstantiation( Node f, Theory::Effort effort, int e, int limitInst ){ + if( shouldInstantiate( f ) ){ + int origLemmas = d_quantEngine->getNumLemmasWaiting(); + int retVal = process( f, effort, e, limitInst ); + if( d_quantEngine->getNumLemmasWaiting()!=origLemmas ){ + for( int i=0; i<(int)d_priority_over.size(); i++ ){ + d_priority_over[i]->d_no_instantiate_temp.push_back( f ); + } + } + return retVal; + }else{ + return STATUS_UNKNOWN; + } +} + +bool TermArgTrie::addTerm2( QuantifiersEngine* qe, Node n, int argIndex ){ + if( argIndex<(int)n.getNumChildren() ){ + Node r = qe->getEqualityQuery()->getRepresentative( n[ argIndex ] ); + std::map< Node, TermArgTrie >::iterator it = d_data.find( r ); + if( it==d_data.end() ){ + d_data[r].addTerm2( qe, n, argIndex+1 ); + return true; + }else{ + return it->second.addTerm2( qe, n, argIndex+1 ); + } + }else{ + //store n in d_data (this should be interpretted as the "data" and not as a reference to a child) + d_data[n].d_data.clear(); + return false; + } +} + +void TermDb::addTerm( Node n, std::vector< Node >& added, bool withinQuant ){ + //don't add terms in quantifier bodies + if( !withinQuant || Options::current()->registerQuantBodyTerms ){ + if( d_processed.find( n )==d_processed.end() ){ + d_processed[n] = true; + //if this is an atomic trigger, consider adding it + if( Trigger::isAtomicTrigger( n ) ){ + if( !n.hasAttribute(InstConstantAttribute()) ){ + Debug("term-db") << "register trigger term " << n << std::endl; + //Notice() << "register trigger term " << n << std::endl; + Node op = n.getOperator(); + d_op_map[op].push_back( n ); + d_type_map[ n.getType() ].push_back( n ); + added.push_back( n ); + + uf::InstantiatorTheoryUf* d_ith = (uf::InstantiatorTheoryUf*)d_quantEngine->getInstantiator( THEORY_UF ); + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + addTerm( n[i], added, withinQuant ); + if( Options::current()->efficientEMatching ){ + if( d_parents[n[i]][op].empty() ){ + //must add parent to equivalence class info + Node nir = d_ith->getRepresentative( n[i] ); + uf::EqClassInfo* eci_nir = d_ith->getEquivalenceClassInfo( nir ); + if( eci_nir ){ + eci_nir->d_pfuns[ op ] = true; + } + } + //add to parent structure + if( std::find( d_parents[n[i]][op][i].begin(), d_parents[n[i]][op][i].end(), n )==d_parents[n[i]][op][i].end() ){ + d_parents[n[i]][op][i].push_back( n ); + } + } + } + if( Options::current()->efficientEMatching ){ + //new term, add n to candidate generators + for( int i=0; i<(int)d_ith->d_cand_gens[op].size(); i++ ){ + d_ith->d_cand_gens[op][i]->addCandidate( n ); + } + } + if( Options::current()->eagerInstQuant ){ + if( !n.hasAttribute(InstLevelAttribute()) && n.getAttribute(InstLevelAttribute())==0 ){ + int addedLemmas = 0; + for( int i=0; i<(int)d_ith->d_op_triggers[op].size(); i++ ){ + addedLemmas += d_ith->d_op_triggers[op][i]->addTerm( n ); + } + //std::cout << "Terms, added lemmas: " << addedLemmas << std::endl; + d_quantEngine->flushLemmas( &d_quantEngine->getTheoryEngine()->getTheory( THEORY_QUANTIFIERS )->getOutputChannel() ); + } + } + } + } + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + addTerm( n[i], added, withinQuant ); + } + } + } +} + +void TermDb::reset( Theory::Effort effort ){ + int nonCongruentCount = 0; + int congruentCount = 0; + int alreadyCongruentCount = 0; + //rebuild d_func/pred_map_trie for each operation, this will calculate all congruent terms + for( std::map< Node, std::vector< Node > >::iterator it = d_op_map.begin(); it != d_op_map.end(); ++it ){ + if( !it->second.empty() ){ + if( it->second[0].getType()==NodeManager::currentNM()->booleanType() ){ + d_pred_map_trie[ 0 ][ it->first ].d_data.clear(); + d_pred_map_trie[ 1 ][ it->first ].d_data.clear(); + }else{ + d_func_map_trie[ it->first ].d_data.clear(); + for( int i=0; i<(int)it->second.size(); i++ ){ + Node n = it->second[i]; + if( !n.getAttribute(NoMatchAttribute()) ){ + if( !d_func_map_trie[ it->first ].addTerm( d_quantEngine, n ) ){ + NoMatchAttribute nma; + n.setAttribute(nma,true); + congruentCount++; + }else{ + nonCongruentCount++; + } + }else{ + congruentCount++; + alreadyCongruentCount++; + } + } + } + } + } + for( int i=0; i<2; i++ ){ + Node n = NodeManager::currentNM()->mkConst( i==1 ); + eq::EqClassIterator eqc( d_quantEngine->getEqualityQuery()->getRepresentative( n ), + ((uf::TheoryUF*)d_quantEngine->getTheoryEngine()->getTheory( THEORY_UF ))->getEqualityEngine() ); + while( !eqc.isFinished() ){ + Node en = (*eqc); + if( en.getKind()==APPLY_UF && !en.hasAttribute(InstConstantAttribute()) ){ + if( !en.getAttribute(NoMatchAttribute()) ){ + Node op = en.getOperator(); + if( !d_pred_map_trie[i][op].addTerm( d_quantEngine, en ) ){ + NoMatchAttribute nma; + en.setAttribute(nma,true); + congruentCount++; + }else{ + nonCongruentCount++; + } + }else{ + alreadyCongruentCount++; + } + } + ++eqc; + } + } + Debug("term-db-cong") << "TermDb: Reset" << std::endl; + Debug("term-db-cong") << "Congruent/Non-Congruent = "; + Debug("term-db-cong") << congruentCount << "(" << alreadyCongruentCount << ") / " << nonCongruentCount << std::endl; +} + + + +QuantifiersEngine::QuantifiersEngine(context::Context* c, TheoryEngine* te): +d_te( te ), +d_forall_asserts( c ), +d_active( c ){ + d_eq_query = NULL; + d_term_db = new TermDb( this ); +} + +Instantiator* QuantifiersEngine::getInstantiator( int id ){ + return d_te->getTheory( id )->getInstantiator(); +} + +void QuantifiersEngine::check( Theory::Effort e ){ + CodeTimer codeTimer(d_time); + + if( e==Theory::EFFORT_LAST_CALL ){ + ++(d_statistics.d_instantiation_rounds_lc); + }else if( e==Theory::EFFORT_FULL ){ + ++(d_statistics.d_instantiation_rounds); + } + for( int i=0; i<(int)d_modules.size(); i++ ){ + d_modules[i]->check( e ); + } + //if( e==Theory::EFFORT_FULL ){ + // Notice() << "Done instantiation Round" << std::endl; + //} +} + +std::vector QuantifiersEngine::createInstVariable( std::vector & vars ){ + std::vector inst_constant; + inst_constant.reserve(vars.size()); + for( std::vector::const_iterator v = vars.begin(); + v != vars.end(); ++v ){ + //make instantiation constants + Node ic = NodeManager::currentNM()->mkInstConstant( (*v).getType() ); + inst_constant.push_back( ic ); + }; + return inst_constant; +} + +void QuantifiersEngine::makeInstantiationConstantsFor( Node f ){ + if( d_inst_constants.find( f )==d_inst_constants.end() ){ + Debug("quantifiers-engine") << "Instantiation constants for " << f << " : " << std::endl; + for( int i=0; i<(int)f[0].getNumChildren(); i++ ){ + d_vars[f].push_back( f[0][i] ); + //make instantiation constants + Node ic = NodeManager::currentNM()->mkInstConstant( f[0][i].getType() ); + d_inst_constants_map[ic] = f; + d_inst_constants[ f ].push_back( ic ); + Debug("quantifiers-engine") << " " << ic << std::endl; + //set the var number attribute + InstVarNumAttribute ivna; + ic.setAttribute(ivna,i); + } + } +} + +void QuantifiersEngine::registerQuantifier( Node f ){ + if( std::find( d_quants.begin(), d_quants.end(), f )==d_quants.end() ){ + std::vector< Node > quants; +#ifdef REWRITE_ASSERTED_QUANTIFIERS + //do assertion-time rewriting of quantifier + Node nf = quantifiers::QuantifiersRewriter::rewriteQuant( f, false, false ); + if( nf!=f ){ + Debug("quantifiers-rewrite") << "*** assert-rewrite " << f << std::endl; + Debug("quantifiers-rewrite") << " to " << std::endl; + Debug("quantifiers-rewrite") << nf << std::endl; + //we will instead register all the rewritten quantifiers + if( nf.getKind()==FORALL ){ + quants.push_back( nf ); + }else if( nf.getKind()==AND ){ + for( int i=0; i<(int)nf.getNumChildren(); i++ ){ + quants.push_back( nf[i] ); + } + }else{ + //unhandled: rewrite must go to a quantifier, or conjunction of quantifiers + Assert( false ); + } + }else{ + quants.push_back( f ); + } +#else + quants.push_back( f ); +#endif + for( int q=0; q<(int)quants.size(); q++ ){ + d_quant_rewritten[f].push_back( quants[q] ); + d_rewritten_quant[ quants[q] ] = f; + ++(d_statistics.d_num_quant); + Assert( quants[q].getKind()==FORALL ); + //register quantifier + d_quants.push_back( quants[q] ); + //make instantiation constants for quants[q] + makeInstantiationConstantsFor( quants[q] ); + //compute symbols in quants[q] + std::vector< Node > syms; + computeSymbols( quants[q][1], syms ); + d_syms[quants[q]].insert( d_syms[quants[q]].begin(), syms.begin(), syms.end() ); + //set initial relevance + int minRelevance = -1; + for( int i=0; i<(int)syms.size(); i++ ){ + d_syms_quants[ syms[i] ].push_back( quants[q] ); + int r = getRelevance( syms[i] ); + if( r!=-1 && ( minRelevance==-1 || rregisterQuantifier( quants[q] ); + } + Node ceBody = getCounterexampleBody( quants[q] ); + generatePhaseReqs( quants[q], ceBody ); + //also register it with the strong solver + if( Options::current()->finiteModelFind ){ + ((uf::TheoryUF*)d_te->getTheory( THEORY_UF ))->getStrongSolver()->registerQuantifier( quants[q] ); + } + } + } +} + +void QuantifiersEngine::registerPattern( std::vector & pattern) { + for(std::vector::iterator p = pattern.begin(); p != pattern.end(); ++p){ + std::vector< Node > added; + d_term_db->addTerm(*p,added); + } +} + +void QuantifiersEngine::assertNode( Node f ){ + Assert( f.getKind()==FORALL ); + for( int j=0; j<(int)d_quant_rewritten[f].size(); j++ ){ + d_forall_asserts.push_back( d_quant_rewritten[f][j] ); + for( int i=0; i<(int)d_modules.size(); i++ ){ + d_modules[i]->assertNode( d_quant_rewritten[f][j] ); + } + } +} + +void QuantifiersEngine::propagate( Theory::Effort level ){ + CodeTimer codeTimer(d_time); + + for( int i=0; i<(int)d_modules.size(); i++ ){ + d_modules[i]->propagate( level ); + } +} + +void QuantifiersEngine::addTermToDatabase( Node n, bool withinQuant ){ + if( d_term_db ){ + std::vector< Node > added; + d_term_db->addTerm( n, added, withinQuant ); +#ifdef COMPUTE_RELEVANCE + for( int i=0; i<(int)added.size(); i++ ){ + if( !withinQuant ){ + setRelevance( added[i].getOperator(), 0 ); + } + } +#endif + }else{ + Notice() << "Warning: no term database for quantifier engine." << std::endl; + } +} + +bool QuantifiersEngine::addLemma( Node lem ){ + //AJR: the following check is necessary until FULL_CHECK is guarenteed after d_out->lemma(...) + Debug("inst-engine-debug") << "Adding lemma : " << lem << std::endl; + lem = Rewriter::rewrite(lem); + if( d_lemmas_produced.find( lem )==d_lemmas_produced.end() ){ + //d_curr_out->lemma( lem ); + d_lemmas_produced[ lem ] = true; + d_lemmas_waiting.push_back( lem ); + Debug("inst-engine-debug") << "Added lemma : " << lem << std::endl; + return true; + }else{ + Debug("inst-engine-debug") << "Duplicate." << std::endl; + return false; + } +} + +bool QuantifiersEngine::addInstantiation( Node f, std::vector< Node >& terms ) +{ + //Notice() << "***& Instantiate " << f << " with " << std::endl; + //for( int i=0; i<(int)terms.size(); i++ ){ + // Notice() << " " << terms[i] << std::endl; + //} + Assert( f.getKind()==FORALL ); + Assert( !f.hasAttribute(InstConstantAttribute()) ); + Assert( d_vars[f].size()==terms.size() && d_vars[f].size()==f[0].getNumChildren() ); + Node body = f[ 1 ].substitute( d_vars[f].begin(), d_vars[f].end(), + terms.begin(), terms.end() ); + NodeBuilder<> nb(kind::OR); + nb << d_rewritten_quant[f].notNode() << body; + Node lem = nb; + if( addLemma( lem ) ){ + //Notice() << " Added lemma : " << body << std::endl; + //Notice() << "***& Instantiate " << f << " with " << std::endl; + //for( int i=0; i<(int)terms.size(); i++ ){ + // Notice() << " " << terms[i] << std::endl; + //} + + //Notice() << "**INST" << std::endl; + Debug("inst") << "*** Instantiate " << f << " with " << std::endl; + //Notice() << "*** Instantiate " << f << " with " << std::endl; + uint64_t maxInstLevel = 0; + for( int i=0; i<(int)terms.size(); i++ ){ + if( terms[i].hasAttribute(InstConstantAttribute()) ){ + Debug("inst")<< "***& Bad Instantiate " << f << " with " << std::endl; + for( int i=0; i<(int)terms.size(); i++ ){ + Debug("inst") << " " << terms[i] << std::endl; + } + Unreachable("Bad instantiation"); + }else{ + Debug("inst") << " " << terms[i]; + //Notice() << " " << terms[i] << std::endl; + //Debug("inst-engine") << " " << terms[i].getAttribute(InstLevelAttribute()); + Debug("inst") << std::endl; + if( terms[i].hasAttribute(InstLevelAttribute()) ){ + if( terms[i].getAttribute(InstLevelAttribute())>maxInstLevel ){ + maxInstLevel = terms[i].getAttribute(InstLevelAttribute()); + } + }else{ + setInstantiationLevelAttr( terms[i], 0 ); + } + } + } + setInstantiationLevelAttr( body, maxInstLevel+1 ); + ++(d_statistics.d_instantiations); + d_statistics.d_total_inst_var += (int)terms.size(); + d_statistics.d_max_instantiation_level.maxAssign( maxInstLevel+1 ); + return true; + }else{ + ++(d_statistics.d_inst_duplicate); + return false; + } +} + +bool QuantifiersEngine::addInstantiation( Node f, InstMatch& m, bool addSplits ){ + m.makeComplete( f, this ); + m.makeRepresentative( this ); + Debug("quant-duplicate") << "After make rep: " << m << std::endl; + if( !d_inst_match_trie[f].addInstMatch( this, f, m, true ) ){ + Debug("quant-duplicate") << " -> Already exists." << std::endl; + ++(d_statistics.d_inst_duplicate); + return false; + } + Debug("quant-duplicate") << " -> Does not exist." << std::endl; + std::vector< Node > match; + m.computeTermVec( d_inst_constants[f], match ); + + //old.... + //m.makeRepresentative( d_eq_query ); + //std::vector< Node > match; + //m.computeTermVec( this, d_inst_constants[f], match ); + + //Notice() << "*** Instantiate " << m->getQuantifier() << " with " << std::endl; + //for( int i=0; i<(int)m->d_match.size(); i++ ){ + // Notice() << " " << m->d_match[i] << std::endl; + //} + + if( addInstantiation( f, match ) ){ + //d_statistics.d_total_inst_var_unspec.setData( d_statistics.d_total_inst_var_unspec.getData() + (int)d_inst_constants[f].size() - m.d_map.size()/2 ); + //if( d_inst_constants[f].size()!=m.d_map.size() ){ + // //Notice() << "Unspec. " << std::endl; + // //Notice() << "*** Instantiate " << m->getQuantifier() << " with " << std::endl; + // //for( int i=0; i<(int)m->d_match.size(); i++ ){ + // // Notice() << " " << m->d_match[i] << std::endl; + // //} + // ++(d_statistics.d_inst_unspec); + //} + //if( addSplits ){ + // for( std::map< Node, Node >::iterator it = m->d_splits.begin(); it != m->d_splits.end(); ++it ){ + // addSplitEquality( it->first, it->second, true, true ); + // } + //} + return true; + } + return false; +} + +bool QuantifiersEngine::addSplit( Node n, bool reqPhase, bool reqPhasePol ){ + n = Rewriter::rewrite( n ); + Node lem = NodeManager::currentNM()->mkNode( OR, n, n.notNode() ); + if( addLemma( lem ) ){ + ++(d_statistics.d_splits); + Debug("inst") << "*** Add split " << n<< std::endl; + //if( reqPhase ){ + // d_curr_out->requirePhase( n, reqPhasePol ); + //} + return true; + } + return false; +} + +bool QuantifiersEngine::addSplitEquality( Node n1, Node n2, bool reqPhase, bool reqPhasePol ){ + //Assert( !n1.hasAttribute(InstConstantAttribute()) ); + //Assert( !n2.hasAttribute(InstConstantAttribute()) ); + //Assert( !areEqual( n1, n2 ) ); + //Assert( !areDisequal( n1, n2 ) ); + Kind knd = n1.getType()==NodeManager::currentNM()->booleanType() ? IFF : EQUAL; + Node fm = NodeManager::currentNM()->mkNode( knd, n1, n2 ); + return addSplit( fm ); +} + +void QuantifiersEngine::flushLemmas( OutputChannel* out ){ + for( int i=0; i<(int)d_lemmas_waiting.size(); i++ ){ + out->lemma( d_lemmas_waiting[i] ); + } + d_lemmas_waiting.clear(); +} + +Node QuantifiersEngine::getCounterexampleBody( Node f ){ + std::map< Node, Node >::iterator it = d_counterexample_body.find( f ); + if( it==d_counterexample_body.end() ){ + makeInstantiationConstantsFor( f ); + Node n = getSubstitutedNode( f[1], f ); + d_counterexample_body[ f ] = n; + return n; + }else{ + return it->second; + } +} + +Node QuantifiersEngine::getSkolemizedBody( Node f ){ + Assert( f.getKind()==FORALL ); + if( d_skolem_body.find( f )==d_skolem_body.end() ){ + std::vector< Node > vars; + for( int i=0; i<(int)f[0].getNumChildren(); i++ ){ + Node skv = NodeManager::currentNM()->mkSkolem( f[0][i].getType() ); + d_skolem_constants[ f ].push_back( skv ); + vars.push_back( f[0][i] ); + } + d_skolem_body[ f ] = f[ 1 ].substitute( vars.begin(), vars.end(), + d_skolem_constants[ f ].begin(), d_skolem_constants[ f ].end() ); + if( f.hasAttribute(InstLevelAttribute()) ){ + setInstantiationLevelAttr( d_skolem_body[ f ], f.getAttribute(InstLevelAttribute()) ); + } + } + return d_skolem_body[ f ]; +} + +void QuantifiersEngine::getPhaseReqTerms( Node f, std::vector< Node >& nodes ){ + if( Options::current()->literalMatchMode!=Options::LITERAL_MATCH_NONE ){ + bool printed = false; + // doing literal-based matching (consider polarity of literals) + for( int i=0; i<(int)nodes.size(); i++ ){ + Node prev = nodes[i]; + bool nodeChanged = false; + if( isPhaseReq( f, nodes[i] ) ){ + bool preq = getPhaseReq( f, nodes[i] ); + nodes[i] = NodeManager::currentNM()->mkNode( IFF, nodes[i], NodeManager::currentNM()->mkConst(preq) ); + nodeChanged = true; + } + //else if( qe->isPhaseReqEquality( f, trNodes[i] ) ){ + // Node req = qe->getPhaseReqEquality( f, trNodes[i] ); + // trNodes[i] = NodeManager::currentNM()->mkNode( EQUAL, trNodes[i], req ); + //} + if( nodeChanged ){ + if( !printed ){ + Debug("literal-matching") << "LitMatch for " << f << ":" << std::endl; + printed = true; + } + Debug("literal-matching") << " Make " << prev << " -> " << nodes[i] << std::endl; + Assert( prev.hasAttribute(InstConstantAttribute()) ); + setInstantiationConstantAttr( nodes[i], prev.getAttribute(InstConstantAttribute()) ); + ++(d_statistics.d_lit_phase_req); + }else{ + ++(d_statistics.d_lit_phase_nreq); + } + } + }else{ + d_statistics.d_lit_phase_nreq += (int)nodes.size(); + } +} + +void QuantifiersEngine::computePhaseReqs2( Node n, bool polarity, std::map< Node, int >& phaseReqs ){ + bool newReqPol = false; + bool newPolarity; + if( n.getKind()==NOT ){ + newReqPol = true; + newPolarity = !polarity; + }else if( n.getKind()==OR || n.getKind()==IMPLIES ){ + if( !polarity ){ + newReqPol = true; + newPolarity = false; + } + }else if( n.getKind()==AND ){ + if( polarity ){ + newReqPol = true; + newPolarity = true; + } + }else{ + int val = polarity ? 1 : -1; + if( phaseReqs.find( n )==phaseReqs.end() ){ + phaseReqs[n] = val; + }else if( val!=phaseReqs[n] ){ + phaseReqs[n] = 0; + } + } + if( newReqPol ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( n.getKind()==IMPLIES && i==0 ){ + computePhaseReqs2( n[i], !newPolarity, phaseReqs ); + }else{ + computePhaseReqs2( n[i], newPolarity, phaseReqs ); + } + } + } +} + +void QuantifiersEngine::computePhaseReqs( Node n, bool polarity, std::map< Node, bool >& phaseReqs ){ + std::map< Node, int > phaseReqs2; + computePhaseReqs2( n, polarity, phaseReqs2 ); + for( std::map< Node, int >::iterator it = phaseReqs2.begin(); it != phaseReqs2.end(); ++it ){ + if( it->second==1 ){ + phaseReqs[ it->first ] = true; + }else if( it->second==-1 ){ + phaseReqs[ it->first ] = false; + } + } +} + +void QuantifiersEngine::generatePhaseReqs( Node f, Node n ){ + computePhaseReqs( n, false, d_phase_reqs[f] ); + Debug("inst-engine-phase-req") << "Phase requirements for " << f << ":" << std::endl; + //now, compute if any patterns are equality required + for( std::map< Node, bool >::iterator it = d_phase_reqs[f].begin(); it != d_phase_reqs[f].end(); ++it ){ + Debug("inst-engine-phase-req") << " " << it->first << " -> " << it->second << std::endl; + if( it->first.getKind()==EQUAL ){ + if( it->first[0].hasAttribute(InstConstantAttribute()) ){ + if( !it->first[1].hasAttribute(InstConstantAttribute()) ){ + d_phase_reqs_equality_term[f][ it->first[0] ] = it->first[1]; + d_phase_reqs_equality[f][ it->first[0] ] = it->second; + Debug("inst-engine-phase-req") << " " << it->first[0] << ( it->second ? " == " : " != " ) << it->first[1] << std::endl; + } + }else if( it->first[1].hasAttribute(InstConstantAttribute()) ){ + d_phase_reqs_equality_term[f][ it->first[1] ] = it->first[0]; + d_phase_reqs_equality[f][ it->first[1] ] = it->second; + Debug("inst-engine-phase-req") << " " << it->first[1] << ( it->second ? " == " : " != " ) << it->first[0] << std::endl; + } + } + } + +} + +Node QuantifiersEngine::getSubstitutedNode( Node n, Node f ){ + return convertNodeToPattern(n,f,d_vars[f],d_inst_constants[ f ]); +} + +Node QuantifiersEngine::convertNodeToPattern( Node n, Node f, const std::vector & vars, + const std::vector & inst_constants){ + Node n2 = n.substitute( vars.begin(), vars.end(), + inst_constants.begin(), + inst_constants.end() ); + setInstantiationConstantAttr( n2, f ); + return n2; +} + + +void QuantifiersEngine::setInstantiationLevelAttr( Node n, uint64_t level ){ + if( !n.hasAttribute(InstLevelAttribute()) ){ + InstLevelAttribute ila; + n.setAttribute(ila,level); + } + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + setInstantiationLevelAttr( n[i], level ); + } +} + + +void QuantifiersEngine::setInstantiationConstantAttr( Node n, Node f ){ + if( !n.hasAttribute(InstConstantAttribute()) ){ + bool setAttr = false; + if( n.getKind()==INST_CONSTANT ){ + setAttr = true; + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + setInstantiationConstantAttr( n[i], f ); + if( n[i].hasAttribute(InstConstantAttribute()) ){ + setAttr = true; + } + } + } + if( setAttr ){ + InstConstantAttribute ica; + n.setAttribute(ica,f); + //also set the no-match attribute + NoMatchAttribute nma; + n.setAttribute(nma,true); + } + } +} + +QuantifiersEngine::Statistics::Statistics(): + d_num_quant("QuantifiersEngine::Num_Quantifiers", 0), + d_instantiation_rounds("QuantifiersEngine::Rounds_Instantiation_Full", 0), + d_instantiation_rounds_lc("QuantifiersEngine::Rounds_Instantiation_Last_Call", 0), + d_instantiations("QuantifiersEngine::Instantiations_Total", 0), + d_max_instantiation_level("QuantifiersEngine::Max_Instantiation_Level", 0), + d_splits("QuantifiersEngine::Total_Splits", 0), + d_total_inst_var("QuantifiersEngine::Vars_Inst", 0), + d_total_inst_var_unspec("QuantifiersEngine::Vars_Inst_Unspecified", 0), + d_inst_unspec("QuantifiersEngine::Unspecified_Inst", 0), + d_inst_duplicate("QuantifiersEngine::Duplicate_Inst", 0), + d_lit_phase_req("QuantifiersEngine::lit_phase_req", 0), + d_lit_phase_nreq("QuantifiersEngine::lit_phase_nreq", 0), + d_triggers("QuantifiersEngine::Triggers", 0), + d_simple_triggers("QuantifiersEngine::Triggers_Simple", 0), + d_multi_triggers("QuantifiersEngine::Triggers_Multi", 0), + d_multi_trigger_instantiations("QuantifiersEngine::Multi_Trigger_Instantiations", 0) +{ + StatisticsRegistry::registerStat(&d_num_quant); + StatisticsRegistry::registerStat(&d_instantiation_rounds); + StatisticsRegistry::registerStat(&d_instantiation_rounds_lc); + StatisticsRegistry::registerStat(&d_instantiations); + StatisticsRegistry::registerStat(&d_max_instantiation_level); + StatisticsRegistry::registerStat(&d_splits); + StatisticsRegistry::registerStat(&d_total_inst_var); + StatisticsRegistry::registerStat(&d_total_inst_var_unspec); + StatisticsRegistry::registerStat(&d_inst_unspec); + StatisticsRegistry::registerStat(&d_inst_duplicate); + StatisticsRegistry::registerStat(&d_lit_phase_req); + StatisticsRegistry::registerStat(&d_lit_phase_nreq); + StatisticsRegistry::registerStat(&d_triggers); + StatisticsRegistry::registerStat(&d_simple_triggers); + StatisticsRegistry::registerStat(&d_multi_triggers); + StatisticsRegistry::registerStat(&d_multi_trigger_instantiations); +} + +QuantifiersEngine::Statistics::~Statistics(){ + StatisticsRegistry::unregisterStat(&d_num_quant); + StatisticsRegistry::unregisterStat(&d_instantiation_rounds); + StatisticsRegistry::unregisterStat(&d_instantiation_rounds_lc); + StatisticsRegistry::unregisterStat(&d_instantiations); + StatisticsRegistry::unregisterStat(&d_max_instantiation_level); + StatisticsRegistry::unregisterStat(&d_splits); + StatisticsRegistry::unregisterStat(&d_total_inst_var); + StatisticsRegistry::unregisterStat(&d_total_inst_var_unspec); + StatisticsRegistry::unregisterStat(&d_inst_unspec); + StatisticsRegistry::unregisterStat(&d_inst_duplicate); + StatisticsRegistry::unregisterStat(&d_lit_phase_req); + StatisticsRegistry::unregisterStat(&d_lit_phase_nreq); + StatisticsRegistry::unregisterStat(&d_triggers); + StatisticsRegistry::unregisterStat(&d_simple_triggers); + StatisticsRegistry::unregisterStat(&d_multi_triggers); + StatisticsRegistry::unregisterStat(&d_multi_trigger_instantiations); +} + +Node QuantifiersEngine::getFreeVariableForInstConstant( Node n ){ + TypeNode tn = n.getType(); + if( d_free_vars.find( tn )==d_free_vars.end() ){ + //if integer or real, make zero + if( tn==NodeManager::currentNM()->integerType() || tn==NodeManager::currentNM()->realType() ){ + Rational z(0); + d_free_vars[tn] = NodeManager::currentNM()->mkConst( z ); + }else{ + if( d_term_db->d_type_map[ tn ].empty() ){ + d_free_vars[tn] = NodeManager::currentNM()->mkVar( tn ); + }else{ + d_free_vars[tn] =d_term_db->d_type_map[ tn ][ 0 ]; + } + } + } + return d_free_vars[tn]; +} + +/** compute symbols */ +void QuantifiersEngine::computeSymbols( Node n, std::vector< Node >& syms ){ + if( n.getKind()==APPLY_UF ){ + Node op = n.getOperator(); + if( std::find( syms.begin(), syms.end(), op )==syms.end() ){ + syms.push_back( op ); + } + } + if( n.getKind()!=FORALL ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + computeSymbols( n[i], syms ); + } + } +} + +/** set relevance */ +void QuantifiersEngine::setRelevance( Node s, int r ){ + int rOld = getRelevance( s ); + if( rOld==-1 || r +#include +#include + +namespace CVC4 { + +class TheoryEngine; + +// attribute for "contains instantiation constants from" +struct InstConstantAttributeId {}; +typedef expr::Attribute InstConstantAttribute; + +struct InstLevelAttributeId {}; +typedef expr::Attribute InstLevelAttribute; + +struct InstVarNumAttributeId {}; +typedef expr::Attribute InstVarNumAttribute; + +namespace theory { + +class QuantifiersEngine; + +class InstStrategy { +public: + enum Status { + STATUS_UNFINISHED, + STATUS_UNKNOWN, + STATUS_SAT, + };/* enum Status */ +protected: + /** reference to the instantiation engine */ + QuantifiersEngine* d_quantEngine; +protected: + /** giving priorities */ + std::vector< InstStrategy* > d_priority_over; + /** do not instantiate list */ + std::vector< Node > d_no_instantiate; + std::vector< Node > d_no_instantiate_temp; + /** reset instantiation */ + virtual void processResetInstantiationRound( Theory::Effort effort ) = 0; + /** process method */ + virtual int process( Node f, Theory::Effort effort, int e, int limitInst = 0 ) = 0; +public: + InstStrategy( QuantifiersEngine* ie ) : d_quantEngine( ie ){} + virtual ~InstStrategy(){} + + /** reset instantiation */ + void resetInstantiationRound( Theory::Effort effort ); + /** do instantiation round method */ + int doInstantiation( Node f, Theory::Effort effort, int e, int limitInst = 0 ); + /** update status */ + static void updateStatus( int& currStatus, int addStatus ){ + if( addStatus==STATUS_UNFINISHED ){ + currStatus = STATUS_UNFINISHED; + }else if( addStatus==STATUS_UNKNOWN ){ + if( currStatus==STATUS_SAT ){ + currStatus = STATUS_UNKNOWN; + } + } + } + /** identify */ + virtual std::string identify() const { return std::string("Unknown"); } +public: + /** set priority */ + void setPriorityOver( InstStrategy* is ) { d_priority_over.push_back( is ); } + /** set no instantiate */ + void setNoInstantiate( Node n ) { d_no_instantiate.push_back( n ); } + /** should instantiate */ + bool shouldInstantiate( Node n ) { + return std::find( d_no_instantiate_temp.begin(), d_no_instantiate_temp.end(), n )==d_no_instantiate_temp.end(); + } +};/* class InstStrategy */ + +class QuantifiersModule { +public: + QuantifiersModule(){} + ~QuantifiersModule(){} + /* Call during check registerQuantifier has already been called */ + virtual void check( Theory::Effort e ) = 0; + /* Called for new quantifiers */ + virtual void registerQuantifier( Node n ) = 0; + virtual void assertNode( Node n ) = 0; + virtual void propagate( Theory::Effort level ) = 0; + virtual Node explain(TNode n) = 0; +};/* class QuantifiersModule */ + +class TermArgTrie { +private: + bool addTerm2( QuantifiersEngine* qe, Node n, int argIndex ); +public: + /** the data */ + std::map< Node, TermArgTrie > d_data; +public: + bool addTerm( QuantifiersEngine* qe, Node n ) { return addTerm2( qe, n, 0 ); } +};/* class TermArgTrie */ + +class TermDb { +private: + /** reference to the quantifiers engine */ + QuantifiersEngine* d_quantEngine; + /** calculated no match terms */ + bool d_matching_active; + /** terms processed */ + std::map< Node, bool > d_processed; +public: + TermDb( QuantifiersEngine* qe ) : d_quantEngine( qe ), d_matching_active( true ){} + ~TermDb(){} + /** map from APPLY_UF operators to ground terms for that operator */ + std::map< Node, std::vector< Node > > d_op_map; + /** map from APPLY_UF functions to trie */ + std::map< Node, TermArgTrie > d_func_map_trie; + /** map from APPLY_UF predicates to trie */ + std::map< Node, TermArgTrie > d_pred_map_trie[2]; + /** map from type nodes to terms of that type */ + std::map< TypeNode, std::vector< Node > > d_type_map; + /** add a term to the database */ + void addTerm( Node n, std::vector< Node >& added, bool withinQuant = false ); + /** reset (calculate which terms are active) */ + void reset( Theory::Effort effort ); + /** set active */ + void setMatchingActive( bool a ) { d_matching_active = a; } + /** get active */ + bool getMatchingActive() { return d_matching_active; } +public: + /** parent structure (for efficient E-matching): + n -> op -> index -> L + map from node "n" to a list of nodes "L", where each node n' in L + has operator "op", and n'["index"] = n. + for example, d_parents[n][f][1] = { f( t1, n ), f( t2, n ), ... } + */ + std::map< Node, std::map< Node, std::map< int, std::vector< Node > > > > d_parents; +};/* class TermDb */ + +namespace quantifiers { + class InstantiationEngine; +}/* CVC4::theory::quantifiers */ + +class QuantifiersEngine { + friend class quantifiers::InstantiationEngine; + friend class InstMatch; +private: + typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap; + /** reference to theory engine object */ + TheoryEngine* d_te; + /** vector of modules for quantifiers */ + std::vector< QuantifiersModule* > d_modules; + /** equality query class */ + EqualityQuery* d_eq_query; + + /** list of all quantifiers */ + std::vector< Node > d_quants; + /** list of quantifiers asserted in the current context */ + context::CDList d_forall_asserts; + /** map from universal quantifiers to the list of variables */ + std::map< Node, std::vector< Node > > d_vars; + /** map from universal quantifiers to the list of skolem constants */ + std::map< Node, std::vector< Node > > d_skolem_constants; + /** map from universal quantifiers to their skolemized body */ + std::map< Node, Node > d_skolem_body; + /** map from universal quantifiers to their bound body */ + std::map< Node, Node > d_bound_body; + /** instantiation constants to universal quantifiers */ + std::map< Node, Node > d_inst_constants_map; + /** map from universal quantifiers to their counterexample body */ + std::map< Node, Node > d_counterexample_body; + /** map from universal quantifiers to the list of instantiation constants */ + std::map< Node, std::vector< Node > > d_inst_constants; + /** map from quantifiers to whether they are active */ + BoolMap d_active; + /** lemmas produced */ + std::map< Node, bool > d_lemmas_produced; + /** lemmas waiting */ + std::vector< Node > d_lemmas_waiting; + /** inst matches produced for each quantifier */ + std::map< Node, InstMatchTrie > d_inst_match_trie; + /** free variable for instantiation constant type */ + std::map< TypeNode, Node > d_free_vars; + /** owner of quantifiers */ + std::map< Node, Theory* > d_owner; + /** term database */ + TermDb* d_term_db; + /** universal quantifiers that have been rewritten */ + std::map< Node, std::vector< Node > > d_quant_rewritten; + /** map from rewritten universal quantifiers to the quantifier they are the consequence of */ + std::map< Node, Node > d_rewritten_quant; +private: + /** for computing relavance */ + /** map from quantifiers to symbols they contain */ + std::map< Node, std::vector< Node > > d_syms; + /** map from symbols to quantifiers */ + std::map< Node, std::vector< Node > > d_syms_quants; + /** relevance for quantifiers and symbols */ + std::map< Node, int > d_relevance; + /** compute symbols */ + void computeSymbols( Node n, std::vector< Node >& syms ); +private: + /** helper functions compute phase requirements */ + static void computePhaseReqs2( Node n, bool polarity, std::map< Node, int >& phaseReqs ); + /** set instantiation level attr */ + void setInstantiationLevelAttr( Node n, uint64_t level ); + /** set instantiation constant attr */ + void setInstantiationConstantAttr( Node n, Node f ); + /** make instantiation constants for */ + void makeInstantiationConstantsFor( Node f ); + + KEEP_STATISTIC(TimerStat, d_time, "theory::QuantifiersEngine::time"); + +public: + QuantifiersEngine(context::Context* c, TheoryEngine* te); + ~QuantifiersEngine(){} + /** get instantiator for id */ + Instantiator* getInstantiator( int id ); + /** get theory engine */ + TheoryEngine* getTheoryEngine() { return d_te; } + /** get equality query object */ + EqualityQuery* getEqualityQuery() { return d_eq_query; } + /** set equality query object */ + void setEqualityQuery( EqualityQuery* eq ) { d_eq_query = eq; } +public: + /** add module */ + void addModule( QuantifiersModule* qm ) { d_modules.push_back( qm ); } + /** check at level */ + void check( Theory::Effort e ); + /** register (non-rewritten) quantifier */ + void registerQuantifier( Node f ); + /** register (non-rewritten) quantifier */ + void registerPattern( std::vector & pattern); + /** assert (universal) quantifier */ + void assertNode( Node f ); + /** propagate */ + void propagate( Theory::Effort level ); +public: + /** add lemma lem */ + bool addLemma( Node lem ); + /** instantiate f with arguments terms */ + bool addInstantiation( Node f, std::vector< Node >& terms ); + /** do instantiation specified by m */ + bool addInstantiation( Node f, InstMatch& m, bool addSplits = false ); + /** split on node n */ + bool addSplit( Node n, bool reqPhase = false, bool reqPhasePol = true ); + /** add split equality */ + bool addSplitEquality( Node n1, Node n2, bool reqPhase = false, bool reqPhasePol = true ); + /** has added lemma */ + bool hasAddedLemma() { return !d_lemmas_waiting.empty(); } + /** flush lemmas */ + void flushLemmas( OutputChannel* out ); + /** get number of waiting lemmas */ + int getNumLemmasWaiting() { return (int)d_lemmas_waiting.size(); } +public: + /** get number of quantifiers */ + int getNumQuantifiers() { return (int)d_quants.size(); } + /** get quantifier */ + Node getQuantifier( int i ) { return d_quants[i]; } + /** get number of asserted quantifiers */ + int getNumAssertedQuantifiers() { return (int)d_forall_asserts.size(); } + /** get asserted quantifier */ + Node getAssertedQuantifier( int i ) { return d_forall_asserts[i]; } + /** get instantiation constants */ + void getInstantiationConstantsFor( Node f, std::vector< Node >& ics ) { + ics.insert( ics.begin(), d_inst_constants[f].begin(), d_inst_constants[f].end() ); + } + /** get the i^th instantiation constant of f */ + Node getInstantiationConstant( Node f, int i ) { return d_inst_constants[f][i]; } + /** get number of instantiation constants for f */ + int getNumInstantiationConstants( Node f ) { return (int)d_inst_constants[f].size(); } + std::vector createInstVariable( std::vector & vars ); +public: + /** get the ce body f[e/x] */ + Node getCounterexampleBody( Node f ); + /** get the skolemized body f[e/x] */ + Node getSkolemizedBody( Node f ); + /** set active */ + void setActive( Node n, bool val ) { d_active[n] = val; } + /** get active */ + bool getActive( Node n ) { return d_active.find( n )!=d_active.end() && d_active[n]; } +public: + /** phase requirements for each quantifier for each instantiation literal */ + std::map< Node, std::map< Node, bool > > d_phase_reqs; + std::map< Node, std::map< Node, bool > > d_phase_reqs_equality; + std::map< Node, std::map< Node, Node > > d_phase_reqs_equality_term; +public: + /** is phase required */ + bool isPhaseReq( Node f, Node lit ) { return d_phase_reqs[f].find( lit )!=d_phase_reqs[f].end(); } + /** get phase requirement */ + bool getPhaseReq( Node f, Node lit ) { return d_phase_reqs[f].find( lit )==d_phase_reqs[f].end() ? false : d_phase_reqs[f][ lit ]; } + /** get term req terms */ + void getPhaseReqTerms( Node f, std::vector< Node >& nodes ); + /** helper functions compute phase requirements */ + static void computePhaseReqs( Node n, bool polarity, std::map< Node, bool >& phaseReqs ); + /** compute phase requirements */ + void generatePhaseReqs( Node f, Node n ); +public: + /** returns node n with bound vars of f replaced by instantiation constants of f + node n : is the futur pattern + node f : is the quantifier containing which bind the variable + return a pattern where the variable are replaced by variable for + instantiation. + */ + Node getSubstitutedNode( Node n, Node f ); + /** same as before but node f is just linked to the new pattern by the + applied attribute + vars the bind variable + nvars the same variable but with an attribute + */ + Node convertNodeToPattern( Node n, Node f, + const std::vector & vars, + const std::vector & nvars); + /** get free variable for instantiation constant */ + Node getFreeVariableForInstConstant( Node n ); + /** get bound variable for variable */ + Node getBoundVariableForVariable( Node n ); +public: + /** has owner */ + bool hasOwner( Node f ) { return d_owner.find( f )!=d_owner.end(); } + /** get owner */ + Theory* getOwner( Node f ) { return d_owner[f]; } + /** set owner */ + void setOwner( Node f, Theory* t ) { d_owner[f] = t; } +public: + /** get term database */ + TermDb* getTermDatabase() { return d_term_db; } + /** add term to database */ + void addTermToDatabase( Node n, bool withinQuant = false ); +private: + /** set relevance */ + void setRelevance( Node s, int r ); +public: + /** get relevance */ + int getRelevance( Node s ) { return d_relevance.find( s )==d_relevance.end() ? -1 : d_relevance[s]; } + /** get number of quantifiers for symbol s */ + int getNumQuantifiersForSymbol( Node s ) { return (int)d_syms_quants[s].size(); } +public: + /** statistics class */ + class Statistics { + public: + IntStat d_num_quant; + IntStat d_instantiation_rounds; + IntStat d_instantiation_rounds_lc; + IntStat d_instantiations; + IntStat d_max_instantiation_level; + IntStat d_splits; + IntStat d_total_inst_var; + IntStat d_total_inst_var_unspec; + IntStat d_inst_unspec; + IntStat d_inst_duplicate; + IntStat d_lit_phase_req; + IntStat d_lit_phase_nreq; + IntStat d_triggers; + IntStat d_simple_triggers; + IntStat d_multi_triggers; + IntStat d_multi_trigger_instantiations; + Statistics(); + ~Statistics(); + };/* class QuantifiersEngine::Statistics */ + Statistics d_statistics; +};/* class QuantifiersEngine */ + +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__QUANTIFIERS_ENGINE_H */ diff --git a/src/theory/rewriterules/Makefile b/src/theory/rewriterules/Makefile new file mode 100644 index 000000000..4b1d4fc55 --- /dev/null +++ b/src/theory/rewriterules/Makefile @@ -0,0 +1,4 @@ +topdir = ../../.. +srcdir = src/theory/rewriterules + +include $(topdir)/Makefile.subdir diff --git a/src/theory/rewriterules/Makefile.am b/src/theory/rewriterules/Makefile.am new file mode 100644 index 000000000..46cffda11 --- /dev/null +++ b/src/theory/rewriterules/Makefile.am @@ -0,0 +1,19 @@ +AM_CPPFLAGS = \ + -D__BUILDING_CVC4LIB \ + -I@srcdir@/../../include -I@srcdir@/../.. -I@builddir@/../.. +AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) + +noinst_LTLIBRARIES = librewriterules.la + +librewriterules_la_SOURCES = \ + theory_rewriterules_rules.h \ + theory_rewriterules_rules.cpp \ + theory_rewriterules.h \ + theory_rewriterules.cpp \ + theory_rewriterules_rewriter.h \ + theory_rewriterules_type_rules.h \ + theory_rewriterules_preprocess.h \ + theory_rewriterules_params.h + +EXTRA_DIST = \ + kinds diff --git a/src/theory/rewriterules/README.WHATS-NEXT b/src/theory/rewriterules/README.WHATS-NEXT new file mode 100644 index 000000000..eda7dcbe6 --- /dev/null +++ b/src/theory/rewriterules/README.WHATS-NEXT @@ -0,0 +1,29 @@ +Congratulations, you now have a new theory of rewriterules ! + +Your next steps will likely be: + +* to specify theory constants, types, and operators in your \`kinds' file +* to add typing rules to theory_${dir}_type_rules.h for your operators + and constants +* to write code in theory_${dir}_rewriter.h to implement a normal form + for your theory's terms +* to write parser rules in src/parser/cvc/Cvc.g to support the CVC input + language, src/parser/smt/Smt.g to support the (deprecated) SMT-LIBv1 + language, and src/parser/smt2/Smt2.g to support SMT-LIBv2 +* to write printer code in src/printer/*/*_printer* to support printing + your theory terms and types in various output languages + +and finally: + +* to implement a decision procedure for your theory by implementing + TheoryRewriterules::check() in theory_rewriterules.cpp. Before writing the actual + code, you will need : + + * to determine which datastructures are context dependent and use for them + context dependent datastructures (context/cd*.h) + * to choose which work will be done at QUICK_CHECK, STANDARD or at + FULL_EFFORT. + + +Good luck, and please contact cvc4-devel@cs.nyu.edu for assistance +should you need it! diff --git a/src/theory/rewriterules/kinds b/src/theory/rewriterules/kinds new file mode 100644 index 000000000..01fbda51e --- /dev/null +++ b/src/theory/rewriterules/kinds @@ -0,0 +1,37 @@ +# kinds -*- sh -*- +# +# For documentation on this file format, please refer to +# src/theory/builtin/kinds. +# + +theory THEORY_REWRITERULES ::CVC4::theory::rewriterules::TheoryRewriteRules "theory/rewriterules/theory_rewriterules.h" +typechecker "theory/rewriterules/theory_rewriterules_type_rules.h" +rewriter ::CVC4::theory::rewriterules::TheoryRewriterulesRewriter "theory/rewriterules/theory_rewriterules_rewriter.h" + +properties check + +# Theory content goes here. + +# constants... + +# types... +sort RRHB_TYPE \ + Cardinality::INTEGERS \ + not-well-founded \ + "head and body of the rule type" + +# operators... + +# variables, guards, RR_REWRITE/REDUCTION_RULE/DEDUCTION_RULE +operator REWRITE_RULE 3 "generale rewrite rule" +#HEAD/BODY/TRIGGER +operator RR_REWRITE 2:3 "actual rewrite rule" +operator RR_REDUCTION 2:3 "actual reduction rule" +operator RR_DEDUCTION 2:3 "actual deduction rule" + +typerule REWRITE_RULE ::CVC4::theory::rewriterules::RewriteRuleTypeRule +typerule RR_REWRITE ::CVC4::theory::rewriterules::RRRewriteTypeRule +typerule RR_REDUCTION ::CVC4::theory::rewriterules::RRRedDedTypeRule +typerule RR_DEDUCTION ::CVC4::theory::rewriterules::RRRedDedTypeRule + +endtheory diff --git a/src/theory/rewriterules/theory_rewriterules.cpp b/src/theory/rewriterules/theory_rewriterules.cpp new file mode 100644 index 000000000..0072a36e9 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules.cpp @@ -0,0 +1,519 @@ +/********************* */ +/*! \file rewrite_engine.cpp + ** \verbatim + ** Original author: ajreynolds + ** Major contributors: bobot + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 + ** The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief [[ Deals with rewrite rules ]] + ** + ** [[ Add lengthier description here ]] + ** \todo document this file + **/ + +#include "theory/rewriterules/theory_rewriterules.h" +#include "theory/rewriterules/theory_rewriterules_rules.h" +#include "theory/rewriterules/theory_rewriterules_params.h" + +#include "theory/rewriterules/theory_rewriterules_preprocess.h" +#include "theory/rewriter.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::rewriterules; + + +namespace CVC4 { +namespace theory { +namespace rewriterules { + + +inline std::ostream& operator <<(std::ostream& stream, const RuleInst& ri) { + ri.toStream(stream); + return stream; +} + +static const RuleInst* RULEINST_TRUE = (RuleInst*) 1; +static const RuleInst* RULEINST_FALSE = (RuleInst*) 2; + + /** Rule an instantiation with the given match */ +RuleInst::RuleInst(TheoryRewriteRules & re, const RewriteRule * r, + std::vector & inst_subst, + Node matched): + rule(r), d_matched(matched) +{ + Assert(r != NULL); + Assert(!r->directrr || !d_matched.isNull()); + subst.swap(inst_subst); +}; + +Node RuleInst::substNode(const TheoryRewriteRules & re, TNode r, + TCache cache ) const { + Assert(this != RULEINST_TRUE && this != RULEINST_FALSE); + return r.substitute (rule->free_vars.begin(),rule->free_vars.end(), + subst.begin(),subst.end(),cache); +}; +size_t RuleInst::findGuard(TheoryRewriteRules & re, size_t start)const{ + TCache cache; + Assert(this != RULEINST_TRUE && this != RULEINST_FALSE); + while (start < (rule->guards).size()){ + Node g = substNode(re,rule->guards[start],cache); + switch(re.addWatchIfDontKnow(g,this,start)){ + case ATRUE: + Debug("rewriterules") << g << "is true" << std::endl; + ++start; + continue; + case AFALSE: + Debug("rewriterules") << g << "is false" << std::endl; + return -1; + case ADONTKNOW: + Debug("rewriterules") << g << "is unknown" << std::endl; + return start; + } + } + /** All the guards are verified */ + re.propagateRule(this,cache); + return start; +}; + +bool RuleInst::alreadyRewritten(TheoryRewriteRules & re) const{ + Assert(this != RULEINST_TRUE && this != RULEINST_FALSE); + static NoMatchAttribute rewrittenNodeAttribute; + TCache cache; + for(std::vector::const_iterator + iter = rule->to_remove.begin(); + iter != rule->to_remove.end(); ++iter){ + if (substNode(re,*iter,cache).getAttribute(rewrittenNodeAttribute)) + return true; + }; + return false; +} + +void RuleInst::toStream(std::ostream& out) const{ + if(this == RULEINST_TRUE){ out << "TRUE"; return;}; + if(this == RULEINST_FALSE){ out << "FALSE"; return;}; + out << "(" << *rule << ") "; + for(std::vector::const_iterator + iter = subst.begin(); iter != subst.end(); ++iter){ + out << *iter << " "; + }; +} + + +void Guarded::nextGuard(TheoryRewriteRules & re)const{ + Assert(inst != RULEINST_TRUE && inst != RULEINST_FALSE); + if(simulateRewritting && inst->alreadyRewritten(re)) return; + inst->findGuard(re,d_guard+1); +}; + +/** start indicate the first guard which is not true */ +Guarded::Guarded(const RuleInst* ri, const size_t start) : + d_guard(start),inst(ri) {}; +Guarded::Guarded(const Guarded & g) : + d_guard(g.d_guard),inst(g.inst) {}; +Guarded::Guarded() : + //dumb value + d_guard(-1),inst(RULEINST_TRUE) {}; + +TheoryRewriteRules::TheoryRewriteRules(context::Context* c, + context::UserContext* u, + OutputChannel& out, + Valuation valuation, + const LogicInfo& logicInfo, + QuantifiersEngine* qe) : + Theory(THEORY_REWRITERULES, c, u, out, valuation, logicInfo, qe), + d_rules(c), d_ruleinsts(c), d_guardeds(c), d_checkLevel(c,0), + d_explanations(c), d_ruleinsts_to_add() + { + d_true = NodeManager::currentNM()->mkConst(true); + d_false = NodeManager::currentNM()->mkConst(false); + Debug("rewriterules") << Node::setdepth(-1); + Debug("rewriterules-rewrite") << Node::setdepth(-1); +} + +void TheoryRewriteRules::addMatchRuleTrigger(const RewriteRule * r, + InstMatch & im, + bool delay){ + ++r->nb_matched; + if(rewrite_instantiation) im.applyRewrite(); + if(representative_instantiation) + im.makeRepresentative( getQuantifiersEngine() ); + + if(!cache_match || !r->inCache(*this,im)){ + ++r->nb_applied; + std::vector subst; + im.computeTermVec(getQuantifiersEngine(), r->inst_vars , subst); + RuleInst * ri = new RuleInst(*this,r,subst, + r->directrr ? im.d_matched : Node::null()); + Debug("rewriterules") << "One matching found" + << (delay? "(delayed)":"") + << ":" << *ri << std::endl; + // Find the first non verified guard, don't save the rule if the + // rule can already be fired In fact I save it otherwise strange + // things append. + Assert(ri->rule != NULL); + if(delay) d_ruleinsts_to_add.push_back(ri); + else{ + if(simulateRewritting && ri->alreadyRewritten(*this)) return; + if(ri->findGuard(*this, 0) != (r->guards).size()) + d_ruleinsts.push_back(ri); + else delete(ri); + }; + }; +} + +void TheoryRewriteRules::check(Effort level) { + CodeTimer codeTimer(d_theoryTime); + + Assert(d_ruleinsts_to_add.empty()); + + while(!done()) { + // Get all the assertions + // TODO: Test that it have already been ppAsserted + get(); + // Assertion assertion = get(); + // TNode fact = assertion.assertion; + + // Debug("rewriterules") << "TheoryRewriteRules::check(): processing " << fact << std::endl; + // if (getValuation().getDecisionLevel()>0) + // Unhandled(getValuation().getDecisionLevel()); + // addRewriteRule(fact); + + }; + + Debug("rewriterules") << "Check:" << d_checkLevel << (level==EFFORT_FULL? " EFFORT_FULL":"") << std::endl; + + /** Test each rewrite rule */ + for(size_t rid = 0, end = d_rules.size(); rid < end; ++rid) { + RewriteRule * r = d_rules[rid]; + if (level!=EFFORT_FULL && r->d_split) continue; + Debug("rewriterules") << " rule: " << r << std::endl; + Trigger & tr = r->trigger; + //reset instantiation round for trigger (set up match production) + tr.resetInstantiationRound(); + //begin iterating from the first match produced by the trigger + tr.reset( Node::null() ); + + /** Test the possible matching one by one */ + InstMatch im; + while(tr.getNextMatch( im )){ + addMatchRuleTrigger(r, im, true); + im.clear(); + } + } + + const bool do_notification = d_checkLevel == 0 || level==EFFORT_FULL; + bool polldone = false; + + GuardedMap::const_iterator p = d_guardeds.begin(); + do{ + + + //dequeue instantiated rules + for(; !d_ruleinsts_to_add.empty();){ + RuleInst * ri = d_ruleinsts_to_add.back(); d_ruleinsts_to_add.pop_back(); + if(simulateRewritting && ri->alreadyRewritten(*this)) break; + if(ri->findGuard(*this, 0) != ri->rule->guards.size()) + d_ruleinsts.push_back(ri); + else delete(ri); + }; + + if(do_notification) + /** Temporary way. Poll value */ + for (; p != d_guardeds.end(); ++p){ + TNode g = (*p).first; + const GList * const l = (*p).second; + const Guarded & glast = l->back(); + // Notice() << "Polled?:" << g << std::endl; + if(glast.inst == RULEINST_TRUE||glast.inst == RULEINST_FALSE) continue; + // Notice() << "Polled!:" << g << "->" << (glast.inst == RULEINST_TRUE||glast.inst == RULEINST_FALSE) << std::endl; + bool value; + if(getValuation().hasSatValue(g,value)){ + if(value) polldone = true; //One guard is true so pass n check + Debug("rewriterules") << "Poll value:" << g + << " is " << (value ? "true" : "false") << std::endl; + notification(g,value); + //const Guarded & glast2 = (*l)[l->size()-1]; + // Notice() << "Polled!!:" << g << "->" << (glast2.inst == RULEINST_TRUE||glast2.inst == RULEINST_FALSE) << std::endl; + }; + }; + + }while(!d_ruleinsts_to_add.empty() || + (p != d_guardeds.end() && do_notification)); + + if(polldone) d_checkLevel = checkSlowdown; + else d_checkLevel = d_checkLevel > 0 ? (d_checkLevel - 1) : 0; + + /** Narrowing by splitting on the guards */ + /** Perhaps only when no notification? */ + if(narrowing_full_effort && level==EFFORT_FULL){ + for (GuardedMap::const_iterator p = d_guardeds.begin(); + p != d_guardeds.end(); ++p){ + TNode g = (*p).first; + const GList * const l = (*p).second; + const Guarded & glast = (*l)[l->size()-1]; + if(glast.inst == RULEINST_TRUE||glast.inst == RULEINST_FALSE) + continue; + // If it has a value it should already has been notified + bool value; value = value; // avoiding the warning in non debug mode + Assert(!getValuation().hasSatValue(g,value)); + Debug("rewriterules") << "Narrowing on:" << g << std::endl; + /** Can split on already rewritten instrule... but... */ + getOutputChannel().split(g); + } + } + + Assert(d_ruleinsts_to_add.empty()); + Debug("rewriterules") << "Check done:" << d_checkLevel << std::endl; + +}; + +void TheoryRewriteRules::registerQuantifier( Node n ){}; + +Trigger TheoryRewriteRules::createTrigger( TNode n, std::vector & pattern ) { + // Debug("rewriterules") << "createTrigger:"; + getQuantifiersEngine()->registerPattern(pattern); + return *Trigger::mkTrigger(getQuantifiersEngine(),n,pattern, + match_gen_kind, true); +}; + +bool TheoryRewriteRules::notifyIfKnown(const GList * const ltested, + GList * const lpropa) { + Assert(ltested->size() > 0); + const Guarded & glast = (*ltested)[ltested->size()-1]; + if(glast.inst == RULEINST_TRUE || glast.inst == RULEINST_FALSE){ + notification(lpropa,glast.inst == RULEINST_TRUE); + return true; + }; + return false; +}; + +void TheoryRewriteRules::notification(GList * const lpropa, bool b){ + if (b){ + for(GList::const_iterator g = lpropa->begin(); + g != lpropa->end(); ++g) { + (*g).nextGuard(*this); + }; + lpropa->push_back(Guarded(RULEINST_TRUE,0)); + }else{ + lpropa->push_back(Guarded(RULEINST_FALSE,0)); + }; + Assert(lpropa->back().inst == RULEINST_TRUE || + lpropa->back().inst == RULEINST_FALSE); +}; + + + +Answer TheoryRewriteRules::addWatchIfDontKnow(Node g0, const RuleInst* ri, + const size_t gid){ + /** TODO: Should use the representative of g, but should I keep the + mapping for myself? */ + /* If it false in one model (current valuation) it's false for all */ + if (useCurrentModel){ + Node val = getValuation().getValue(g0); + Debug("rewriterules") << "getValue:" << g0 << " = " + << val << " is " << (val == d_false) << std::endl; + if (val == d_false) return AFALSE; + }; + /** Currently create a node with a literal */ + Node g = getValuation().ensureLiteral(g0); + GuardedMap::iterator l_i = d_guardeds.find(g); + GList* l; + if( l_i == d_guardeds.end() ) { + /** Normally Not watched so IDONTNOW but since we poll, we can poll now */ + bool value; + if(getValuation().hasSatValue(g,value)){ + if(value) return ATRUE; + else return AFALSE; + }; + //Not watched so IDONTNOW + l = new(getSatContext()->getCMM()) + GList(true, getSatContext());//, + //ContextMemoryAllocator(getContext()->getCMM())); + d_guardeds.insert(g ,l);//.insertDataFromContextMemory(g, l); + /* TODO Add register propagation */ + } else { + l = (*l_i).second; + Assert(l->size() > 0); + const Guarded & glast = (*l)[l->size()-1]; + if(glast.inst == RULEINST_TRUE) return ATRUE; + if(glast.inst == RULEINST_FALSE) return AFALSE; + + }; + /** I DONT KNOW because not watched or because not true nor false */ + l->push_back(Guarded(ri,gid)); + return ADONTKNOW; +}; + +void TheoryRewriteRules::notification(Node g, bool b){ + GuardedMap::const_iterator l = d_guardeds.find(g); + /** Should be a propagated node already known */ + Assert(l != d_guardeds.end()); + notification((*l).second,b); +} + + +void TheoryRewriteRules::notifyEq(TNode lhs, TNode rhs) { + GuardedMap::const_iterator ilhs = d_guardeds.find(lhs); + GuardedMap::const_iterator irhs = d_guardeds.find(rhs); + /** Should be a propagated node already known */ + Assert(ilhs != d_guardeds.end()); + if( irhs == d_guardeds.end() ) { + /** Not watched so points to the list directly */ + d_guardeds.insertDataFromContextMemory(rhs, (*ilhs).second); + } else { + GList * const llhs = (*ilhs).second; + GList * const lrhs = (*irhs).second; + if(!(notifyIfKnown(llhs,lrhs) || notifyIfKnown(lrhs,llhs))){ + /** If none of the two is known */ + for(GList::const_iterator g = llhs->begin(); g != llhs->end(); ++g){ + lrhs->push_back(*g); + }; + }; + }; +}; + + +void TheoryRewriteRules::propagateRule(const RuleInst * inst, TCache cache){ + // Debug("rewriterules") << "A rewrite rules is verified. Add lemma:"; + Debug("rewriterules") << "propagateRule" << *inst << std::endl; + const RewriteRule * rule = inst->rule; + ++rule->nb_applied; + // Can be more something else than an equality in fact (eg. propagation rule) + Node equality = inst->substNode(*this,rule->body,cache); + if(propagate_as_lemma){ + Node lemma = equality; + if(rule->guards.size() > 0){ + // TODO: problem with reduction rule => instead of <=> + lemma = substGuards(inst, cache).impNode(equality); + }; + if(rule->directrr){ + TypeNode booleanType = NodeManager::currentNM()->booleanType(); + // if the rule is directly applied by the rewriter, + // we should take care to use the representative that can't be directly rewritable: + // If "car(a)" is somewhere and we know that "a = cons(x,l)" we shouldn't + // add the constraint car(cons(x,l) = x because it is rewritten to x = x. + // But we should say cons(a) = x + Assert(lemma.getKind() == kind::EQUAL || + lemma.getKind() == kind::IMPLIES); + Assert(!inst->d_matched.isNull()); + Assert( inst->d_matched.getOperator() == lemma[0].getOperator() ); + // replace the left hand side by the term really matched + Debug("rewriterules-directrr") << "lemma:" << lemma << " :: " << inst->d_matched; + Node hyp; + NodeBuilder<2> nb; + if(inst->d_matched.getNumChildren() == 1){ + nb.clear( inst->d_matched[0].getType(false) == booleanType ? + kind::IFF : kind::EQUAL ); + nb << inst->d_matched[0] << lemma[0][0]; + hyp = nb; + }else{ + NodeBuilder<> andb(kind::AND); + for(size_t i = 0, + iend = inst->d_matched.getNumChildren(); i < iend; ++i){ + nb.clear( inst->d_matched[i].getType(false) == booleanType ? + kind::IFF : kind::EQUAL ); + nb << inst->d_matched[i] << lemma[0][i]; + andb << static_cast(nb); + } + hyp = andb; + }; + nb.clear(lemma.getKind()); + nb << inst->d_matched << lemma[1]; + lemma = hyp.impNode(static_cast(nb)); + Debug("rewriterules-directrr") << " -> " << lemma << std::endl; + }; + // Debug("rewriterules") << "lemma:" << lemma << std::endl; + getOutputChannel().lemma(lemma); + }else{ + Assert(!direct_rewrite); + Node lemma_lit = getValuation().ensureLiteral(equality); + ExplanationMap::const_iterator p = d_explanations.find(lemma_lit); + if(p!=d_explanations.end()) return; //Already propagated + bool value; + if(getValuation().hasSatValue(lemma_lit,value)){ + /* Already assigned */ + if (!value){ + Node conflict = substGuards(inst,cache,lemma_lit); + getOutputChannel().conflict(conflict); + }; + }else{ + getOutputChannel().propagate(lemma_lit); + d_explanations.insert(lemma_lit, *inst); + }; + }; + + if(simulateRewritting){ + static NoMatchAttribute rewrittenNodeAttribute; + // Tag the rewritted terms + for(std::vector::iterator i = rule->to_remove.begin(); + i == rule->to_remove.end(); ++i){ + (*i).setAttribute(rewrittenNodeAttribute,true); + }; + }; + + //Verify that this instantiation can't immediately fire another rule + for(RewriteRule::BodyMatch::const_iterator p = rule->body_match.begin(); + p != rule->body_match.end(); ++p){ + RewriteRule * r = (*p).second; + // Debug("rewriterules") << " rule: " << r << std::endl; + // Use trigger2 since we can be in check + Trigger & tr = r->trigger_for_body_match; + InstMatch im; + TNode m = inst->substNode(*this,(*p).first, cache); + tr.getMatch(m,im); + if(!im.empty()){ + im.d_matched = m; + addMatchRuleTrigger(r, im); + } + } +}; + + +Node TheoryRewriteRules::substGuards(const RuleInst *inst, + TCache cache, + /* Already substituted */ + Node last){ + const RewriteRule * r = inst->rule; + /** No guards */ + const size_t size = r->guards.size(); + if(size == 0) return (last.isNull()?d_true:last); + /** One guard */ + if(size == 1 && last.isNull()) return inst->substNode(*this,r->guards[0],cache); + /** Guards */ /* TODO remove the duplicate with a set like in uf? */ + NodeBuilder<> conjunction(kind::AND); + for(std::vector::const_iterator p = r->guards.begin(); + p != r->guards.end(); ++p) { + Assert(!p->isNull()); + conjunction << inst->substNode(*this,*p,cache); + }; + if (!last.isNull()) conjunction << last; + return conjunction; +} + +Node TheoryRewriteRules::explain(TNode n){ + ExplanationMap::const_iterator p = d_explanations.find(n); + Assert(p!=d_explanations.end(),"I forget the explanation..."); + RuleInst i = (*p).second; + //Notice() << n << "<-" << *(i.rule) << std::endl; + return substGuards(&i, TCache ()); +} + +Theory::PPAssertStatus TheoryRewriteRules::ppAssert(TNode in, SubstitutionMap& outSubstitutions) { + addRewriteRule(in); + return PP_ASSERT_STATUS_UNSOLVED; +} + +}/* CVC4::theory::rewriterules namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ diff --git a/src/theory/rewriterules/theory_rewriterules.h b/src/theory/rewriterules/theory_rewriterules.h new file mode 100644 index 000000000..499535687 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules.h @@ -0,0 +1,264 @@ +/********************* */ +/*! \file rewrite_engine.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: bobot + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 + ** The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Rewrite Engine classes + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_H +#define __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_H + +#include "context/cdlist.h" +#include "context/cdqueue.h" +#include "theory/valuation.h" +#include "theory/theory.h" +#include "theory/theory_engine.h" +#include "theory/quantifiers_engine.h" +#include "context/context_mm.h" +#include "theory/inst_match_impl.h" +#include "util/stats.h" +#include "theory/rewriterules/theory_rewriterules_preprocess.h" + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +typedef std::hash_map TCache; + + enum Answer {ATRUE, AFALSE, ADONTKNOW}; + + class TheoryRewriteRules; /** forward */ + + class RewriteRule{ + public: + // constant + const bool d_split; + mutable Trigger trigger; + std::vector guards; + mutable std::vector to_remove; /** terms to remove */ + const Node body; + const TNode new_terms; /** new terms included in the body */ + std::vector free_vars; /* free variable in the rule */ + std::vector inst_vars; /* corresponding vars in the triggers */ + /* After instantiating the body new match can appear (TNode + because is a subterm of a body on the assicaited rewrite + rule) */ + typedef context::CDList< std::pair > BodyMatch; + mutable BodyMatch body_match; + mutable Trigger trigger_for_body_match; // used because we can be matching + // trigger when we need new match. + // So currently we use another + // trigger for that. + + //context dependent + typedef InstMatchTrie2 CacheNode; + mutable CacheNode d_cache; + + const bool directrr; + + RewriteRule(TheoryRewriteRules & re, + Trigger & tr, Trigger & tr2, + std::vector & g, Node b, TNode nt, + std::vector & fv,std::vector & iv, + std::vector & to_r, bool drr); + RewriteRule(const RewriteRule & r) CVC4_UNUSED; + RewriteRule& operator=(const RewriteRule &) CVC4_UNUSED; + ~RewriteRule(); + + bool noGuard()const throw () { return guards.size() == 0; }; + bool inCache(TheoryRewriteRules & re, InstMatch & im)const; + + void toStream(std::ostream& out) const; + + /* statistics */ + mutable size_t nb_matched; + mutable size_t nb_applied; + mutable size_t nb_propagated; + + }; + + class RuleInst{ + public: + /** The rule has at least one guard */ + const RewriteRule* rule; + + /** the substitution */ + std::vector subst; + + /** the term matched (not null if mono-pattern and direct-rr) */ + Node d_matched; + + /** Rule an instantiation with the given match */ + RuleInst(TheoryRewriteRules & re, const RewriteRule* r, + std::vector & inst_subst, + Node matched); + RuleInst():rule(NULL){} // Dumb + + Node substNode(const TheoryRewriteRules & re, TNode r, TCache cache) const; + size_t findGuard(TheoryRewriteRules & re, size_t start)const; + + void toStream(std::ostream& out) const; + + bool alreadyRewritten(TheoryRewriteRules & re) const; + }; + +/** A pair? */ + class Guarded { + public: + /** The backtracking is done somewhere else */ + const size_t d_guard; /* the id of the guard */ + + /** The shared instantiation data */ + const RuleInst* inst; + + void nextGuard(TheoryRewriteRules & re)const; + + /** start indicate the first guard which is not true */ + Guarded(const RuleInst* ri, const size_t start); + Guarded(const Guarded & g); + /** Should be ssigned by a good garded after */ + Guarded(); + + ~Guarded(){}; + void destroy(){}; + }; + +template +class CleanUpPointer{ +public: + inline void operator()(T** e){ + delete(*e); + }; +}; + +class TheoryRewriteRules : public Theory { +private: + + KEEP_STATISTIC(TimerStat, d_theoryTime, "theory::rewriterules::theoryTime"); + + /** list of all rewrite rules */ + /* std::vector< Node > d_rules; */ + // typedef std::vector< std::pair > Rules; + typedef context::CDList< RewriteRule *, + CleanUpPointer, + std::allocator< RewriteRule * > > Rules; + Rules d_rules; + typedef context::CDList< RuleInst *, + CleanUpPointer, + std::allocator< RuleInst * > > RuleInsts; + RuleInsts d_ruleinsts; + + /** The GList* will lead too memory leaks since that doesn't use + CDChunckList */ + typedef context::CDList< Guarded > GList; + typedef context::CDHashMap GuardedMap; + GuardedMap d_guardeds; + + /* In order to not monopolize, the system slow down himself: If a + guard stored in d_guardeds become true or false, it waits + checkSlowdown(=10) checks before checking again if some guard take a + value. At FULL_EFFORT regardless of d_checkLevel it check the + guards + */ + context::CDO d_checkLevel; + + /** explanation */ + typedef context::CDHashMap ExplanationMap; + ExplanationMap d_explanations; + + /** new instantiation must be cleared at each conflict used only + inside check */ + typedef std::vector< RuleInst* > QRuleInsts; + QRuleInsts d_ruleinsts_to_add; + public: + /** true and false for predicate */ + Node d_true; + Node d_false; + + /** Constructs a new instance of TheoryRewriteRules + w.r.t. the provided context.*/ + TheoryRewriteRules(context::Context* c, + context::UserContext* u, + OutputChannel& out, + Valuation valuation, + const LogicInfo& logicInfo, + QuantifiersEngine* qe); + + /** Usual function for theories */ + void check(Theory::Effort e); + Node explain(TNode n); + void notifyEq(TNode lhs, TNode rhs); + std::string identify() const { + return "THEORY_REWRITERULES"; + } + + Theory::PPAssertStatus ppAssert(TNode in, SubstitutionMap& outSubstitutions); + + bool ppDontRewriteSubterm(TNode atom){ return true; } + + + private: + void registerQuantifier( Node n ); + + public: + /* TODO modify when notification will be available */ + void notification( Node n, bool b); + + Trigger createTrigger( TNode n, std::vector & pattern ); + + /** return if the guard (already substituted) is known true or false + or unknown. In the last case it add the Guarded(rid,gid) to the watch + list of this guard */ + Answer addWatchIfDontKnow(Node g, const RuleInst* r, const size_t gid); + + /** An instantiation of a rule is fired (all guards true) we + propagate the body. That can be done by theory propagation if + possible or by lemmas. + */ + void propagateRule(const RuleInst * r, TCache cache); + + /** Auxillary functions */ +private: + /** A guard is verify, notify the Guarded */ + void notification(GList * const lpropa, bool b); + /* If two guards becomes equals we should notify if one of them is + already true */ + bool notifyIfKnown(const GList * const ltested, GList * const lpropa); + + Node substGuards(const RuleInst * inst, + TCache cache, + Node last = Node::null()); + + void addRewriteRule(const Node r); + void computeMatchBody ( const RewriteRule * r, size_t start = 0); + void addMatchRuleTrigger(const RewriteRule* r, + InstMatch & im, bool delay = true); + + /* rewrite pattern */ + typedef std::hash_map< Node, rewriter::RRPpRewrite*, NodeHashFunction > RegisterRRPpRewrite; + RegisterRRPpRewrite d_registeredRRPpRewrite; + + bool addRewritePattern(TNode pattern, TNode body, + rewriter::Subst & pvars, + rewriter::Subst & vars); + +};/* class TheoryRewriteRules */ + +}/* CVC4::theory::rewriterules namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_H */ diff --git a/src/theory/rewriterules/theory_rewriterules_params.h b/src/theory/rewriterules/theory_rewriterules_params.h new file mode 100644 index 000000000..ecb5385f9 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules_params.h @@ -0,0 +1,95 @@ +/********************* */ +/*! \file rewrite_engine.cpp + ** \verbatim + ** Original author: bobot + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 + ** The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Parameters for the rewrite rules theory + ** + ** [[ Add lengthier description here ]] + ** \todo document this file + **/ + + +#ifndef __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_PARAMS_H +#define __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_PARAMS_H + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +/** + Specify if the propagation is done by lemma or by real theory propagation + */ +static const bool propagate_as_lemma = true; + +/** + Cache the instantiation of rules in order to remove duplicate + */ +static const bool cache_match = true; + +/** + Compute when the rules are created which terms in the body can lead + to new instantiation (try only single trigger). During propagation + we check if the instantiation of these terms are known terms. + */ +static const bool compute_opt = true; + +/** + rewrite the matching found + */ +static const bool rewrite_instantiation = true; + +/** + use the representative for the matching found + */ +static const bool representative_instantiation = false; + +/** + Wait the specified number of check after a new propagation (a + previous unknown guards becomes true) is found before verifying again the guards. + + Allow to break loop with other theories. + */ +static const size_t checkSlowdown = 10; + +/** + Use the current model to eliminate guard before asking for notification + */ +static const bool useCurrentModel = false; + +/** + Simulate rewritting by tagging rewritten terms. + */ +static const bool simulateRewritting = false; + +/** + Choose the kind of matching to use: + - InstMatchGenerator::MATCH_GEN_DEFAULT 0 + - InstMatchGenerator::MATCH_GEN_EFFICIENT_E_MATCH 1 +*/ +static const int match_gen_kind = 0; + +/** + Do narrowing at full effort +*/ +static const bool narrowing_full_effort = false; + +/** + Direct rewrite: Add rewrite rules directly in the rewriter. + */ +static const bool direct_rewrite = true; + +}/* CVC4::theory::rewriterules namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_PARAMS_H */ diff --git a/src/theory/rewriterules/theory_rewriterules_preprocess.h b/src/theory/rewriterules/theory_rewriterules_preprocess.h new file mode 100644 index 000000000..f17e30758 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules_preprocess.h @@ -0,0 +1,176 @@ +/********************* */ +/*! \file rewriterules.h + ** \verbatim + ** Original author: bobot + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief One utilitise for rewriterules definition + ** + **/ + + +#ifndef __CVC4__REWRITERULES_H +#define __CVC4__REWRITERULES_H + +#include +#include +#include +#include "expr/expr.h" +#include "expr/node.h" +#include "theory/rewriterules/theory_rewriterules_params.h" +#include "theory/uf/theory_uf.h" + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +namespace rewriter{ + + typedef Node TMPNode; + typedef std::vector Subst; + typedef std::vector ESubst; + typedef std::vector TSubst; + + struct Step{ + + /** match the node and add in Vars the found variables */ + virtual Node run(TMPNode node) = 0; + virtual bool add(TMPNode pattern, TMPNode body, Subst & pvars, Subst & vars) = 0; + }; + + struct FinalStep : Step { + Node body; + TSubst vars; + + Node subst(Subst & subst){ + return body.substitute(vars.begin(), vars.end(), + subst.begin(), subst.end()); + } + + }; + + typedef std::hash_map< Node, int, NodeHashFunction > PVars; + + struct Pattern : FinalStep{ + Node pattern; + PVars pattern_vars; + + Node run(TMPNode node){ + Subst vars = Subst(pattern_vars.size(),Node::null()); + + typedef std::vector > tstack; + tstack stack(1,std::make_pair(node,pattern)); // t * pat + + while(!stack.empty()){ + const std::pair p = stack.back(); stack.pop_back(); + const TMPNode & t = p.first; + const TMPNode & pat = p.second; + + // pat is a variable + if( pat.getKind() == kind::INST_CONSTANT || + pat.getKind() == kind::VARIABLE){ + PVars::iterator i = pattern_vars.find(pat); + Assert(i != pattern_vars.end()); + if(vars[i->second].isNull()) vars[i->second] = t; + if(vars[i->second] == t) continue; + return Node::null(); + }; + + // t is not an UF application + if( t.getKind() != kind::APPLY_UF ){ + if (t == pat) continue; + else return Node::null(); + }; + + //different UF_application + if( t.getOperator() != pat.getOperator() ) return Node::null(); + + //put the children on the stack + for( size_t i=0; i < pat.getNumChildren(); i++ ){ + stack.push_back(std::make_pair(t[i],pat[i])); + }; + } + + // Matching is done + return subst(vars); + } + + bool add(TMPNode pattern, TMPNode body, Subst & pvars, Subst & vars){ + return false; + } + + }; + + + struct Args : Step { + typedef std::vector Patterns; + Patterns d_matches; + + Node run(TMPNode node){ + Node n; + for (Patterns::iterator i = d_matches.begin(); + i != d_matches.end() && n.isNull(); ++i){ + Debug("rewriterules-rewrite") << "test?" << i->pattern << std::endl; + n = i->run(node); + } + return n; + } + + bool add(TMPNode pattern, TMPNode body, Subst & pvars, Subst & vars){ + Debug("rewriterules-rewrite") << "theoryrewrite::Args::add" << "(" + << d_matches.size() << ")" + << pattern << "->" << body << std::endl; + d_matches.push_back(Pattern()); + Pattern & p = d_matches.back(); + p.body = body; + p.vars.reserve(vars.size()); + for( size_t i=0; i < vars.size(); i++ ){ + p.vars.push_back(vars[i]); + }; + p.pattern = pattern; + for( size_t i=0; i < pvars.size(); i++ ){ + p.pattern_vars[pvars[i]] = i; + }; + return true; + }; + + void clear(){ + d_matches.clear(); + } + }; + +class RRPpRewrite : public uf::TheoryUF::PpRewrite { + Args d_pattern; +public: + Node ppRewrite(TNode node){ + Debug("rewriterules-rewrite") << "rewrite?" << node << std::endl; + Node t = d_pattern.run(node); + Debug("rewriterules-rewrite") << "rewrite:" << node + << (t.isNull()? " to": " to ") + << t << std::endl; + if (t.isNull()) return node; + else return t; + } + + bool addRewritePattern(TMPNode pattern, TMPNode body, + Subst & pvars, Subst & vars){ + return d_pattern.add(pattern,body,pvars,vars); + } + +}; + + + +} + +} +} +} +#endif /* __CVC4__REWRITERULES_H */ diff --git a/src/theory/rewriterules/theory_rewriterules_rewriter.h b/src/theory/rewriterules/theory_rewriterules_rewriter.h new file mode 100644 index 000000000..d9da095f7 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules_rewriter.h @@ -0,0 +1,104 @@ +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_REWRITER_H +#define __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_REWRITER_H + +#include "theory/rewriter.h" +#include "theory/rewriter_attributes.h" + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +class TheoryRewriterulesRewriter { +public: + + /** + * Rewrite a node into the normal form for the theory of rewriterules. + * Called in post-order (really reverse-topological order) when + * traversing the expression DAG during rewriting. This is the + * main function of the rewriter, and because of the ordering, + * it can assume its children are all rewritten already. + * + * This function can return one of three rewrite response codes + * along with the rewritten node: + * + * REWRITE_DONE indicates that no more rewriting is needed. + * REWRITE_AGAIN means that the top-level expression should be + * rewritten again, but that its children are in final form. + * REWRITE_AGAIN_FULL means that the entire returned expression + * should be rewritten again (top-down with preRewrite(), then + * bottom-up with postRewrite()). + * + * Even if this function returns REWRITE_DONE, if the returned + * expression belongs to a different theory, it will be fully + * rewritten by that theory's rewriter. + */ + static RewriteResponse postRewrite(TNode node) { + + // Implement me! + + // This default implementation + return RewriteResponse(REWRITE_DONE, node); + } + + /** + * Rewrite a node into the normal form for the theory of rewriterules + * in pre-order (really topological order)---meaning that the + * children may not be in the normal form. This is an optimization + * for theories with cancelling terms (e.g., 0 * (big-nasty-expression) + * in arithmetic rewrites to 0 without the need to look at the big + * nasty expression). Since it's only an optimization, the + * implementation here can do nothing. + */ + static RewriteResponse preRewrite(TNode node) { + // do nothing + return RewriteResponse(REWRITE_DONE, node); + } + + /** + * Rewrite an equality, in case special handling is required. + */ + static Node rewriteEquality(TNode equality) { + // often this will suffice + return postRewrite(equality).node; + } + + /** + * Initialize the rewriter. + */ + static inline void init() { + // nothing to do + } + + /** + * Shut down the rewriter. + */ + static inline void shutdown() { + // nothing to do + } + +};/* class TheoryRewriterulesRewriter */ + +}/* CVC4::theory::rewriterules namespace */ + +template<> +struct RewriteAttibute { + static Node getPreRewriteCache(TNode node) throw() { + return node; + } + + static void setPreRewriteCache(TNode node, TNode cache) throw() { } + + static Node getPostRewriteCache(TNode node) throw() { + return node; + } + + static void setPostRewriteCache(TNode node, TNode cache) throw() { } + +}; + +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_REWRITER_H */ diff --git a/src/theory/rewriterules/theory_rewriterules_rules.cpp b/src/theory/rewriterules/theory_rewriterules_rules.cpp new file mode 100644 index 000000000..9847f1727 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules_rules.cpp @@ -0,0 +1,303 @@ +/********************* */ +/*! \file rewrite_engine.cpp + ** \verbatim + ** Original author: ajreynolds + ** Major contributors: bobot + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 + ** The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief [[ Deals with rewrite rules ]] + ** + ** [[ Add lengthier description here ]] + ** \todo document this file + **/ + +#include "theory/rewriterules/theory_rewriterules_rules.h" +#include "theory/rewriterules/theory_rewriterules_params.h" +#include "theory/rewriterules/theory_rewriterules_preprocess.h" +#include "theory/rewriterules/theory_rewriterules.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::rewriterules; + + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +void TheoryRewriteRules::computeMatchBody ( const RewriteRule * rule, + size_t start){ + std::vector stack(1,rule->new_terms); + + while(!stack.empty()){ + Node t = stack.back(); stack.pop_back(); + + // We don't want to consider variable in t + if( std::find(rule->free_vars.begin(), rule->free_vars.end(), t) + != rule->free_vars.end()) continue; + // t we want to consider only UF function + if( t.getKind() == APPLY_UF ){ + for(size_t rid = start, end = d_rules.size(); rid < end; ++rid) { + RewriteRule * r = d_rules[rid]; + if(r->d_split) continue; + Trigger & tr = const_cast (r->trigger_for_body_match); + if(!tr.nonunifiable(t, rule->free_vars)){ + rule->body_match.push_back(std::make_pair(t,r)); + } + } + } + + //put the children on the stack + for( size_t i=0; i < t.getNumChildren(); i++ ){ + stack.push_back(t[i]); + }; + + } +} + +inline void addPattern(TheoryRewriteRules & re, + TNode tri, + std::vector & pattern, + std::vector & vars, + std::vector & inst_constants, + TNode r){ + if (tri.getKind() == kind::NOT && tri[0].getKind() == kind::APPLY_UF) + tri = tri[0]; + pattern.push_back(re.getQuantifiersEngine()-> + convertNodeToPattern(tri,r,vars,inst_constants)); +} + +/*** Check that triggers contains all the variables */ +void checkPatternVarsAux(TNode pat,const std::vector & vars, + std::vector & seen){ + for(size_t id=0;id < vars.size(); ++id){ + if(pat == vars[id]){ + seen[id]=true; + break; + }; + }; + for(Node::iterator i = pat.begin(); i != pat.end(); ++i) { + checkPatternVarsAux(*i,vars,seen); + }; +} + +bool checkPatternVars(const std::vector & pattern, + const std::vector & vars){ + std::vector seen(vars.size(),false); + for(std::vector::const_iterator i = pattern.begin(); + i != pattern.end(); ++i) { + checkPatternVarsAux(*i,vars,seen); + }; + return (find(seen.begin(),seen.end(),false) == seen.end()); +} + +/** Main function for construction of RewriteRule */ +void TheoryRewriteRules::addRewriteRule(const Node r) +{ + Assert(r.getKind() == kind::REWRITE_RULE); + /* Replace variables by Inst_* variable and tag the terms that + contain them */ + std::vector vars; + vars.reserve(r[0].getNumChildren()); + for( Node::const_iterator v = r[0].begin(); v != r[0].end(); ++v ){ + vars.push_back(*v); + }; + /* Instantiation version */ + std::vector inst_constants = + getQuantifiersEngine()->createInstVariable(vars); + /* Body/Remove_term/Guards/Triggers */ + Node body = r[2][1]; + TNode new_terms = r[2][1]; + std::vector guards; + std::vector pattern; + std::vector to_remove; /* "remove" the terms from the database + when fired */ + /* shortcut */ + TNode head = r[2][0]; + switch(r[2].getKind()){ + case kind::RR_REWRITE: + /* Equality */ + to_remove.push_back(head); + addPattern(*this,head,pattern,vars,inst_constants,r); + body = head.eqNode(body); + break; + case kind::RR_REDUCTION: + /** Add head to remove */ + to_remove.push_back(head); + case kind::RR_DEDUCTION: + /** Add head to guards and pattern */ + switch(head.getKind()){ + case kind::AND: + guards.reserve(head.getNumChildren()); + for(Node::iterator i = head.begin(); i != head.end(); ++i) { + guards.push_back(*i); + addPattern(*this,*i,pattern,vars,inst_constants,r); + }; + break; + default: + if (head != d_true){ + guards.push_back(head); + addPattern(*this,head,pattern,vars,inst_constants,r); + }; + /** otherwise guards is empty */ + }; + break; + default: + Unreachable("RewriteRules can be of only threee kinds"); + }; + /* Add the other guards */ + TNode g = r[1]; + switch(g.getKind()){ + case kind::AND: + guards.reserve(g.getNumChildren()); + for(Node::iterator i = g.begin(); i != g.end(); ++i) { + guards.push_back(*i); + }; + break; + default: + if (g != d_true) guards.push_back(g); + /** otherwise guards is empty */ + }; + /* Add the other triggers */ + if( r[2].getNumChildren() >= 3 ) + for(Node::iterator i = r[2][2].begin(); i != r[2][2].end(); ++i) { + // todo test during typing that its a good term (no not, atom, or term...) + addPattern(*this,(*i)[0],pattern,vars,inst_constants,r); + }; + // Assert(pattern.size() == 1, "currently only single pattern are supported"); + //Every variable must be seen in the pattern + if (!checkPatternVars(pattern,inst_constants)){ + Warning() << "The rule" << r << + " has been removed since it doesn't contain every variables." + << std::endl; + return; + } + + //Add to direct rewrite rule + bool directrr = false; + if(direct_rewrite && + ((guards.size() == 0 && r[2].getKind() == kind::RR_REWRITE) || + (guards.size() == 1 && r[2].getKind() == kind::RR_REDUCTION)) + && pattern.size() == 1){ + directrr = addRewritePattern(pattern[0],new_terms, inst_constants, vars); + } + + // final construction + Trigger trigger = createTrigger(r,pattern); + Trigger trigger2 = createTrigger(r,pattern); //Hack + RewriteRule * rr = new RewriteRule(*this, trigger, trigger2, + guards, body, new_terms, + vars, inst_constants, to_remove, + directrr); + /** other -> rr */ + if(compute_opt && !rr->d_split) computeMatchBody(rr); + d_rules.push_back(rr); + /** rr -> all (including himself) */ + if(compute_opt && !rr->d_split) + for(size_t rid = 0, end = d_rules.size(); rid < end; ++rid) + computeMatchBody(d_rules[rid], + d_rules.size() - 1); + + Debug("rewriterules") << "created rewriterule"<< (rr->d_split?"(split)":"") << ":(" << d_rules.size() - 1 << ")" + << *rr << std::endl; + +} + + +bool willDecide(TNode node, bool positive = true){ + /* TODO something better */ + switch(node.getKind()) { + case AND: + return !positive; + case OR: + return positive; + case IFF: + return true; + case XOR: + return true; + case IMPLIES: + return false; + case ITE: + return true; + case NOT: + return willDecide(node[0],!positive); + default: + return false; + } +} + + +RewriteRule::RewriteRule(TheoryRewriteRules & re, + Trigger & tr, Trigger & tr2, + std::vector & g, Node b, TNode nt, + std::vector & fv,std::vector & iv, + std::vector & to_r, bool drr) : + d_split(willDecide(b)), + trigger(tr), body(b), new_terms(nt), free_vars(), inst_vars(), + body_match(re.getSatContext()),trigger_for_body_match(tr2), + d_cache(re.getSatContext(),re.getQuantifiersEngine()), directrr(drr){ + free_vars.swap(fv); inst_vars.swap(iv); guards.swap(g); to_remove.swap(to_r); +}; + + +bool RewriteRule::inCache(TheoryRewriteRules & re, InstMatch & im)const{ + return !d_cache.addInstMatch(im); +}; + +/** A rewrite rule */ +void RewriteRule::toStream(std::ostream& out) const{ + for(std::vector::const_iterator + iter = guards.begin(); iter != guards.end(); ++iter){ + out << *iter; + }; + out << "=>" << body << std::endl; + out << "["; + for(BodyMatch::const_iterator + iter = body_match.begin(); iter != body_match.end(); ++iter){ + out << (*iter).first << "(" << (*iter).second << ")" << ","; + }; + out << "]" << (directrr?"*":"") << std::endl; +} + +RewriteRule::~RewriteRule(){ + Debug("rewriterule-stats") << *this + << " (" << nb_matched + << "," << nb_applied + << "," << nb_propagated + << ")" << std::endl; +} + +bool TheoryRewriteRules::addRewritePattern(TNode pattern, TNode body, + rewriter::Subst & pvars, + rewriter::Subst & vars){ + Assert(pattern.getKind() == kind::APPLY_UF); + TNode op = pattern.getOperator(); + TheoryRewriteRules::RegisterRRPpRewrite::iterator i = + d_registeredRRPpRewrite.find(op); + + rewriter::RRPpRewrite * p; + if (i == d_registeredRRPpRewrite.end()){ + p = new rewriter::RRPpRewrite(); + d_registeredRRPpRewrite.insert(std::make_pair(op,p)); + ((uf::TheoryUF*)getQuantifiersEngine()->getTheoryEngine()->getTheory( THEORY_UF ))-> + registerPpRewrite(op,p); + } else p = i->second; + + return p->addRewritePattern(pattern,body,pvars,vars); + +} + + +}/* CVC4::theory::rewriterules namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ diff --git a/src/theory/rewriterules/theory_rewriterules_rules.h b/src/theory/rewriterules/theory_rewriterules_rules.h new file mode 100644 index 000000000..a8e70f3e6 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules_rules.h @@ -0,0 +1,40 @@ +/********************* */ +/*! \file rewrite_engine.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: bobot + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 + ** The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Rewrite Engine classes + **/ + + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_RULES_H +#define __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_RULES_H + +#include "theory/rewriterules/theory_rewriterules.h" +#include "theory/rewriterules/theory_rewriterules_params.h" + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +inline std::ostream& operator <<(std::ostream& stream, const RewriteRule& r) { + r.toStream(stream); + return stream; +} + +}/* CVC4::theory::rewriterules namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_RULES_H */ diff --git a/src/theory/rewriterules/theory_rewriterules_type_rules.h b/src/theory/rewriterules/theory_rewriterules_type_rules.h new file mode 100644 index 000000000..5a0e8c5e0 --- /dev/null +++ b/src/theory/rewriterules/theory_rewriterules_type_rules.h @@ -0,0 +1,98 @@ +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_TYPE_RULES_H +#define __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_TYPE_RULES_H + +#include "node_manager.h" + +namespace CVC4 { +namespace theory { +namespace rewriterules { + +class RewriteRuleTypeRule { +public: + + /** + * Compute the type for (and optionally typecheck) a term belonging + * to the theory of rewriterules. + * + * @param check if true, the node's type should be checked as well + * as computed. + */ + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, + bool check) + throw(TypeCheckingExceptionPrivate) { + Debug("typecheck-r") << "type check for rr " << n << std::endl; + Assert(n.getKind() == kind::REWRITE_RULE && n.getNumChildren()==3 ); + if( check ){ + if( n[ 0 ].getType(check)!=nodeManager->boundVarListType() ){ + throw TypeCheckingExceptionPrivate(n, + "first argument of rewrite rule is not bound var list"); + } + if( n[ 1 ].getType(check)!=nodeManager->booleanType() ){ + throw TypeCheckingExceptionPrivate(n, + "guard of rewrite rule is not an actual guard"); + } + if( n[2].getType(check) != + TypeNode(nodeManager->mkTypeConst(RRHB_TYPE))){ + throw TypeCheckingExceptionPrivate(n, + "not a correct rewrite rule"); + } + } + return nodeManager->booleanType(); + } +};/* class RewriterulesTypeRule */ + + +class RRRewriteTypeRule { +public: + + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Assert(n.getKind() == kind::RR_REWRITE ); + if( check ){ + if( n[0].getType(check)!=n[1].getType(check) ){ + throw TypeCheckingExceptionPrivate(n, + "terms of rewrite rule are not equal"); + } + if( n.getNumChildren() == 3 && n[2].getType(check)!=nodeManager->instPatternListType() ){ + throw TypeCheckingExceptionPrivate(n, "third argument of rewrite rule is not instantiation pattern list"); + } + if( n[0].getKind()!=kind::APPLY_UF ){ + throw TypeCheckingExceptionPrivate(n[0], "head of rewrite rules must start with an uninterpreted symbols. If you want to write a propagation rule, add the guard [true] for disambiguation"); + } + } + return TypeNode(nodeManager->mkTypeConst(RRHB_TYPE)); + } +};/* struct QuantifierReductionRuleRule */ + +class RRRedDedTypeRule { +public: + + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + Assert(n.getKind() == kind::RR_REDUCTION || + n.getKind() == kind::RR_DEDUCTION ); + if( check ){ + if( n[ 0 ].getType(check)!=nodeManager->booleanType() ){ + throw TypeCheckingExceptionPrivate(n, "head of reduction rule is not boolean"); + } + if( n[ 1 ].getType(check)!=nodeManager->booleanType() ){ + throw TypeCheckingExceptionPrivate(n, "body of reduction rule is not boolean"); + } + if( n.getNumChildren() == 3 && n[2].getType(check)!=nodeManager->instPatternListType() ){ + throw TypeCheckingExceptionPrivate(n, "third argument of rewrite rule is not instantiation pattern list"); + } + if( n.getNumChildren() < 3 && n[ 0 ] == nodeManager->mkConst(true) ){ + throw TypeCheckingExceptionPrivate(n, "A rewrite rule must have one head or one trigger at least"); + } + } + return TypeNode(nodeManager->mkTypeConst(RRHB_TYPE)); + } +};/* struct QuantifierReductionRuleRule */ + +}/* CVC4::theory::rewriterules namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY__REWRITERULES__THEORY_REWRITERULES_TYPE_RULES_H */ diff --git a/src/theory/shared_terms_database.cpp b/src/theory/shared_terms_database.cpp index b081e27ef..98ab3f10d 100644 --- a/src/theory/shared_terms_database.cpp +++ b/src/theory/shared_terms_database.cpp @@ -52,7 +52,7 @@ void SharedTermsDatabase::addEqualityToPropagate(TNode equality) { void SharedTermsDatabase::addSharedTerm(TNode atom, TNode term, Theory::Set theories) { - Debug("register") << "SharedTermsDatabase::addSharedTerm(" << atom << ", " << term << ", " << Theory::setToString(theories) << ")" << std::endl; + Debug("register") << "SharedTermsDatabase::addSharedTerm(" << atom << ", " << term << ", " << Theory::setToString(theories) << ")" << std::endl; std::pair search_pair(atom, term); SharedTermsTheoriesMap::iterator find = d_termsToTheories.find(search_pair); @@ -64,18 +64,18 @@ void SharedTermsDatabase::addSharedTerm(TNode atom, TNode term, Theory::Set theo d_termsToTheories[search_pair] = theories; } else { Assert(theories != (*find).second); - d_termsToTheories[search_pair] = Theory::setUnion(theories, (*find).second); + d_termsToTheories[search_pair] = Theory::setUnion(theories, (*find).second); } } SharedTermsDatabase::shared_terms_iterator SharedTermsDatabase::begin(TNode atom) const { Assert(hasSharedTerms(atom)); - return d_atomsToTerms.find(atom)->second.begin(); + return d_atomsToTerms.find(atom)->second.begin(); } SharedTermsDatabase::shared_terms_iterator SharedTermsDatabase::end(TNode atom) const { Assert(hasSharedTerms(atom)); - return d_atomsToTerms.find(atom)->second.end(); + return d_atomsToTerms.find(atom)->second.end(); } bool SharedTermsDatabase::hasSharedTerms(TNode atom) const { @@ -89,24 +89,24 @@ void SharedTermsDatabase::backtrack() { list.pop_back(); if (list.empty()) { d_atomsToTerms.erase(atom); - } + } } d_addedSharedTerms.resize(d_addedSharedTermsSize); } Theory::Set SharedTermsDatabase::getTheoriesToNotify(TNode atom, TNode term) const { - // Get the theories that share this term from this atom + // Get the theories that share this term from this atom std::pair search_pair(atom, term); SharedTermsTheoriesMap::iterator find = d_termsToTheories.find(search_pair); - Assert(find != d_termsToTheories.end()); - + Assert(find != d_termsToTheories.end()); + // Get the theories that were already notified Theory::Set alreadyNotified = 0; AlreadyNotifiedMap::iterator theoriesFind = d_alreadyNotifiedMap.find(term); if (theoriesFind != d_alreadyNotifiedMap.end()) { alreadyNotified = (*theoriesFind).second; } - + // Return the ones that haven't been notified yet return Theory::setDifference((*find).second, alreadyNotified); } diff --git a/src/theory/shared_terms_database.h b/src/theory/shared_terms_database.h index fccd2e6bc..c7da8a463 100644 --- a/src/theory/shared_terms_database.h +++ b/src/theory/shared_terms_database.h @@ -2,7 +2,7 @@ /*! \file node_visitor.h ** \verbatim ** Original author: dejan - ** Major contributors: + ** Major contributors: ** Minor contributors (to current version): ** This file is part of the CVC4 prototype. ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) @@ -40,7 +40,7 @@ private: /** The context */ context::Context* d_context; - + /** Some statistics */ IntStat d_statSharedTerms; @@ -49,13 +49,13 @@ private: /** A map from atoms to a list of shared terms */ SharedTermsMap d_atomsToTerms; - + /** Each time we add a shared term, we add it's parent to this list */ std::vector d_addedSharedTerms; - + /** Context-dependent size of the d_addedSharedTerms list */ context::CDO d_addedSharedTermsSize; - + /** A map from atoms and subterms to the theories that use it */ typedef context::CDHashMap, theory::Theory::Set, TNodePairHashFunction> SharedTermsTheoriesMap; SharedTermsTheoriesMap d_termsToTheories; @@ -95,6 +95,11 @@ private: void eqNotifyConstantTermMerge(TNode t1, TNode t2) { d_sharedTerms.conflict(t1, t2, true); } + + void eqNotifyNewClass(TNode t) { } + void eqNotifyPreMerge(TNode t1, TNode t2) { } + void eqNotifyPostMerge(TNode t1, TNode t2) { } + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { } }; /** The notify class for d_equalityEngine */ @@ -147,7 +152,7 @@ public: SharedTermsDatabase(TheoryEngine* theoryEngine, context::Context* context); ~SharedTermsDatabase() throw(AssertionException); - + /** * Asserts the equality to the shared terms database, */ @@ -185,12 +190,12 @@ public: bool hasSharedTerms(TNode atom) const; /** - * Iterator pointing to the first shared term belonging to the given atom. + * Iterator pointing to the first shared term belonging to the given atom. */ shared_terms_iterator begin(TNode atom) const; /** - * Iterator pointing to the end of the list of shared terms belonging to the given atom. + * Iterator pointing to the end of the list of shared terms belonging to the given atom. */ shared_terms_iterator end(TNode atom) const; diff --git a/src/theory/term_registration_visitor.cpp b/src/theory/term_registration_visitor.cpp index 22b87c32f..b0b712356 100644 --- a/src/theory/term_registration_visitor.cpp +++ b/src/theory/term_registration_visitor.cpp @@ -2,10 +2,10 @@ /*! \file term_registration_visitor.h ** \verbatim ** Original author: dejan - ** Major contributors: - ** Minor contributors (to current version): + ** Major contributors: none + ** Minor contributors (to current version): none ** This file is part of the CVC4 prototype. - ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Copyright (c) 2009-2012 The Analysis of Computer Systems Group (ACSys) ** Courant Institute of Mathematical Sciences ** New York University ** See the file COPYING in the top-level source directory for licensing @@ -32,6 +32,14 @@ bool PreRegisterVisitor::alreadyVisited(TNode current, TNode parent) { Debug("register::internal") << "PreRegisterVisitor::alreadyVisited(" << current << "," << parent << ")" << std::endl; + if( ( parent.getKind() == kind::FORALL || + parent.getKind() == kind::EXISTS || + parent.getKind() == kind::REWRITE_RULE ) && + current != parent ) { + Debug("register::internal") << "quantifier:true" << std::endl; + return true; + } + TheoryId currentTheoryId = Theory::theoryOf(current); TheoryId parentTheoryId = Theory::theoryOf(parent); @@ -89,13 +97,21 @@ void PreRegisterVisitor::visit(TNode current, TNode parent) { if (!Theory::setContains(currentTheoryId, visitedTheories)) { visitedTheories = Theory::setInsert(currentTheoryId, visitedTheories); d_visited[current] = visitedTheories; - d_engine->theoryOf(currentTheoryId)->preRegisterTerm(current); + Theory* th = d_engine->theoryOf(currentTheoryId); + th->preRegisterTerm(current); + if(th->getInstantiator() != NULL) { + th->getInstantiator()->preRegisterTerm(current); + } Debug("register::internal") << "PreRegisterVisitor::visit(" << current << "," << parent << "): adding " << currentTheoryId << std::endl; } if (!Theory::setContains(parentTheoryId, visitedTheories)) { visitedTheories = Theory::setInsert(parentTheoryId, visitedTheories); d_visited[current] = visitedTheories; - d_engine->theoryOf(parentTheoryId)->preRegisterTerm(current); + Theory* th = d_engine->theoryOf(parentTheoryId); + th->preRegisterTerm(current); + if(th->getInstantiator() != NULL) { + th->getInstantiator()->preRegisterTerm(current); + } Debug("register::internal") << "PreRegisterVisitor::visit(" << current << "," << parent << "): adding " << parentTheoryId << std::endl; } if (useType) { @@ -103,7 +119,11 @@ void PreRegisterVisitor::visit(TNode current, TNode parent) { if (!Theory::setContains(typeTheoryId, visitedTheories)) { visitedTheories = Theory::setInsert(typeTheoryId, visitedTheories); d_visited[current] = visitedTheories; - d_engine->theoryOf(typeTheoryId)->preRegisterTerm(current); + Theory* th = d_engine->theoryOf(typeTheoryId); + th->preRegisterTerm(current); + if(th->getInstantiator() != NULL) { + th->getInstantiator()->preRegisterTerm(current); + } Debug("register::internal") << "PreRegisterVisitor::visit(" << current << "," << parent << "): adding " << parentTheoryId << std::endl; } } @@ -135,6 +155,13 @@ bool SharedTermsVisitor::alreadyVisited(TNode current, TNode parent) const { Debug("register::internal") << "SharedTermsVisitor::alreadyVisited(" << current << "," << parent << ")" << std::endl; + if( ( parent.getKind() == kind::FORALL || + parent.getKind() == kind::EXISTS || + parent.getKind() == kind::REWRITE_RULE) && + current != parent ) { + Debug("register::internal") << "quantifier:true" << std::endl; + return true; + } TNodeVisitedMap::const_iterator find = d_visited.find(current); // If node is not visited at all, just return false diff --git a/src/theory/theory.cpp b/src/theory/theory.cpp index 1ed1f99ff..7555282d8 100644 --- a/src/theory/theory.cpp +++ b/src/theory/theory.cpp @@ -18,6 +18,8 @@ #include "theory/theory.h" #include "util/Assert.h" +#include "theory/quantifiers_engine.h" +#include "theory/instantiator_default.h" #include @@ -37,21 +39,32 @@ std::ostream& operator<<(std::ostream& os, Theory::Effort level){ os << "EFFORT_FULL"; break; case Theory::EFFORT_COMBINATION: os << "EFFORT_COMBINATION"; break; + case Theory::EFFORT_LAST_CALL: + os << "EFFORT_LAST_CALL"; break; default: Unreachable(); } return os; }/* ostream& operator<<(ostream&, Theory::Effort) */ +Theory::~Theory() { + if(d_inst != NULL) { + delete d_inst; + d_inst = NULL; + } + + StatisticsRegistry::unregisterStat(&d_computeCareGraphTime); +} + void Theory::addSharedTermInternal(TNode n) { - Debug("sharing") << "Theory::addSharedTerm<" << getId() << ">(" << n << ")" << std::endl; - Debug("theory::assertions") << "Theory::addSharedTerm<" << getId() << ">(" << n << ")" << std::endl; + Debug("sharing") << "Theory::addSharedTerm<" << getId() << ">(" << n << ")" << endl; + Debug("theory::assertions") << "Theory::addSharedTerm<" << getId() << ">(" << n << ")" << endl; d_sharedTerms.push_back(n); addSharedTerm(n); } void Theory::computeCareGraph() { - Debug("sharing") << "Theory::computeCareGraph<" << getId() << ">()" << std::endl; + Debug("sharing") << "Theory::computeCareGraph<" << getId() << ">()" << endl; for (unsigned i = 0; i < d_sharedTerms.size(); ++ i) { TNode a = d_sharedTerms[i]; TypeNode aType = a.getType(); @@ -71,7 +84,7 @@ void Theory::computeCareGraph() { addCarePair(a, b); break; } - } + } } } @@ -85,8 +98,97 @@ void Theory::printFacts(std::ostream& os) const { } void Theory::debugPrintFacts() const{ - cout << "Theory::debugPrintFacts()" << endl; - printFacts(cout); + DebugChannel.getStream() << "Theory::debugPrintFacts()" << endl; + printFacts(DebugChannel.getStream()); +} + +Instantiator::Instantiator(context::Context* c, QuantifiersEngine* qe, Theory* th) : + d_quantEngine(qe), + d_th(th) { +} + +Instantiator::~Instantiator() { +} + +void Instantiator::resetInstantiationRound(Theory::Effort effort) { + for(int i = 0; i < (int) d_instStrategies.size(); ++i) { + if(isActiveStrategy(d_instStrategies[i])) { + d_instStrategies[i]->resetInstantiationRound(effort); + } + } + processResetInstantiationRound(effort); +} + +int Instantiator::doInstantiation(Node f, Theory::Effort effort, int e, int limitInst) { + if(hasConstraintsFrom(f)) { + int origLemmas = d_quantEngine->getNumLemmasWaiting(); + int status = process(f, effort, e, limitInst); + if(limitInst <= 0 || (d_quantEngine->getNumLemmasWaiting()-origLemmas) < limitInst) { + if(d_instStrategies.empty()) { + Debug("inst-engine-inst") << "There are no instantiation strategies allocated." << endl; + } else { + for(int i = 0; i < (int) d_instStrategies.size(); ++i) { + if(isActiveStrategy(d_instStrategies[i])) { + Debug("inst-engine-inst") << d_instStrategies[i]->identify() << " process " << effort << endl; + //call the instantiation strategy's process method + int s_limitInst = limitInst > 0 ? limitInst - (d_quantEngine->getNumLemmasWaiting() - origLemmas) : 0; + int s_status = d_instStrategies[i]->doInstantiation(f, effort, e, s_limitInst); + Debug("inst-engine-inst") << " -> status is " << s_status << endl; + if(limitInst > 0 && (d_quantEngine->getNumLemmasWaiting() - origLemmas) >= limitInst) { + Assert( (d_quantEngine->getNumLemmasWaiting() - origLemmas) == limitInst ); + i = (int) d_instStrategies.size(); + status = InstStrategy::STATUS_UNKNOWN; + } else { + InstStrategy::updateStatus(status, s_status); + } + } else { + Debug("inst-engine-inst") << d_instStrategies[i]->identify() << " is not active." << endl; + } + } + } + } + return status; + } else { + Debug("inst-engine-inst") << "We have no constraints from this quantifier." << endl; + return InstStrategy::STATUS_SAT; + } +} + +//void Instantiator::doInstantiation(int effort) { +// d_status = InstStrategy::STATUS_SAT; +// for( int q = 0; q < d_quantEngine->getNumQuantifiers(); ++q ) { +// Node f = d_quantEngine->getQuantifier(q); +// if( d_quantEngine->getActive(f) && hasConstraintsFrom(f) ) { +// int d_quantStatus = process( f, effort ); +// InstStrategy::updateStatus( d_status, d_quantStatus ); +// for( int i = 0; i < (int)d_instStrategies.size(); ++i ) { +// if( isActiveStrategy( d_instStrategies[i] ) ) { +// Debug("inst-engine-inst") << d_instStrategies[i]->identify() << " process " << effort << endl; +// //call the instantiation strategy's process method +// d_quantStatus = d_instStrategies[i]->process( f, effort ); +// Debug("inst-engine-inst") << " -> status is " << d_quantStatus << endl; +// InstStrategy::updateStatus( d_status, d_quantStatus ); +// } +// } +// } +// } +//} + +void Instantiator::setHasConstraintsFrom(Node f) { + d_hasConstraints[f] = true; + if(! d_quantEngine->hasOwner(f)) { + d_quantEngine->setOwner(f, getTheory()); + } else if(d_quantEngine->getOwner(f) != getTheory()) { + d_quantEngine->setOwner(f, NULL); + } +} + +bool Instantiator::hasConstraintsFrom(Node f) { + return d_hasConstraints.find(f) != d_hasConstraints.end() && d_hasConstraints[f]; +} + +bool Instantiator::isOwnerOf(Node f) { + return d_quantEngine->hasOwner(f) && d_quantEngine->getOwner(f) == getTheory(); } }/* CVC4::theory namespace */ diff --git a/src/theory/theory.h b/src/theory/theory.h index 020a2b194..8c830f8a2 100644 --- a/src/theory/theory.h +++ b/src/theory/theory.h @@ -46,6 +46,10 @@ class TheoryEngine; namespace theory { +class Instantiator; +class InstStrategy; +class QuantifiersEngine; + /** * Information about an assertion for the theories. */ @@ -72,7 +76,8 @@ struct Assertion { operator Node () const { return assertion; } -}; + +};/* struct Assertion */ /** * A (oredered) pair of terms a theory cares about. @@ -84,7 +89,7 @@ struct CarePair { public: - CarePair(TNode a, TNode b, TheoryId theory) + CarePair(TNode a, TNode b, TheoryId theory) : a(a < b ? a : b), b(a < b ? b : a), theory(theory) {} bool operator == (const CarePair& other) const { @@ -99,7 +104,7 @@ public: return b < other.b; } -}; +};/* struct CarePair */ /** * A set of care pairs. @@ -172,6 +177,18 @@ private: */ CareGraph* d_careGraph; + /** + * Reference to the quantifiers engine (or NULL, if quantifiers are + * not supported or not enabled). + */ + QuantifiersEngine* d_quantEngine; + + /** + * The instantiator for this theory, or NULL if quantifiers are not + * supported or not enabled. + */ + Instantiator* d_inst; + // === STATISTICS === /** time spent in theory combination */ TimerStat d_computeCareGraphTime; @@ -182,6 +199,12 @@ private: return ss.str(); } + /** + * Construct and return the instantiator for the given theory. + * If there is no instantiator class, NULL is returned. + */ + theory::Instantiator* makeInstantiator(context::Context* c, theory::QuantifiersEngine* qe); + protected: /** @@ -208,7 +231,7 @@ protected: * Construct a Theory. */ Theory(TheoryId id, context::Context* satContext, context::UserContext* userContext, - OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) throw() + OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) throw() : d_id(id) , d_satContext(satContext) , d_userContext(userContext) @@ -217,6 +240,8 @@ protected: , d_factsHead(satContext, 0) , d_sharedTermsIndex(satContext, 0) , d_careGraph(0) + , d_quantEngine(qe) + , d_inst(makeInstantiator(satContext, qe)) , d_computeCareGraphTime(statName(id, "computeCareGraphTime")) , d_sharedTerms(satContext) , d_out(&out) @@ -252,19 +277,7 @@ protected: * * @return the next assertion in the assertFact() queue */ - Assertion get() { - Assert( !done(), "Theory`() called with assertion queue empty!" ); - - // Get the assertion - Assertion fact = d_facts[d_factsHead]; - d_factsHead = d_factsHead + 1; - Trace("theory") << "Theory::get() => " << fact << " (" << d_facts.size() - d_factsHead << " left)" << std::endl; - if(Dump.isOn("state")) { - Dump("state") << AssertCommand(fact.assertion.toExpr()); - } - - return fact; - } + inline Assertion get(); const LogicInfo& getLogicInfo() const { return d_logicInfo; @@ -348,13 +361,9 @@ public: } /** - * Destructs a Theory. This implementation does nothing, but we - * need a virtual destructor for safety in case subclasses have a - * destructor. + * Destructs a Theory. */ - virtual ~Theory() { - StatisticsRegistry::unregisterStat(&d_computeCareGraphTime); - } + virtual ~Theory(); /** * Subclasses of Theory may add additional efforts. DO NOT CHECK @@ -376,7 +385,11 @@ public: * Combination effort means that the individual theories are already satisfied, and * it is time to put some effort into propagation of shared term equalities */ - EFFORT_COMBINATION = 150 + EFFORT_COMBINATION = 150, + /** + * Last call effort, reserved for quantifiers. + */ + EFFORT_LAST_CALL = 200 };/* enum Effort */ static inline bool standardEffortOrMore(Effort e) CVC4_CONST_FUNCTION @@ -385,7 +398,7 @@ public: { return e >= EFFORT_STANDARD && e < EFFORT_FULL; } static inline bool fullEffort(Effort e) CVC4_CONST_FUNCTION { return e == EFFORT_FULL; } - static inline bool combination(Effort e) CVC4_CONST_FUNCTION + static inline bool combination(Effort e) CVC4_CONST_FUNCTION { return e == EFFORT_COMBINATION; } /** @@ -423,6 +436,41 @@ public: return *d_out; } + /** + * Get the valuation associated to this theory. + */ + Valuation& getValuation() { + return d_valuation; + } + + /** + * Get the quantifiers engine associated to this theory. + */ + QuantifiersEngine* getQuantifiersEngine() { + return d_quantEngine; + } + + /** + * Get the quantifiers engine associated to this theory (const version). + */ + const QuantifiersEngine* getQuantifiersEngine() const { + return d_quantEngine; + } + + /** + * Get the theory instantiator. + */ + Instantiator* getInstantiator() { + return d_inst; + } + + /** + * Get the theory instantiator (const version). + */ + const Instantiator* getInstantiator() const { + return d_inst; + } + /** * Pre-register a term. Done one time for a Node, ever. */ @@ -455,7 +503,7 @@ public: } /** - * Return the status of two terms in the current context. Should be implemented in + * Return the status of two terms in the current context. Should be implemented in * sub-theories to enable more efficient theory-combination. */ virtual EqualityStatus getEqualityStatus(TNode a, TNode b) { return EQUALITY_UNKNOWN; } @@ -572,6 +620,11 @@ public: */ virtual Node ppRewrite(TNode atom) { return atom; } + /** + * Don't preprocess subterm of this term + */ + virtual bool ppDontRewriteSubterm(TNode atom) { return false; } + /** * A Theory is called with presolve exactly one time per user * check-sat. presolve() is called after preregistration, @@ -664,7 +717,7 @@ public: static inline Set setIntersection(Set a, Set b) { return a & b; - } + } static inline Set setUnion(Set a, Set b) { return a | b; @@ -735,6 +788,84 @@ public: std::ostream& operator<<(std::ostream& os, Theory::Effort level); +class Instantiator { + friend class QuantifiersEngine; +protected: + /** reference to the quantifiers engine */ + QuantifiersEngine* d_quantEngine; + /** reference to the theory that it looks at */ + Theory* d_th; + /** instantiation strategies */ + std::vector< InstStrategy* > d_instStrategies; + /** instantiation strategies active */ + std::map< InstStrategy*, bool > d_instStrategyActive; + /** has constraints from quantifier */ + std::map< Node, bool > d_hasConstraints; + /** is instantiation strategy active */ + bool isActiveStrategy( InstStrategy* is ) { + return d_instStrategyActive.find( is )!=d_instStrategyActive.end() && d_instStrategyActive[is]; + } + /** add inst strategy */ + void addInstStrategy( InstStrategy* is ){ + d_instStrategies.push_back( is ); + d_instStrategyActive[is] = true; + } + /** reset instantiation round */ + virtual void processResetInstantiationRound( Theory::Effort effort ) = 0; + /** process quantifier */ + virtual int process( Node f, Theory::Effort effort, int e, int limitInst = 0 ) = 0; +public: + /** set has constraints from quantifier f */ + void setHasConstraintsFrom( Node f ); + /** has constraints from */ + bool hasConstraintsFrom( Node f ); + /** is full owner of quantifier f? */ + bool isOwnerOf( Node f ); +public: + Instantiator(context::Context* c, QuantifiersEngine* qe, Theory* th); + virtual ~Instantiator(); + + /** get quantifiers engine */ + QuantifiersEngine* getQuantifiersEngine() { return d_quantEngine; } + /** get corresponding theory for this instantiator */ + Theory* getTheory() { return d_th; } + /** Pre-register a term. */ + virtual void preRegisterTerm( Node t ) { } + /** assertNode function, assertion was asserted to theory */ + virtual void assertNode( Node assertion ){} + /** reset instantiation round */ + void resetInstantiationRound( Theory::Effort effort ); + /** do instantiation method*/ + int doInstantiation( Node f, Theory::Effort effort, int e, int limitInst = 0 ); + /** identify */ + virtual std::string identify() const { return std::string("Unknown"); } + /** print debug information */ + virtual void debugPrint( const char* c ) {} + /** get status */ + //int getStatus() { return d_status; } +};/* class Instantiator */ + +inline Assertion Theory::get() { + Assert( !done(), "Theory::get() called with assertion queue empty!" ); + + // Get the assertion + Assertion fact = d_facts[d_factsHead]; + d_factsHead = d_factsHead + 1; + + Trace("theory") << "Theory::get() => " << fact << " (" << d_facts.size() - d_factsHead << " left)" << std::endl; + + if(Dump.isOn("state")) { + Dump("state") << AssertCommand(fact.assertion.toExpr()); + } + + // if quantifiers are turned on and we have an instantiator, notify it + if(getLogicInfo().isQuantified() && getInstantiator() != NULL) { + getInstantiator()->assertNode(fact); + } + + return fact; +} + }/* CVC4::theory namespace */ inline std::ostream& operator<<(std::ostream& out, diff --git a/src/theory/theory_engine.cpp b/src/theory/theory_engine.cpp index 97c17222c..7ea9e063e 100644 --- a/src/theory/theory_engine.cpp +++ b/src/theory/theory_engine.cpp @@ -32,6 +32,9 @@ #include "util/node_visitor.h" #include "util/ite_removal.h" +#include "theory/quantifiers_engine.h" +#include "theory/quantifiers/theory_quantifiers.h" + using namespace std; using namespace CVC4; @@ -46,6 +49,7 @@ TheoryEngine::TheoryEngine(context::Context* context, d_userContext(userContext), d_logicInfo(logicInfo), d_sharedTerms(this, context), + d_quantEngine(NULL), d_ppCache(), d_possiblePropagations(context), d_hasPropagated(context), @@ -69,6 +73,10 @@ TheoryEngine::TheoryEngine(context::Context* context, d_theoryTable[theoryId] = NULL; d_theoryOut[theoryId] = NULL; } + + // initialize the quantifiers engine + d_quantEngine = new QuantifiersEngine(context, this); + Rewriter::init(); StatisticsRegistry::registerStat(&d_combineTheoriesTime); d_true = NodeManager::currentNM()->mkConst(true); @@ -85,6 +93,8 @@ TheoryEngine::~TheoryEngine() { } } + delete d_quantEngine; + StatisticsRegistry::unregisterStat(&d_combineTheoriesTime); } @@ -320,6 +330,22 @@ void TheoryEngine::check(Theory::Effort effort) { } } + // Must consult quantifiers theory for last call to ensure sat, or otherwise add a lemma + if( effort == Theory::EFFORT_FULL && + d_logicInfo.isQuantified() && + ! d_inConflict && + ! d_lemmasAdded ) { + ((theory::quantifiers::TheoryQuantifiers*) d_theoryTable[THEORY_QUANTIFIERS])->performCheck(Theory::EFFORT_LAST_CALL); + // if we have given up, then possibly flip decision + if(Options::current()->flipDecision) { + if(d_incomplete && !d_inConflict && !d_lemmasAdded) { + if( ((theory::quantifiers::TheoryQuantifiers*) d_theoryTable[THEORY_QUANTIFIERS])->flipDecision() ) { + d_incomplete = false; + } + } + } + } + Debug("theory") << "TheoryEngine::check(" << effort << "): done, we are " << (d_inConflict ? "unsat" : "sat") << (d_lemmasAdded ? " with new lemmas" : " with no new lemmas") << std::endl; } catch(const theory::Interrupted&) { @@ -596,7 +622,7 @@ void TheoryEngine::shutdown() { // Shutdown all the theories for(TheoryId theoryId = theory::THEORY_FIRST; theoryId < theory::THEORY_LAST; ++theoryId) { if(d_theoryTable[theoryId]) { - theoryOf(static_cast(theoryId))->shutdown(); + theoryOf(theoryId)->shutdown(); } } @@ -624,15 +650,21 @@ Node TheoryEngine::ppTheoryRewrite(TNode term) return theoryOf(term)->ppRewrite(term); } Trace("theory-pp") << "ppTheoryRewrite { " << term << endl; - NodeBuilder<> newNode(term.getKind()); - if (term.getMetaKind() == kind::metakind::PARAMETERIZED) { - newNode << term.getOperator(); - } - unsigned i; - for (i = 0; i < nc; ++i) { - newNode << ppTheoryRewrite(term[i]); + + Node newTerm; + if (theoryOf(term)->ppDontRewriteSubterm(term)) { + newTerm = term; + } else { + NodeBuilder<> newNode(term.getKind()); + if (term.getMetaKind() == kind::metakind::PARAMETERIZED) { + newNode << term.getOperator(); + } + unsigned i; + for (i = 0; i < nc; ++i) { + newNode << ppTheoryRewrite(term[i]); + } + newTerm = Rewriter::rewrite(Node(newNode)); } - Node newTerm = Rewriter::rewrite(Node(newNode)); Node newTerm2 = theoryOf(newTerm)->ppRewrite(newTerm); if (newTerm != newTerm2) { newTerm = ppTheoryRewrite(Rewriter::rewrite(newTerm2)); diff --git a/src/theory/theory_engine.h b/src/theory/theory_engine.h index ed95149b3..ff7648843 100644 --- a/src/theory/theory_engine.h +++ b/src/theory/theory_engine.h @@ -72,6 +72,10 @@ struct NodeTheoryPairHashFunction { } };/* struct NodeTheoryPairHashFunction */ +namespace theory { + class Instantiator; +}/* CVC4::theory namespace */ + /** * This is essentially an abstraction for a collection of theories. A * TheoryEngine provides services to a PropEngine, making various @@ -115,6 +119,11 @@ class TheoryEngine { */ SharedTermsDatabase d_sharedTerms; + /** + * The quantifiers engine + */ + theory::QuantifiersEngine* d_quantEngine; + typedef std::hash_map NodeMap; typedef std::hash_map TNodeMap; @@ -151,18 +160,22 @@ class TheoryEngine { public: - IntStat conflicts, propagations, lemmas, propagationsAsDecisions; + IntStat conflicts, propagations, lemmas, propagationsAsDecisions, requirePhase, flipDecision; Statistics(theory::TheoryId theory): conflicts(mkName("theory<", theory, ">::conflicts"), 0), propagations(mkName("theory<", theory, ">::propagations"), 0), lemmas(mkName("theory<", theory, ">::lemmas"), 0), - propagationsAsDecisions(mkName("theory<", theory, ">::propagationsAsDecisions"), 0) + propagationsAsDecisions(mkName("theory<", theory, ">::propagationsAsDecisions"), 0), + requirePhase(mkName("theory<", theory, ">::requirePhase"), 0), + flipDecision(mkName("theory<", theory, ">::flipDecision"), 0) { StatisticsRegistry::registerStat(&conflicts); StatisticsRegistry::registerStat(&propagations); StatisticsRegistry::registerStat(&lemmas); StatisticsRegistry::registerStat(&propagationsAsDecisions); + StatisticsRegistry::registerStat(&requirePhase); + StatisticsRegistry::registerStat(&flipDecision); } ~Statistics() { @@ -170,6 +183,8 @@ class TheoryEngine { StatisticsRegistry::unregisterStat(&propagations); StatisticsRegistry::unregisterStat(&lemmas); StatisticsRegistry::unregisterStat(&propagationsAsDecisions); + StatisticsRegistry::unregisterStat(&requirePhase); + StatisticsRegistry::unregisterStat(&flipDecision); } };/* class TheoryEngine::Statistics */ @@ -234,6 +249,21 @@ class TheoryEngine { return d_engine->lemma(lemma, false, removable); } + void requirePhase(TNode n, bool phase) + throw(theory::Interrupted, AssertionException) { + Debug("theory") << "EngineOutputChannel::requirePhase(" + << n << ", " << phase << ")" << std::endl; + ++ d_statistics.requirePhase; + d_engine->d_propEngine->requirePhase(n, phase); + } + + bool flipDecision() + throw(theory::Interrupted, AssertionException) { + Debug("theory") << "EngineOutputChannel::flipDecision()" << std::endl; + ++ d_statistics.flipDecision; + return d_engine->d_propEngine->flipDecision(); + } + void setIncomplete() throw(AssertionException) { d_engine->setIncomplete(d_theory); } @@ -380,7 +410,7 @@ public: inline void addTheory(theory::TheoryId theoryId) { Assert(d_theoryTable[theoryId] == NULL && d_theoryOut[theoryId] == NULL); d_theoryOut[theoryId] = new EngineOutputChannel(this, theoryId); - d_theoryTable[theoryId] = new TheoryClass(d_context, d_userContext, *d_theoryOut[theoryId], theory::Valuation(this), d_logicInfo); + d_theoryTable[theoryId] = new TheoryClass(d_context, d_userContext, *d_theoryOut[theoryId], theory::Valuation(this), d_logicInfo, getQuantifiersEngine()); } inline void setPropEngine(prop::PropEngine* propEngine) { @@ -400,6 +430,13 @@ public: return d_propEngine; } + /** + * Get a pointer to the underlying quantifiers engine. + */ + theory::QuantifiersEngine* getQuantifiersEngine() const { + return d_quantEngine; + } + private: /** @@ -610,6 +647,11 @@ public: return d_theoryTable[theoryId]; } + /** Get the theory for id */ + theory::Theory* getTheory(int id) { + return d_theoryTable[id]; + } + /** * Returns the equality status of the two terms, from the theory * that owns the domain type. The types of a and b must be the same. diff --git a/src/theory/theory_test_utils.h b/src/theory/theory_test_utils.h index bf1370090..44f009bc0 100644 --- a/src/theory/theory_test_utils.h +++ b/src/theory/theory_test_utils.h @@ -94,6 +94,13 @@ public: return LemmaStatus(Node::null(), 0); } + void requirePhase(TNode, bool) throw(Interrupted, AssertionException) { + } + + bool flipDecision() throw(Interrupted, AssertionException) { + return true; + } + void setIncomplete() throw(AssertionException) {} void clear() { diff --git a/src/theory/trigger.cpp b/src/theory/trigger.cpp new file mode 100644 index 000000000..d665fef91 --- /dev/null +++ b/src/theory/trigger.cpp @@ -0,0 +1,555 @@ +/********************* */ +/*! \file trigger.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of trigger class + **/ + +#include "theory/trigger.h" +#include "theory/theory_engine.h" +#include "theory/quantifiers_engine.h" +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/uf/theory_uf_candidate_generator.h" +#include "theory/uf/equality_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; + +//#define NESTED_PATTERN_SELECTION + +Trigger* Trigger::TrTrie::getTrigger2( std::vector< Node >& nodes ){ + if( nodes.empty() ){ + return d_tr; + }else{ + Node n = nodes.back(); + nodes.pop_back(); + if( d_children.find( n )!=d_children.end() ){ + return d_children[n]->getTrigger2( nodes ); + }else{ + return NULL; + } + } +} +void Trigger::TrTrie::addTrigger2( std::vector< Node >& nodes, Trigger* t ){ + if( nodes.empty() ){ + d_tr = t; + }else{ + Node n = nodes.back(); + nodes.pop_back(); + if( d_children.find( n )==d_children.end() ){ + d_children[n] = new TrTrie; + } + d_children[n]->addTrigger2( nodes, t ); + } +} + +/** trigger static members */ +std::map< TNode, std::vector< TNode > > Trigger::d_var_contains; +Trigger::TrTrie Trigger::d_tr_trie; + +/** trigger class constructor */ +Trigger::Trigger( QuantifiersEngine* qe, Node f, std::vector< Node >& nodes, int matchOption, bool smartTriggers ) : +d_quantEngine( qe ), d_f( f ){ + d_nodes.insert( d_nodes.begin(), nodes.begin(), nodes.end() ); + if( smartTriggers ){ + if( d_nodes.size()==1 ){ + if( isSimpleTrigger( d_nodes[0] ) ){ + d_mg = new InstMatchGeneratorSimple( f, d_nodes[0] ); + }else{ + d_mg = new InstMatchGenerator( d_nodes[0], qe, matchOption ); + } + }else{ + d_mg = new InstMatchGeneratorMulti( f, d_nodes, qe, matchOption ); + } + }else{ + d_mg = new InstMatchGenerator( d_nodes, qe, matchOption ); + } + Debug("trigger") << "Trigger for " << f << ": " << std::endl; + for( int i=0; i<(int)d_nodes.size(); i++ ){ + Debug("trigger") << " " << d_nodes[i] << std::endl; + } + Debug("trigger") << std::endl; + if( d_nodes.size()==1 ){ + if( isSimpleTrigger( d_nodes[0] ) ){ + ++(qe->d_statistics.d_triggers); + }else{ + ++(qe->d_statistics.d_simple_triggers); + } + }else{ + Debug("multi-trigger") << "Multi-trigger " << (*this) << std::endl; + //Notice() << "Multi-trigger for " << f << " : " << std::endl; + //Notice() << " " << (*this) << std::endl; + ++(qe->d_statistics.d_multi_triggers); + } + //Notice() << "Trigger : " << (*this) << " for " << f << std::endl; + if( Options::current()->eagerInstQuant ){ + Theory* th_uf = qe->getTheoryEngine()->getTheory( theory::THEORY_UF ); + uf::InstantiatorTheoryUf* ith = (uf::InstantiatorTheoryUf*)th_uf->getInstantiator(); + for( int i=0; i<(int)d_nodes.size(); i++ ){ + ith->registerTrigger( this, d_nodes[i].getOperator() ); + } + } +} +void Trigger::computeVarContains( Node n ) { + if( d_var_contains.find( n )==d_var_contains.end() ){ + d_var_contains[n].clear(); + computeVarContains2( n, n ); + } +} + +void Trigger::computeVarContains2( Node n, Node parent ){ + if( n.getKind()==INST_CONSTANT ){ + if( std::find( d_var_contains[parent].begin(), d_var_contains[parent].end(), n )==d_var_contains[parent].end() ){ + d_var_contains[parent].push_back( n ); + } + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + computeVarContains2( n[i], parent ); + } + } +} + +void Trigger::resetInstantiationRound(){ + d_mg->resetInstantiationRound( d_quantEngine ); +} + +void Trigger::reset( Node eqc ){ + d_mg->reset( eqc, d_quantEngine ); +} + +bool Trigger::getNextMatch( InstMatch& m ){ + bool retVal = d_mg->getNextMatch( m, d_quantEngine ); + //m.makeInternal( d_quantEngine->getEqualityQuery() ); + return retVal; +} + +bool Trigger::getMatch( Node t, InstMatch& m ){ + //FIXME: this assumes d_mg is an inst match generator + return ((InstMatchGenerator*)d_mg)->getMatch( t, m, d_quantEngine ); +} + +int Trigger::addTerm( Node t ){ + return d_mg->addTerm( d_f, t, d_quantEngine ); +} + +int Trigger::addInstantiations( InstMatch& baseMatch, int instLimit, bool addSplits ){ + int addedLemmas = d_mg->addInstantiations( d_f, baseMatch, d_quantEngine, instLimit, addSplits ); + if( addedLemmas>0 ){ + Debug("inst-trigger") << "Added " << addedLemmas << " lemmas, trigger was "; + for( int i=0; i<(int)d_nodes.size(); i++ ){ + Debug("inst-trigger") << d_nodes[i] << " "; + } + Debug("inst-trigger") << std::endl; + } + return addedLemmas; +} + +Trigger* Trigger::mkTrigger( QuantifiersEngine* qe, Node f, std::vector< Node >& nodes, int matchOption, bool keepAll, int trOption, + bool smartTriggers ){ + std::vector< Node > trNodes; + if( !keepAll ){ + //only take nodes that contribute variables to the trigger when added + std::vector< Node > temp; + temp.insert( temp.begin(), nodes.begin(), nodes.end() ); + std::map< Node, bool > vars; + std::map< Node, std::vector< Node > > patterns; + for( int i=0; i<(int)temp.size(); i++ ){ + bool foundVar = false; + computeVarContains( temp[i] ); + for( int j=0; j<(int)d_var_contains[ temp[i] ].size(); j++ ){ + Node v = d_var_contains[ temp[i] ][j]; + if( v.getAttribute(InstConstantAttribute())==f ){ + if( vars.find( v )==vars.end() ){ + vars[ v ] = true; + foundVar = true; + } + } + } + if( foundVar ){ + trNodes.push_back( temp[i] ); + for( int j=0; j<(int)d_var_contains[ temp[i] ].size(); j++ ){ + Node v = d_var_contains[ temp[i] ][j]; + patterns[ v ].push_back( temp[i] ); + } + } + } + //now, minimalize the trigger + for( int i=0; i<(int)trNodes.size(); i++ ){ + bool keepPattern = false; + Node n = trNodes[i]; + for( int j=0; j<(int)d_var_contains[ n ].size(); j++ ){ + Node v = d_var_contains[ n ][j]; + if( patterns[v].size()==1 ){ + keepPattern = true; + break; + } + } + if( !keepPattern ){ + //remove from pattern vector + for( int j=0; j<(int)d_var_contains[ n ].size(); j++ ){ + Node v = d_var_contains[ n ][j]; + for( int k=0; k<(int)patterns[v].size(); k++ ){ + if( patterns[v][k]==n ){ + patterns[v].erase( patterns[v].begin() + k, patterns[v].begin() + k + 1 ); + break; + } + } + } + //remove from trigger nodes + trNodes.erase( trNodes.begin() + i, trNodes.begin() + i + 1 ); + i--; + } + } + }else{ + trNodes.insert( trNodes.begin(), nodes.begin(), nodes.end() ); + } + + //check for duplicate? + if( trOption==TR_MAKE_NEW ){ + //static int trNew = 0; + //static int trOld = 0; + //Trigger* t = d_tr_trie.getTrigger( trNodes ); + //if( t ){ + // trOld++; + //}else{ + // trNew++; + //} + //if( (trNew+trOld)%100==0 ){ + // Notice() << "Trigger new old = " << trNew << " " << trOld << std::endl; + //} + }else{ + Trigger* t = d_tr_trie.getTrigger( trNodes ); + if( t ){ + if( trOption==TR_GET_OLD ){ + //just return old trigger + return t; + }else{ + return NULL; + } + } + } + Trigger* t = new Trigger( qe, f, trNodes, matchOption, smartTriggers ); + d_tr_trie.addTrigger( trNodes, t ); + return t; +} +Trigger* Trigger::mkTrigger( QuantifiersEngine* qe, Node f, Node n, int matchOption, bool keepAll, int trOption, bool smartTriggers ){ + std::vector< Node > nodes; + nodes.push_back( n ); + return mkTrigger( qe, f, nodes, matchOption, keepAll, trOption, smartTriggers ); +} + +bool Trigger::isUsableTrigger( std::vector< Node >& nodes, Node f ){ + for( int i=0; i<(int)nodes.size(); i++ ){ + if( !isUsableTrigger( nodes[i], f ) ){ + return false; + } + } + return true; +} + +bool Trigger::isUsable( Node n, Node f ){ + if( n.getAttribute(InstConstantAttribute())==f ){ + if( !isAtomicTrigger( n ) && n.getKind()!=INST_CONSTANT ){ + std::map< Node, Node > coeffs; + return getPatternArithmetic( f, n, coeffs ); + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( !isUsable( n[i], f ) ){ + return false; + } + } + return true; + } + }else{ + return true; + } +} + +bool Trigger::isUsableTrigger( Node n, Node f ){ + //return n.getAttribute(InstConstantAttribute())==f && n.getKind()==APPLY_UF; + return n.getAttribute(InstConstantAttribute())==f && isAtomicTrigger( n ) && isUsable( n, f ); +} + +bool Trigger::isAtomicTrigger( Node n ){ + return n.getKind()==APPLY_UF || n.getKind()==SELECT || n.getKind()==STORE; +} +bool Trigger::isSimpleTrigger( Node n ){ + if( isAtomicTrigger( n ) ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( n[i].getKind()!=INST_CONSTANT && n[i].hasAttribute(InstConstantAttribute()) ){ + return false; + } + } + return true; + }else{ + return false; + } +} + +/** filter all nodes that have instances */ +void Trigger::filterInstances( std::vector< Node >& nodes ){ + std::vector< bool > active; + active.resize( nodes.size(), true ); + for( int i=0; i<(int)nodes.size(); i++ ){ + for( int j=i+1; j<(int)nodes.size(); j++ ){ + if( active[i] && active[j] ){ + int result = isInstanceOf( nodes[i], nodes[j] ); + if( result==1 ){ + active[j] = false; + }else if( result==-1 ){ + active[i] = false; + } + } + } + } + std::vector< Node > temp; + for( int i=0; i<(int)nodes.size(); i++ ){ + if( active[i] ){ + temp.push_back( nodes[i] ); + } + } + nodes.clear(); + nodes.insert( nodes.begin(), temp.begin(), temp.end() ); +} + + +bool Trigger::collectPatTerms2( QuantifiersEngine* qe, Node f, Node n, std::map< Node, bool >& patMap, int tstrt ){ + if( patMap.find( n )==patMap.end() ){ + patMap[ n ] = false; + if( tstrt==TS_MIN_TRIGGER ){ + if( n.getKind()==FORALL ){ +#ifdef NESTED_PATTERN_SELECTION + //return collectPatTerms2( qe, f, qe->getOrCreateCounterexampleBody( n ), patMap, tstrt ); + return collectPatTerms2( qe, f, qe->getBoundBody( n ), patMap, tstrt ); +#else + return false; +#endif + }else{ + bool retVal = false; + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( collectPatTerms2( qe, f, n[i], patMap, tstrt ) ){ + retVal = true; + } + } + if( retVal ){ + return true; + }else if( isUsableTrigger( n, f ) ){ + patMap[ n ] = true; + return true; + }else{ + return false; + } + } + }else{ + bool retVal = false; + if( isUsableTrigger( n, f ) ){ + patMap[ n ] = true; + if( tstrt==TS_MAX_TRIGGER ){ + return true; + }else{ + retVal = true; + } + } + if( n.getKind()==FORALL ){ +#ifdef NESTED_PATTERN_SELECTION + //if( collectPatTerms2( qe, f, qe->getOrCreateCounterexampleBody( n ), patMap, tstrt ) ){ + // retVal = true; + //} + if( collectPatTerms2( qe, f, qe->getBoundBody( n ), patMap, tstrt ) ){ + retVal = true; + } +#endif + }else{ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( collectPatTerms2( qe, f, n[i], patMap, tstrt ) ){ + retVal = true; + } + } + } + return retVal; + } + }else{ + return patMap[ n ]; + } +} + +void Trigger::collectPatTerms( QuantifiersEngine* qe, Node f, Node n, std::vector< Node >& patTerms, int tstrt, bool filterInst ){ + std::map< Node, bool > patMap; + if( filterInst ){ + //immediately do not consider any term t for which another term is an instance of t + std::vector< Node > patTerms2; + collectPatTerms( qe, f, n, patTerms2, TS_ALL, false ); + std::vector< Node > temp; + temp.insert( temp.begin(), patTerms2.begin(), patTerms2.end() ); + filterInstances( temp ); + if( temp.size()!=patTerms2.size() ){ + Debug("trigger-filter-instance") << "Filtered an instance: " << std::endl; + Debug("trigger-filter-instance") << "Old: "; + for( int i=0; i<(int)patTerms2.size(); i++ ){ + Debug("trigger-filter-instance") << patTerms2[i] << " "; + } + Debug("trigger-filter-instance") << std::endl << "New: "; + for( int i=0; i<(int)temp.size(); i++ ){ + Debug("trigger-filter-instance") << temp[i] << " "; + } + Debug("trigger-filter-instance") << std::endl; + } + if( tstrt==TS_ALL ){ + patTerms.insert( patTerms.begin(), temp.begin(), temp.end() ); + return; + }else{ + //do not consider terms that have instances + for( int i=0; i<(int)patTerms2.size(); i++ ){ + if( std::find( temp.begin(), temp.end(), patTerms2[i] )==temp.end() ){ + patMap[ patTerms2[i] ] = false; + } + } + } + } + collectPatTerms2( qe, f, n, patMap, tstrt ); + for( std::map< Node, bool >::iterator it = patMap.begin(); it != patMap.end(); ++it ){ + if( it->second ){ + patTerms.push_back( it->first ); + } + } +} + +/** is n1 an instance of n2 or vice versa? */ +int Trigger::isInstanceOf( Node n1, Node n2 ){ + if( n1==n2 ){ + return 1; + }else if( n1.getKind()==n2.getKind() ){ + if( n1.getKind()==APPLY_UF ){ + if( n1.getOperator()==n2.getOperator() ){ + int result = 0; + for( int i=0; i<(int)n1.getNumChildren(); i++ ){ + if( n1[i]!=n2[i] ){ + int cResult = isInstanceOf( n1[i], n2[i] ); + if( cResult==0 ){ + return 0; + }else if( cResult!=result ){ + if( result!=0 ){ + return 0; + }else{ + result = cResult; + } + } + } + } + return result; + } + } + return 0; + }else if( n2.getKind()==INST_CONSTANT ){ + computeVarContains( n1 ); + //if( std::find( d_var_contains[ n1 ].begin(), d_var_contains[ n1 ].end(), n2 )!=d_var_contains[ n1 ].end() ){ + // return 1; + //} + if( d_var_contains[ n1 ].size()==1 && d_var_contains[ n1 ][ 0 ]==n2 ){ + return 1; + } + }else if( n1.getKind()==INST_CONSTANT ){ + computeVarContains( n2 ); + //if( std::find( d_var_contains[ n2 ].begin(), d_var_contains[ n2 ].end(), n1 )!=d_var_contains[ n2 ].end() ){ + // return -1; + //} + if( d_var_contains[ n2 ].size()==1 && d_var_contains[ n2 ][ 0 ]==n1 ){ + return 1; + } + } + return 0; +} + +bool Trigger::isVariableSubsume( Node n1, Node n2 ){ + if( n1==n2 ){ + return true; + }else{ + //Notice() << "is variable subsume ? " << n1 << " " << n2 << std::endl; + computeVarContains( n1 ); + computeVarContains( n2 ); + for( int i=0; i<(int)d_var_contains[n2].size(); i++ ){ + if( std::find( d_var_contains[n1].begin(), d_var_contains[n1].end(), d_var_contains[n2][i] )==d_var_contains[n1].end() ){ + //Notice() << "no" << std::endl; + return false; + } + } + //Notice() << "yes" << std::endl; + return true; + } +} + +void Trigger::getVarContains( Node f, std::vector< Node >& pats, std::map< Node, std::vector< Node > >& varContains ){ + for( int i=0; i<(int)pats.size(); i++ ){ + computeVarContains( pats[i] ); + varContains[ pats[i] ].clear(); + for( int j=0; j<(int)d_var_contains[pats[i]].size(); j++ ){ + if( d_var_contains[pats[i]][j].getAttribute(InstConstantAttribute())==f ){ + varContains[ pats[i] ].push_back( d_var_contains[pats[i]][j] ); + } + } + } +} + +void Trigger::getVarContainsNode( Node f, Node n, std::vector< Node >& varContains ){ + computeVarContains( n ); + for( int j=0; j<(int)d_var_contains[n].size(); j++ ){ + if( d_var_contains[n][j].getAttribute(InstConstantAttribute())==f ){ + varContains.push_back( d_var_contains[n][j] ); + } + } +} + +bool Trigger::getPatternArithmetic( Node f, Node n, std::map< Node, Node >& coeffs ){ + if( n.getKind()==PLUS ){ + Assert( coeffs.empty() ); + NodeBuilder<> t(kind::PLUS); + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( n[i].hasAttribute(InstConstantAttribute()) ){ + if( n[i].getKind()==INST_CONSTANT ){ + if( n[i].getAttribute(InstConstantAttribute())==f ){ + coeffs[ n[i] ] = Node::null(); + }else{ + coeffs.clear(); + return false; + } + }else if( !getPatternArithmetic( f, n[i], coeffs ) ){ + coeffs.clear(); + return false; + } + }else{ + t << n[i]; + } + } + if( t.getNumChildren()==0 ){ + coeffs[ Node::null() ] = NodeManager::currentNM()->mkConst( Rational(0) ); + }else if( t.getNumChildren()==1 ){ + coeffs[ Node::null() ] = t.getChild( 0 ); + }else{ + coeffs[ Node::null() ] = t; + } + return true; + }else if( n.getKind()==MULT ){ + if( n[0].getKind()==INST_CONSTANT && n[0].getAttribute(InstConstantAttribute())==f ){ + Assert( !n[1].hasAttribute(InstConstantAttribute()) ); + coeffs[ n[0] ] = n[1]; + return true; + }else if( n[1].getKind()==INST_CONSTANT && n[1].getAttribute(InstConstantAttribute())==f ){ + Assert( !n[0].hasAttribute(InstConstantAttribute()) ); + coeffs[ n[1] ] = n[0]; + return true; + } + } + return false; +} diff --git a/src/theory/trigger.h b/src/theory/trigger.h new file mode 100644 index 000000000..457df0ab4 --- /dev/null +++ b/src/theory/trigger.h @@ -0,0 +1,170 @@ +/********************* */ +/*! \file trigger.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief trigger class + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__TRIGGER_H +#define __CVC4__TRIGGER_H + +#include "theory/inst_match.h" + +namespace CVC4 { +namespace theory { + +//a collect of nodes representing a trigger +class Trigger { +private: + /** computation of variable contains */ + static std::map< TNode, std::vector< TNode > > d_var_contains; + static void computeVarContains( Node n ); + static void computeVarContains2( Node n, Node parent ); +private: + /** the quantifiers engine */ + QuantifiersEngine* d_quantEngine; + /** the quantifier this trigger is for */ + Node d_f; + /** match generators */ + IMGenerator* d_mg; +private: + /** a trie of triggers */ + class TrTrie { + private: + Trigger* getTrigger2( std::vector< Node >& nodes ); + void addTrigger2( std::vector< Node >& nodes, Trigger* t ); + public: + TrTrie() : d_tr( NULL ){} + Trigger* d_tr; + std::map< TNode, TrTrie* > d_children; + Trigger* getTrigger( std::vector< Node >& nodes ){ + std::vector< Node > temp; + temp.insert( temp.begin(), nodes.begin(), nodes.end() ); + std::sort( temp.begin(), temp.end() ); + return getTrigger2( temp ); + } + void addTrigger( std::vector< Node >& nodes, Trigger* t ){ + std::vector< Node > temp; + temp.insert( temp.begin(), nodes.begin(), nodes.end() ); + std::sort( temp.begin(), temp.end() ); + return addTrigger2( temp, t ); + } + };/* class Trigger::TrTrie */ + /** all triggers will be stored in this trie */ + static TrTrie d_tr_trie; +private: + /** trigger constructor */ + Trigger( QuantifiersEngine* ie, Node f, std::vector< Node >& nodes, int matchOption = 0, bool smartTriggers = false ); +public: + ~Trigger(){} +public: + std::vector< Node > d_nodes; +public: + void debugPrint( const char* c ); + IMGenerator* getGenerator() { return d_mg; } +public: + /** reset instantiation round (call this whenever equivalence classes have changed) */ + void resetInstantiationRound(); + /** reset, eqc is the equivalence class to search in (search in any if eqc=null) */ + void reset( Node eqc ); + /** get next match. must call reset( eqc ) once before this function. */ + bool getNextMatch( InstMatch& m ); + /** get the match against ground term or formula t. + the trigger and t should have the same shape. + Currently the trigger should not be a multi-trigger. + */ + bool getMatch( Node t, InstMatch& m); + /** add ground term t, called when t is added to the TermDb */ + int addTerm( Node t ); + /** return true if whatever Node is subsituted for the variables the + given Node can't match the pattern */ + bool nonunifiable( TNode t, const std::vector & vars){ + return d_mg->nonunifiable(t,vars); + } + /** return whether this is a multi-trigger */ + bool isMultiTrigger() { return d_nodes.size()>1; } +public: + /** add all available instantiations exhaustively, in any equivalence class + if limitInst>0, limitInst is the max # of instantiations to try */ + int addInstantiations( InstMatch& baseMatch, int instLimit = 0, bool addSplits = false ); + /** mkTrigger method + ie : quantifier engine; + f : forall something .... + nodes : (multi-)trigger + matchOption : which policy to use for creating matches (one of InstMatchGenerator::MATCH_GEN_* ) + keepAll: don't remove unneeded patterns; + trOption : policy for dealing with triggers that already existed (see below) + */ + enum{ + TR_MAKE_NEW, //make new trigger even if it already may exist + TR_GET_OLD, //return a previous trigger if it had already been created + TR_RETURN_NULL //return null if a duplicate is found + }; + static Trigger* mkTrigger( QuantifiersEngine* qe, Node f, std::vector< Node >& nodes, + int matchOption = 0, bool keepAll = true, int trOption = TR_MAKE_NEW, + bool smartTriggers = false ); + static Trigger* mkTrigger( QuantifiersEngine* qe, Node f, Node n, + int matchOption = 0, bool keepAll = true, int trOption = TR_MAKE_NEW, + bool smartTriggers = false ); +private: + /** is subterm of trigger usable */ + static bool isUsable( Node n, Node f ); + /** collect all APPLY_UF pattern terms for f in n */ + static bool collectPatTerms2( QuantifiersEngine* qe, Node f, Node n, std::map< Node, bool >& patMap, int tstrt ); +public: + //different strategies for choosing trigger terms + enum { + TS_MAX_TRIGGER = 0, + TS_MIN_TRIGGER, + TS_ALL, + }; + static void collectPatTerms( QuantifiersEngine* qe, Node f, Node n, std::vector< Node >& patTerms, int tstrt, bool filterInst = false ); +public: + /** is usable trigger */ + static bool isUsableTrigger( std::vector< Node >& nodes, Node f ); + static bool isUsableTrigger( Node n, Node f ); + static bool isAtomicTrigger( Node n ); + static bool isSimpleTrigger( Node n ); + /** filter all nodes that have instances */ + static void filterInstances( std::vector< Node >& nodes ); + /** -1: n1 is an instance of n2, 1: n1 is an instance of n2 */ + static int isInstanceOf( Node n1, Node n2 ); + /** variables subsume, return true if n1 contains all free variables in n2 */ + static bool isVariableSubsume( Node n1, Node n2 ); + /** get var contains */ + static void getVarContains( Node f, std::vector< Node >& pats, std::map< Node, std::vector< Node > >& varContains ); + static void getVarContainsNode( Node f, Node n, std::vector< Node >& varContains ); + /** get pattern arithmetic */ + static bool getPatternArithmetic( Node f, Node n, std::map< Node, Node >& coeffs ); + + inline void toStream(std::ostream& out) const { + out << "TRIGGER( "; + for( int i=0; i<(int)d_nodes.size(); i++ ){ + if( i>0 ){ out << ", "; } + out << d_nodes[i]; + } + out << " )"; + } +}; + +inline std::ostream& operator<<(std::ostream& out, const Trigger & tr) { + tr.toStream(out); + return out; +} + +}/* CVC4::theory namespace */ + +}/* CVC4 namespace */ + +#endif /* __CVC4__TRIGGER_H */ diff --git a/src/theory/uf/Makefile.am b/src/theory/uf/Makefile.am index 50147b997..2c9cd3b80 100644 --- a/src/theory/uf/Makefile.am +++ b/src/theory/uf/Makefile.am @@ -14,6 +14,14 @@ libuf_la_SOURCES = \ equality_engine_types.h \ equality_engine.cpp \ symmetry_breaker.h \ - symmetry_breaker.cpp + symmetry_breaker.cpp \ + theory_uf_instantiator.h \ + theory_uf_instantiator.cpp \ + theory_uf_strong_solver.h \ + theory_uf_strong_solver.cpp \ + theory_uf_candidate_generator.h \ + theory_uf_candidate_generator.cpp \ + inst_strategy.h \ + inst_strategy.cpp EXTRA_DIST = kinds diff --git a/src/theory/uf/equality_engine.cpp b/src/theory/uf/equality_engine.cpp index 25645c472..96c8e8b59 100644 --- a/src/theory/uf/equality_engine.cpp +++ b/src/theory/uf/equality_engine.cpp @@ -211,6 +211,11 @@ EqualityNodeId EqualityEngine::newNode(TNode node) { Debug("equality") << d_name << "::eq::newNode(" << node << ") => " << newId << std::endl; + // notify e.g. the UF theory strong solver + if (d_performNotify) { + d_notify.eqNotifyNewClass(node); + } + return newId; } @@ -346,7 +351,12 @@ void EqualityEngine::assertEquality(TNode eq, bool polarity, TNode reason) { if (hasTerm(eq[0]) && hasTerm(eq[1]) && areDisequal(eq[0], eq[1], false)) { return; } - + + // notify the theory + if (d_performNotify) { + d_notify.eqNotifyDisequal(eq[0], eq[1], reason); + } + Debug("equality::trigger") << d_name << "::eq::addEquality(" << eq << "," << (polarity ? "true" : "false") << ")" << std::endl; assertEqualityInternal(eq, d_false, reason); @@ -437,6 +447,21 @@ bool EqualityEngine::merge(EqualityNode& class1, EqualityNode& class2, std::vect EqualityNodeId class1Id = class1.getFind(); EqualityNodeId class2Id = class2.getFind(); + Node n1 = d_nodes[class1Id]; + Node n2 = d_nodes[class2Id]; + EqualityNode cc1 = getEqualityNode(n1); + EqualityNode cc2 = getEqualityNode(n2); + bool doNotify = false; + // notify the theory + // the second part of this check is needed due to the internal implementation of this class. + // It ensures that we are merging terms and not operators. + if (d_performNotify && class1Id==cc1.getFind() && class2Id==cc2.getFind()) { + doNotify = true; + } + if (doNotify) { + d_notify.eqNotifyPreMerge(n1, n2); + } + // Check for constant merges bool class1isConstant = d_isConstant[class1Id]; bool class2isConstant = d_isConstant[class2Id]; @@ -559,7 +584,12 @@ bool EqualityEngine::merge(EqualityNode& class1, EqualityNode& class2, std::vect // Now merge the lists class1.merge(class2); - + + // notify the theory + if (doNotify) { + d_notify.eqNotifyPostMerge(n1, n2); + } + // Go through the trigger term disequalities and propagate if (!propagateTriggerTermDisequalities(class1OnlyTags, class1triggerRef, class2disequalitiesToNotify)) { return false; diff --git a/src/theory/uf/equality_engine.h b/src/theory/uf/equality_engine.h index 8cf159cd7..cb0c81872 100644 --- a/src/theory/uf/equality_engine.h +++ b/src/theory/uf/equality_engine.h @@ -39,6 +39,9 @@ namespace CVC4 { namespace theory { namespace eq { +class EqClassesIterator; +class EqClassIterator; + /** * Interface for equality engine notifications. All the notifications * are safe as TNodes, but not necessarily for negations. @@ -62,7 +65,7 @@ public: /** * Notifies about a trigger predicate that became true or false. * - * @param predicate the trigger predicate that bacame true or false + * @param predicate the trigger predicate that became true or false * @param value the value of the predicate */ virtual bool eqNotifyTriggerPredicate(TNode predicate, bool value) = 0; @@ -82,10 +85,43 @@ public: * can do is ask for explanations. * * @param t1 a constant term - * @param t2 a constnat term + * @param t2 a constant term */ virtual void eqNotifyConstantTermMerge(TNode t1, TNode t2) = 0; -}; + + /** + * Notifies about the creation of a new equality class. + * + * @param t the term forming the new class + */ + virtual void eqNotifyNewClass(TNode t) = 0; + + /** + * Notifies about the merge of two classes (just before the merge). + * + * @param t1 a term + * @param t2 a term + */ + virtual void eqNotifyPreMerge(TNode t1, TNode t2) = 0; + + /** + * Notifies about the merge of two classes (just after the merge). + * + * @param t1 a term + * @param t2 a term + */ + virtual void eqNotifyPostMerge(TNode t1, TNode t2) = 0; + + /** + * Notifies about the disequality of two terms. + * + * @param t1 a term + * @param t2 a term + * @param reason the reason + */ + virtual void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) = 0; + +};/* class EqualityEngineNotify */ /** * Implementation of the notification interface that ignores all the @@ -97,7 +133,11 @@ public: bool eqNotifyTriggerPredicate(TNode predicate, bool value) { return true; } bool eqNotifyTriggerTermEquality(TheoryId tag, TNode t1, TNode t2, bool value) { return true; } void eqNotifyConstantTermMerge(TNode t1, TNode t2) { } -}; + void eqNotifyNewClass(TNode t) { } + void eqNotifyPreMerge(TNode t1, TNode t2) { } + void eqNotifyPostMerge(TNode t1, TNode t2) { } + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { } +};/* class EqualityEngineNotifyNone */ /** @@ -106,6 +146,9 @@ public: */ class EqualityEngine : public context::ContextNotifyObj { + friend class EqClassesIterator; + friend class EqClassIterator; + /** Default implementation of the notification object */ static EqualityEngineNotifyNone s_notifyNone; @@ -140,14 +183,14 @@ public: StatisticsRegistry::unregisterStat(&functionTermsCount); StatisticsRegistry::unregisterStat(&constantTermsCount); } - }; + };/* struct EqualityEngine::statistics */ /** * Store the application lookup, with enough information to backtrack */ void storeApplicationLookup(FunctionApplication& funNormalized, EqualityNodeId funId); -private: +//private: /** The context we are using */ context::Context* d_context; @@ -212,7 +255,7 @@ private: /** Equality constructor */ Equality(EqualityNodeId lhs = null_id, EqualityNodeId rhs = null_id) : lhs(lhs), rhs(rhs) {} - }; + };/* struct EqualityEngine::Equality */ /** The ids of the classes we have merged */ std::vector d_assertedEqualities; @@ -253,7 +296,7 @@ private: /** The reason of this edge */ TNode getReason() const { return d_reason; } -}; + };/* class EqualityEngine::EqualityEdge */ /** * All the equality edges (twice as many as the number of asserted equalities. If an equality @@ -268,7 +311,7 @@ private: std::string edgesToString(EqualityEdgeId edgeId) const; /** - * Map from a node to it's first edge in the equality graph. Edges are added to the front of the + * Map from a node to its first edge in the equality graph. Edges are added to the front of the * list which makes the insertion/backtracking easy. */ std::vector d_equalityGraph; @@ -297,7 +340,7 @@ private: */ bool merge(EqualityNode& class1, EqualityNode& class2, std::vector& triggers); - /** Undo the mereg of class2 into class1 */ + /** Undo the merge of class2 into class1 */ void undoMerge(EqualityNode& class1, EqualityNode& class2, EqualityNodeId class2Id); /** Backtrack the information if necessary */ @@ -314,7 +357,7 @@ private: Trigger(EqualityNodeId classId = null_id, TriggerId nextTrigger = null_trigger) : classId(classId), nextTrigger(nextTrigger) {} - }; + };/* struct EqualityEngine::Trigger */ /** * Vector of triggers. Triggers come in pairs for an @@ -436,7 +479,7 @@ private: EqualityNodeId getTrigger(TheoryId tag) const { return triggers[Theory::setIndex(tag, tags)]; } - }; + };/* struct EqualityEngine::TriggerTermSet */ /** Internal tags for creating a new set */ Theory::Set d_newSetTags; @@ -451,7 +494,7 @@ private: char* d_triggerDatabase; /** Allocated size of the trigger term database */ - DefaultSizeType d_triggerDatabaseAllocatedSize ; + DefaultSizeType d_triggerDatabaseAllocatedSize; /** Reference for the trigger terms set */ typedef DefaultSizeType TriggerTermSetRef; @@ -482,7 +525,7 @@ private: TriggerTermSetRef oldValue; TriggerSetUpdate(EqualityNodeId classId = null_id, TriggerTermSetRef oldValue = null_set_id) : classId(classId), oldValue(oldValue) {} - }; + };/* struct EqualityEngine::TriggerSetUpdate */ /** * List of trigger updates for backtracking. @@ -685,7 +728,7 @@ public: * Add term to the set of trigger terms with a corresponding tag. The notify class will get * notified when two trigger terms with the same tag become equal or dis-equal. The notification * will not happen on all the terms, but only on the ones that are represent the class. Note that - * a term can be added more than once with different tags, and each tag apperance will merit + * a term can be added more than once with different tags, and each tag appearance will merit * it's own notification. * * @param t the trigger term @@ -743,7 +786,97 @@ public: }; -} // Namespace uf +class EqClassesIterator { + + eq::EqualityEngine* d_ee; + size_t d_it; + +public: + + EqClassesIterator() { } + EqClassesIterator(eq::EqualityEngine* ee) : d_ee(ee) { + d_it = 0; + if ( d_it < d_ee->d_nodesCount && + d_ee->getRepresentative(d_ee->d_nodes[d_it]) != d_ee->d_nodes[d_it] ) { + ++*this; + } + } + Node operator*() { + return d_ee->d_nodes[d_it]; + } + bool operator==(const EqClassesIterator& i) { + return d_ee == i.d_ee && d_it == i.d_it; + } + bool operator!=(const EqClassesIterator& i) { + return !(*this == i); + } + EqClassesIterator& operator++() { + Node orig = d_ee->d_nodes[d_it]; + ++d_it; + while ( d_itd_nodesCount && + ( d_ee->getRepresentative(d_ee->d_nodes[d_it]) != d_ee->d_nodes[d_it] + || d_ee->d_nodes[d_it] == orig ) ) { // this line is necessary for ignoring duplicates + ++d_it; + } + return *this; + } + EqClassesIterator operator++(int) { + EqClassesIterator i = *this; + ++*this; + return i; + } + bool isFinished() { + return d_it>=d_ee->d_nodesCount; + } +};/* class EqClassesIterator */ + +class EqClassIterator { + + Node d_rep; + eq::EqualityNode d_curr; + Node d_curr_node; + eq::EqualityEngine* d_ee; + +public: + + EqClassIterator() { } + EqClassIterator(Node eqc, eq::EqualityEngine* ee) : d_ee(ee) { + Assert( d_ee->getRepresentative(eqc) == eqc ); + d_rep = eqc; + d_curr_node = eqc; + d_curr = d_ee->getEqualityNode(eqc); + } + Node operator*() { + return d_curr_node; + } + bool operator==(const EqClassIterator& i) { + return d_ee == i.d_ee && d_curr_node == i.d_curr_node; + } + bool operator!=(const EqClassIterator& i) { + return !(*this == i); + } + EqClassIterator& operator++() { + Node next = d_ee->d_nodes[ d_curr.getNext() ]; + Assert( d_rep==d_ee->getRepresentative(next) ); + if (d_rep != next) { // we end when we have cycled back to the original representative + d_curr_node = next; + d_curr = d_ee->getEqualityNode(d_curr.getNext()); + } else { + d_curr_node = Node::null(); + } + return *this; + } + EqClassIterator operator++(int) { + EqClassIterator i = *this; + ++*this; + return i; + } + bool isFinished() { + return d_curr_node == Node::null(); + } +};/* class EqClassIterator */ + +} // Namespace eq } // Namespace theory } // Namespace CVC4 diff --git a/src/theory/uf/inst_strategy.cpp b/src/theory/uf/inst_strategy.cpp new file mode 100644 index 000000000..2ca2dcb5a --- /dev/null +++ b/src/theory/uf/inst_strategy.cpp @@ -0,0 +1,412 @@ +/********************* */ +/*! \file inst_strategy.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory uf instantiation strategies + **/ + +#include "theory/uf/inst_strategy.h" + +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/theory_engine.h" +#include "theory/uf/theory_uf.h" +#include "theory/uf/equality_engine.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::uf; + +#define USE_SINGLE_TRIGGER_BEFORE_MULTI_TRIGGER +//#define MULTI_TRIGGER_FULL_EFFORT_HALF +#define MULTI_MULTI_TRIGGERS + +struct sortQuantifiersForSymbol { + QuantifiersEngine* d_qe; + bool operator() (Node i, Node j) { + int nqfsi = d_qe->getNumQuantifiersForSymbol( i.getOperator() ); + int nqfsj = d_qe->getNumQuantifiersForSymbol( j.getOperator() ); + if( nqfsinqfsj ){ + return false; + }else{ + return false; + } + } +}; + + +void InstStrategyCheckCESolved::processResetInstantiationRound( Theory::Effort effort ){ + for( std::map< Node, bool >::iterator it = d_solved.begin(); it != d_solved.end(); ++it ){ + calcSolved( it->first ); + } +} + +int InstStrategyCheckCESolved::process( Node f, Theory::Effort effort, int e, int instLimit ){ + if( e==0 ){ + //calc solved if not done so already + if( d_solved.find( f )==d_solved.end() ){ + calcSolved( f ); + } + //check if f is counterexample-solved + Debug("quant-uf-strategy") << "Try CE-solved.." << std::endl; + if( d_solved[ f ] ){ + if( d_quantEngine->addInstantiation( f, d_th->d_baseMatch[f] ) ){ + ++(d_th->d_statistics.d_instantiations_ce_solved); + //d_quantEngine->d_hasInstantiated[f] = true; + } + d_solved[f] = false; + } + Debug("quant-uf-strategy") << "done." << std::endl; + } + return STATUS_UNKNOWN; +} + +void InstStrategyCheckCESolved::calcSolved( Node f ){ + d_th->d_baseMatch[f].clear(); + d_solved[ f ]= true; + //check if instantiation constants are solved for + for( int j = 0; j<(int)d_quantEngine->getNumInstantiationConstants( f ); j++ ){ + Node i = d_quantEngine->getInstantiationConstant( f, j ); + Node rep = d_th->getInternalRepresentative( i ); + if( !rep.hasAttribute(InstConstantAttribute()) ){ + d_th->d_baseMatch[f].d_map[ i ] = rep; + }else{ + d_solved[ f ] = false; + } + } +} + +void InstStrategyUserPatterns::processResetInstantiationRound( Theory::Effort effort ){ + //reset triggers + for( std::map< Node, std::vector< Trigger* > >::iterator it = d_user_gen.begin(); it != d_user_gen.end(); ++it ){ + for( int i=0; i<(int)it->second.size(); i++ ){ + it->second[i]->resetInstantiationRound(); + it->second[i]->reset( Node::null() ); + } + } +} + +int InstStrategyUserPatterns::process( Node f, Theory::Effort effort, int e, int instLimit ){ + if( e==0 ){ + return STATUS_UNFINISHED; + }else if( e==1 ){ + d_counter[f]++; + Debug("quant-uf-strategy") << "Try user-provided patterns..." << std::endl; + //Notice() << "Try user-provided patterns..." << std::endl; + for( int i=0; i<(int)d_user_gen[f].size(); i++ ){ + bool processTrigger = true; + if( effort!=Theory::EFFORT_LAST_CALL && d_user_gen[f][i]->isMultiTrigger() ){ +//#ifdef MULTI_TRIGGER_FULL_EFFORT_HALF +// processTrigger = d_counter[f]%2==0; +//#endif + } + if( processTrigger ){ + //if( d_user_gen[f][i]->isMultiTrigger() ) + //Notice() << " Process (user) " << (*d_user_gen[f][i]) << " for " << f << "..." << std::endl; + int numInst = d_user_gen[f][i]->addInstantiations( d_th->d_baseMatch[f], instLimit ); + //if( d_user_gen[f][i]->isMultiTrigger() ) + //Notice() << " Done, numInst = " << numInst << "." << std::endl; + d_th->d_statistics.d_instantiations_user_pattern += numInst; + if( d_user_gen[f][i]->isMultiTrigger() ){ + d_quantEngine->d_statistics.d_multi_trigger_instantiations += numInst; + } + //d_quantEngine->d_hasInstantiated[f] = true; + } + } + Debug("quant-uf-strategy") << "done." << std::endl; + //Notice() << "done" << std::endl; + } + return STATUS_UNKNOWN; +} + +void InstStrategyUserPatterns::addUserPattern( Node f, Node pat ){ + //add to generators + std::vector< Node > nodes; + for( int i=0; i<(int)pat.getNumChildren(); i++ ){ + nodes.push_back( pat[i] ); + } + if( Trigger::isUsableTrigger( nodes, f ) ){ + //extend to literal matching + d_quantEngine->getPhaseReqTerms( f, nodes ); + //check match option + int matchOption = Options::current()->efficientEMatching ? InstMatchGenerator::MATCH_GEN_EFFICIENT_E_MATCH : 0; + d_user_gen[f].push_back( Trigger::mkTrigger( d_quantEngine, f, nodes, matchOption, true, Trigger::TR_MAKE_NEW, + Options::current()->smartTriggers ) ); + } +} + +void InstStrategyAutoGenTriggers::processResetInstantiationRound( Theory::Effort effort ){ + //reset triggers + for( std::map< Node, std::map< Trigger*, bool > >::iterator it = d_auto_gen_trigger.begin(); it != d_auto_gen_trigger.end(); ++it ){ + for( std::map< Trigger*, bool >::iterator itt = it->second.begin(); itt != it->second.end(); ++itt ){ + itt->first->resetInstantiationRound(); + itt->first->reset( Node::null() ); + } + } +} + +int InstStrategyAutoGenTriggers::process( Node f, Theory::Effort effort, int e, int instLimit ){ + int peffort = f.getNumChildren()==3 ? 2 : 1; + //int peffort = f.getNumChildren()==3 ? 2 : 1; + //int peffort = 1; + if( e::iterator itt = d_auto_gen_trigger[f].begin(); itt != d_auto_gen_trigger[f].end(); ++itt ){ + Trigger* tr = itt->first; + if( tr ){ + bool processTrigger = itt->second; + if( effort!=Theory::EFFORT_LAST_CALL && tr->isMultiTrigger() ){ +#ifdef MULTI_TRIGGER_FULL_EFFORT_HALF + processTrigger = d_counter[f]%2==0; +#endif + } + if( processTrigger ){ + //if( tr->isMultiTrigger() ) + Debug("quant-uf-strategy-auto-gen-triggers") << " Process " << (*tr) << "..." << std::endl; + int numInst = tr->addInstantiations( d_th->d_baseMatch[f], instLimit ); + //if( tr->isMultiTrigger() ) + Debug("quant-uf-strategy-auto-gen-triggers") << " Done, numInst = " << numInst << "." << std::endl; + if( d_tr_strategy==Trigger::TS_MIN_TRIGGER ){ + d_th->d_statistics.d_instantiations_auto_gen_min += numInst; + }else{ + d_th->d_statistics.d_instantiations_auto_gen += numInst; + } + if( tr->isMultiTrigger() ){ + d_quantEngine->d_statistics.d_multi_trigger_instantiations += numInst; + } + //d_quantEngine->d_hasInstantiated[f] = true; + } + } + } + Debug("quant-uf-strategy") << "done." << std::endl; + //Notice() << "done" << std::endl; + } + return STATUS_UNKNOWN; +} + +void InstStrategyAutoGenTriggers::generateTriggers( Node f ){ + Debug("auto-gen-trigger") << "Generate trigger for " << f << std::endl; + if( d_patTerms[0].find( f )==d_patTerms[0].end() ){ + //determine all possible pattern terms based on trigger term selection strategy d_tr_strategy + d_patTerms[0][f].clear(); + d_patTerms[1][f].clear(); + std::vector< Node > patTermsF; + Trigger::collectPatTerms( d_quantEngine, f, d_quantEngine->getCounterexampleBody( f ), patTermsF, d_tr_strategy, true ); + Debug("auto-gen-trigger") << "Collected pat terms for " << d_quantEngine->getCounterexampleBody( f ) << std::endl; + Debug("auto-gen-trigger") << " "; + for( int i=0; i<(int)patTermsF.size(); i++ ){ + Debug("auto-gen-trigger") << patTermsF[i] << " "; + } + Debug("auto-gen-trigger") << std::endl; + //extend to literal matching + d_quantEngine->getPhaseReqTerms( f, patTermsF ); + //sort into single/multi triggers + std::map< Node, std::vector< Node > > varContains; + Trigger::getVarContains( f, patTermsF, varContains ); + for( std::map< Node, std::vector< Node > >::iterator it = varContains.begin(); it != varContains.end(); ++it ){ + if( it->second.size()==f[0].getNumChildren() ){ + d_patTerms[0][f].push_back( it->first ); + d_is_single_trigger[ it->first ] = true; + }else{ + d_patTerms[1][f].push_back( it->first ); + d_is_single_trigger[ it->first ] = false; + } + } + d_made_multi_trigger[f] = false; + Debug("auto-gen-trigger") << "Single triggers for " << f << " : " << std::endl; + Debug("auto-gen-trigger") << " "; + for( int i=0; i<(int)d_patTerms[0][f].size(); i++ ){ + Debug("auto-gen-trigger") << d_patTerms[0][f][i] << " "; + } + Debug("auto-gen-trigger") << std::endl; + Debug("auto-gen-trigger") << "Multi-trigger term pool for " << f << " : " << std::endl; + Debug("auto-gen-trigger") << " "; + for( int i=0; i<(int)d_patTerms[1][f].size(); i++ ){ + Debug("auto-gen-trigger") << d_patTerms[1][f][i] << " "; + } + Debug("auto-gen-trigger") << std::endl; + } + + //populate candidate pattern term vector for the current trigger + std::vector< Node > patTerms; +#ifdef USE_SINGLE_TRIGGER_BEFORE_MULTI_TRIGGER + //try to add single triggers first + for( int i=0; i<(int)d_patTerms[0][f].size(); i++ ){ + if( !d_single_trigger_gen[d_patTerms[0][f][i]] ){ + patTerms.push_back( d_patTerms[0][f][i] ); + } + } + //if no single triggers exist, add multi trigger terms + if( patTerms.empty() ){ + patTerms.insert( patTerms.begin(), d_patTerms[1][f].begin(), d_patTerms[1][f].end() ); + } +#else + patTerms.insert( patTerms.begin(), d_patTerms[0][f].begin(), d_patTerms[0][f].end() ); + patTerms.insert( patTerms.begin(), d_patTerms[1][f].begin(), d_patTerms[1][f].end() ); +#endif + + if( !patTerms.empty() ){ + Debug("auto-gen-trigger") << "Generate trigger for " << f << std::endl; + //sort terms based on relevance + if( d_rlv_strategy==RELEVANCE_DEFAULT ){ + sortQuantifiersForSymbol sqfs; + sqfs.d_qe = d_quantEngine; + //sort based on # occurrences (this will cause Trigger to select rarer symbols) + std::sort( patTerms.begin(), patTerms.end(), sqfs ); + Debug("relevant-trigger") << "Terms based on relevance: " << std::endl; + for( int i=0; i<(int)patTerms.size(); i++ ){ + Debug("relevant-trigger") << " " << patTerms[i] << " ("; + Debug("relevant-trigger") << d_quantEngine->getNumQuantifiersForSymbol( patTerms[i].getOperator() ) << ")" << std::endl; + } + //Notice() << "Terms based on relevance: " << std::endl; + //for( int i=0; i<(int)patTerms.size(); i++ ){ + // Notice() << " " << patTerms[i] << " ("; + // Notice() << d_quantEngine->getNumQuantifiersForSymbol( patTerms[i].getOperator() ) << ")" << std::endl; + //} + } + //now, generate the trigger... + int matchOption = Options::current()->efficientEMatching ? InstMatchGenerator::MATCH_GEN_EFFICIENT_E_MATCH : 0; + Trigger* tr = NULL; + if( d_is_single_trigger[ patTerms[0] ] ){ + tr = Trigger::mkTrigger( d_quantEngine, f, patTerms[0], matchOption, false, Trigger::TR_RETURN_NULL, + Options::current()->smartTriggers ); + d_single_trigger_gen[ patTerms[0] ] = true; + }else{ + //if we are re-generating triggers, shuffle based on some method + if( d_made_multi_trigger[f] ){ +#ifndef MULTI_MULTI_TRIGGERS + return; +#endif + std::random_shuffle( patTerms.begin(), patTerms.end() ); //shuffle randomly + }else{ + d_made_multi_trigger[f] = true; + } + //will possibly want to get an old trigger + tr = Trigger::mkTrigger( d_quantEngine, f, patTerms, matchOption, false, Trigger::TR_GET_OLD, + Options::current()->smartTriggers ); + } + if( tr ){ + if( tr->isMultiTrigger() ){ + //disable all other multi triggers + for( std::map< Trigger*, bool >::iterator it = d_auto_gen_trigger[f].begin(); it != d_auto_gen_trigger[f].end(); ++it ){ + if( it->first->isMultiTrigger() ){ + d_auto_gen_trigger[f][ it->first ] = false; + } + } + } + //making it during an instantiation round, so must reset + if( d_auto_gen_trigger[f].find( tr )==d_auto_gen_trigger[f].end() ){ + tr->resetInstantiationRound(); + tr->reset( Node::null() ); + } + d_auto_gen_trigger[f][tr] = true; + //if we are generating additional triggers... + if( d_generate_additional && d_is_single_trigger[ patTerms[0] ] ){ + int index = 0; + if( index<(int)patTerms.size() ){ + //Notice() << "check add additional" << std::endl; + //check if similar patterns exist, and if so, add them additionally + int nqfs_curr = d_quantEngine->getNumQuantifiersForSymbol( patTerms[0].getOperator() ); + index++; + bool success = true; + while( success && index<(int)patTerms.size() && d_is_single_trigger[ patTerms[index] ] ){ + success = false; + if( d_quantEngine->getNumQuantifiersForSymbol( patTerms[index].getOperator() )<=nqfs_curr ){ + d_single_trigger_gen[ patTerms[index] ] = true; + Trigger* tr2 = Trigger::mkTrigger( d_quantEngine, f, patTerms[index], matchOption, false, Trigger::TR_RETURN_NULL, + Options::current()->smartTriggers ); + if( tr2 ){ + //Notice() << "Add additional trigger " << patTerms[index] << std::endl; + tr2->resetInstantiationRound(); + tr2->reset( Node::null() ); + d_auto_gen_trigger[f][tr2] = true; + } + success = true; + } + index++; + } + //Notice() << "done check add additional" << std::endl; + } + } + } + } +} + +#if 0 + +void InstStrategyAddFailSplits::processResetInstantiationRound( Theory::Effort effort ){ +} + +int InstStrategyAddFailSplits::process( Node f, Theory::Effort effort, int e, int instLimit ){ + if( e<4 ){ + return STATUS_UNFINISHED; + }else{ + for( std::map< Node, std::map< Node, std::vector< InstMatchGenerator* > > >::iterator it = InstMatchGenerator::d_match_fails.begin(); + it != InstMatchGenerator::d_match_fails.end(); ++it ){ + for( std::map< Node, std::vector< InstMatchGenerator* > >::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2 ){ + if( !it2->second.empty() ){ + Node n1 = it->first; + Node n2 = it2->first; + if( !d_quantEngine->getEqualityQuery()->areEqual( n1, n2 ) && !d_quantEngine->getEqualityQuery()->areDisequal( n1, n2 ) ){ + d_quantEngine->addSplitEquality( n1, n2, true ); + } + it2->second.clear(); + } + } + } + return STATUS_UNKNOWN; + } +} + +#endif /* 0 */ + +void InstStrategyFreeVariable::processResetInstantiationRound( Theory::Effort effort ){ +} + +int InstStrategyFreeVariable::process( Node f, Theory::Effort effort, int e, int instLimit ){ + if( e<5 ){ + return STATUS_UNFINISHED; + }else{ + if( d_guessed.find( f )==d_guessed.end() ){ + d_guessed[f] = true; + Debug("quant-uf-alg") << "Add guessed instantiation" << std::endl; + InstMatch m; + if( d_quantEngine->addInstantiation( f, m ) ){ + ++(d_th->d_statistics.d_instantiations_guess); + //d_quantEngine->d_hasInstantiated[f] = true; + } + } + return STATUS_UNKNOWN; + } +} diff --git a/src/theory/uf/inst_strategy.h b/src/theory/uf/inst_strategy.h new file mode 100644 index 000000000..906169811 --- /dev/null +++ b/src/theory/uf/inst_strategy.h @@ -0,0 +1,179 @@ +/********************* */ +/*! \file inst_strategy.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Theory uf instantiation strategies + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__INST_STRATEGY_H +#define __CVC4__INST_STRATEGY_H + +#include "theory/quantifiers_engine.h" + +#include "context/context.h" +#include "context/context_mm.h" + +#include "util/stats.h" +#include "theory/uf/theory_uf.h" + +namespace CVC4 { +namespace theory { +namespace uf { + +class InstantiatorTheoryUf; + +//instantiation strategies + +class InstStrategyCheckCESolved : public InstStrategy{ +private: + /** InstantiatorTheoryUf class */ + InstantiatorTheoryUf* d_th; + /** is solved? */ + std::map< Node, bool > d_solved; + /** calc if f is solved */ + void calcSolved( Node f ); + /** process functions */ + void processResetInstantiationRound( Theory::Effort effort ); + int process( Node f, Theory::Effort effort, int e, int instLimit ); +public: + InstStrategyCheckCESolved( InstantiatorTheoryUf* th, QuantifiersEngine* ie ) : + InstStrategy( ie ), d_th( th ){} + ~InstStrategyCheckCESolved(){} + /** identify */ + std::string identify() const { return std::string("CheckCESolved"); } +};/* class InstStrategyCheckCESolved */ + +class InstStrategyUserPatterns : public InstStrategy{ +private: + /** InstantiatorTheoryUf class */ + InstantiatorTheoryUf* d_th; + /** explicitly provided patterns */ + std::map< Node, std::vector< Trigger* > > d_user_gen; + /** counter for quantifiers */ + std::map< Node, int > d_counter; + /** process functions */ + void processResetInstantiationRound( Theory::Effort effort ); + int process( Node f, Theory::Effort effort, int e, int instLimit ); +public: + InstStrategyUserPatterns( InstantiatorTheoryUf* th, QuantifiersEngine* ie ) : + InstStrategy( ie ), d_th( th ){} + ~InstStrategyUserPatterns(){} +public: + /** add pattern */ + void addUserPattern( Node f, Node pat ); + /** get num patterns */ + int getNumUserGenerators( Node f ) { return (int)d_user_gen[f].size(); } + /** get user pattern */ + Trigger* getUserGenerator( Node f, int i ) { return d_user_gen[f][ i ]; } + /** identify */ + std::string identify() const { return std::string("UserPatterns"); } +};/* class InstStrategyUserPatterns */ + +class InstStrategyAutoGenTriggers : public InstStrategy{ +public: + enum { + RELEVANCE_NONE, + RELEVANCE_DEFAULT, + }; +private: + /** InstantiatorTheoryUf class */ + InstantiatorTheoryUf* d_th; + /** trigger generation strategy */ + int d_tr_strategy; + /** relevance strategy */ + int d_rlv_strategy; + /** regeneration */ + bool d_regenerate; + int d_regenerate_frequency; + /** generate additional triggers */ + bool d_generate_additional; + /** triggers for each quantifier */ + std::map< Node, std::map< Trigger*, bool > > d_auto_gen_trigger; + std::map< Node, int > d_counter; + /** single, multi triggers for each quantifier */ + std::map< Node, std::vector< Node > > d_patTerms[2]; + std::map< Node, bool > d_is_single_trigger; + std::map< Node, bool > d_single_trigger_gen; + std::map< Node, bool > d_made_multi_trigger; +private: + /** process functions */ + void processResetInstantiationRound( Theory::Effort effort ); + int process( Node f, Theory::Effort effort, int e, int instLimit ); + /** generate triggers */ + void generateTriggers( Node f ); +public: + InstStrategyAutoGenTriggers( InstantiatorTheoryUf* th, QuantifiersEngine* ie, int tstrt, int rstrt, int rgfr = -1 ) : + InstStrategy( ie ), d_th( th ), d_tr_strategy( tstrt ), d_rlv_strategy( rstrt ), d_generate_additional( false ){ + setRegenerateFrequency( rgfr ); + } + ~InstStrategyAutoGenTriggers(){} +public: + /** get auto-generated trigger */ + Trigger* getAutoGenTrigger( Node f ); + /** identify */ + std::string identify() const { return std::string("AutoGenTriggers"); } + /** set regenerate frequency, if fr<0, turn off regenerate */ + void setRegenerateFrequency( int fr ){ + if( fr<0 ){ + d_regenerate = false; + }else{ + d_regenerate_frequency = fr; + d_regenerate = true; + } + } + /** set generate additional */ + void setGenerateAdditional( bool val ) { d_generate_additional = val; } +};/* class InstStrategyAutoGenTriggers */ + +#if 0 + +class InstStrategyAddFailSplits : public InstStrategy{ +private: + /** InstantiatorTheoryUf class */ + InstantiatorTheoryUf* d_th; + /** process functions */ + void processResetInstantiationRound( Theory::Effort effort ); + int process( Node f, Theory::Effort effort, int e, int instLimit ); +public: + InstStrategyAddFailSplits( InstantiatorTheoryUf* th, QuantifiersEngine* ie ) : + InstStrategy( ie ), d_th( th ){} + ~InstStrategyAddFailSplits(){} + /** identify */ + std::string identify() const { return std::string("AddFailSplits"); } +};/* class InstStrategyAddFailSplits */ + +#endif /* 0 */ + +class InstStrategyFreeVariable : public InstStrategy{ +private: + /** InstantiatorTheoryUf class */ + InstantiatorTheoryUf* d_th; + /** guessed instantiations */ + std::map< Node, bool > d_guessed; + /** process functions */ + void processResetInstantiationRound( Theory::Effort effort ); + int process( Node f, Theory::Effort effort, int e, int instLimit ); +public: + InstStrategyFreeVariable( InstantiatorTheoryUf* th, QuantifiersEngine* ie ) : + InstStrategy( ie ), d_th( th ){} + ~InstStrategyFreeVariable(){} + /** identify */ + std::string identify() const { return std::string("FreeVariable"); } +};/* class InstStrategyFreeVariable */ + +}/* CVC4::theory::uf namespace */ +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif diff --git a/src/theory/uf/kinds b/src/theory/uf/kinds index 2de3715e1..ec353dc59 100644 --- a/src/theory/uf/kinds +++ b/src/theory/uf/kinds @@ -6,6 +6,7 @@ theory THEORY_UF ::CVC4::theory::uf::TheoryUF "theory/uf/theory_uf.h" typechecker "theory/uf/theory_uf_type_rules.h" +instantiator ::CVC4::theory::uf::InstantiatorTheoryUf "theory/uf/theory_uf_instantiator.h" properties stable-infinite parametric properties check propagate staticLearning presolve @@ -15,4 +16,8 @@ parameterized APPLY_UF VARIABLE 1: "uninterpreted function application" typerule APPLY_UF ::CVC4::theory::uf::UfTypeRule +operator CARDINALITY_CONSTRAINT 2 "cardinality constraint" + +typerule CARDINALITY_CONSTRAINT ::CVC4::theory::uf::CardinalityConstraintTypeRule + endtheory diff --git a/src/theory/uf/symmetry_breaker.cpp b/src/theory/uf/symmetry_breaker.cpp index 5761ee4f5..26678f21d 100644 --- a/src/theory/uf/symmetry_breaker.cpp +++ b/src/theory/uf/symmetry_breaker.cpp @@ -443,6 +443,16 @@ bool SymmetryBreaker::invariantByPermutations(const Permutation& p) { Assert(p.size() > 1); + // check that the types match + Permutation::iterator permIt = p.begin(); + TypeNode type = (*permIt++).getType(); + do { + if(type != (*permIt++).getType()) { + Debug("ufsymm") << "UFSYMM types don't match, aborting.." << endl; + return false; + } + } while(permIt != p.end()); + // check P_swap vector subs; vector repls; diff --git a/src/theory/uf/theory_uf.cpp b/src/theory/uf/theory_uf.cpp index 7583f8ee7..dc7bb7c92 100644 --- a/src/theory/uf/theory_uf.cpp +++ b/src/theory/uf/theory_uf.cpp @@ -18,6 +18,8 @@ **/ #include "theory/uf/theory_uf.h" +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/uf/theory_uf_strong_solver.h" using namespace std; using namespace CVC4; @@ -25,8 +27,8 @@ using namespace CVC4::theory; using namespace CVC4::theory::uf; /** Constructs a new instance of TheoryUF w.r.t. the provided context.*/ -TheoryUF::TheoryUF(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(THEORY_UF, c, u, out, valuation, logicInfo), +TheoryUF::TheoryUF(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(THEORY_UF, c, u, out, valuation, logicInfo, qe), d_notify(*this), d_equalityEngine(d_notify, c, "theory::uf::TheoryUF"), d_conflict(c, false), @@ -36,6 +38,12 @@ TheoryUF::TheoryUF(context::Context* c, context::UserContext* u, OutputChannel& { // The kinds we are treating as function application in congruence d_equalityEngine.addFunctionKind(kind::APPLY_UF); + + if (Options::current()->finiteModelFind) { + d_thss = new StrongSolverTheoryUf(c, u, out, this); + } else { + d_thss = NULL; + } }/* TheoryUF::TheoryUF() */ static Node mkAnd(const std::vector& conjunctions) { @@ -62,29 +70,46 @@ static Node mkAnd(const std::vector& conjunctions) { void TheoryUF::check(Effort level) { - while (!done() && !d_conflict) + while (!done() && !d_conflict) { // Get all the assertions Assertion assertion = get(); TNode fact = assertion.assertion; Debug("uf") << "TheoryUF::check(): processing " << fact << std::endl; + if (d_thss != NULL) { + bool isDecision = d_valuation.isSatLiteral(fact) && d_valuation.isDecision(fact); + d_thss->assertNode(fact, isDecision); + } // Do the work bool polarity = fact.getKind() != kind::NOT; TNode atom = polarity ? fact : fact[0]; if (atom.getKind() == kind::EQUAL) { d_equalityEngine.assertEquality(atom, polarity, fact); + } else if (atom.getKind() == kind::CARDINALITY_CONSTRAINT) { + // do nothing } else { d_equalityEngine.assertPredicate(atom, polarity, fact); } } + + if (d_thss != NULL) { + if (! d_conflict) { + d_thss->check(level); + } + } + }/* TheoryUF::check() */ void TheoryUF::preRegisterTerm(TNode node) { Debug("uf") << "TheoryUF::preRegisterTerm(" << node << ")" << std::endl; + if (d_thss != NULL) { + d_thss->preRegisterTerm(node); + } + switch (node.getKind()) { case kind::EQUAL: // Add the trigger for equality @@ -124,6 +149,12 @@ bool TheoryUF::propagate(TNode literal) { return ok; }/* TheoryUF::propagate(TNode) */ +void TheoryUF::propagate(Effort effort) { + if (d_thss != NULL) { + return d_thss->propagate(effort); + } +} + void TheoryUF::explain(TNode literal, std::vector& assumptions) { // Do the work bool polarity = literal.getKind() != kind::NOT; @@ -395,3 +426,54 @@ void TheoryUF::conflict(TNode a, TNode b) { d_out->conflict(d_conflictNode); d_conflict = true; } + +void TheoryUF::eqNotifyNewClass(TNode t) { + if (d_thss != NULL) { + d_thss->newEqClass(t); + } + // this can be called very early, during initialization + if (!getLogicInfo().isLocked() || getLogicInfo().isQuantified()) { + ((InstantiatorTheoryUf*) getInstantiator())->newEqClass(t); + } +} + +void TheoryUF::eqNotifyPreMerge(TNode t1, TNode t2) { + if (getLogicInfo().isQuantified()) { + ((InstantiatorTheoryUf*) getInstantiator())->merge(t1, t2); + } +} + +void TheoryUF::eqNotifyPostMerge(TNode t1, TNode t2) { + if (d_thss != NULL) { + d_thss->merge(t1, t2); + } +} + +void TheoryUF::eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { + if (d_thss != NULL) { + d_thss->assertDisequal(t1, t2, reason); + } + if (getLogicInfo().isQuantified()) { + ((InstantiatorTheoryUf*) getInstantiator())->assertDisequal(t1, t2, reason); + } +} + +Node TheoryUF::ppRewrite(TNode node) { + + if (node.getKind() != kind::APPLY_UF) { + return node; + } + + // perform the callbacks requested by TheoryUF::registerPpRewrite() + RegisterPpRewrites::iterator c = d_registeredPpRewrites.find(node.getOperator()); + if (c == d_registeredPpRewrites.end()) { + return node; + } else { + Node res = c->second->ppRewrite(node); + if (res != node) { + return ppRewrite(res); + } else { + return res; + } + } +} diff --git a/src/theory/uf/theory_uf.h b/src/theory/uf/theory_uf.h index eceead38a..a55ef92b5 100644 --- a/src/theory/uf/theory_uf.h +++ b/src/theory/uf/theory_uf.h @@ -36,7 +36,15 @@ namespace CVC4 { namespace theory { namespace uf { +class UfTermDb; +class InstantiatorTheoryUf; +class StrongSolverTheoryUf; + class TheoryUF : public Theory { + + friend class InstantiatorTheoryUf; + friend class StrongSolverTheoryUf; + public: class NotifyClass : public eq::EqualityEngineNotify { @@ -76,13 +84,43 @@ public: Debug("uf") << "NotifyClass::eqNotifyConstantTermMerge(" << t1 << ", " << t2 << ")" << std::endl; d_uf.conflict(t1, t2); } - }; + + void eqNotifyNewClass(TNode t) { + Debug("uf") << "NotifyClass::eqNotifyNewClass(" << t << std::endl; + d_uf.eqNotifyNewClass(t); + } + + void eqNotifyPreMerge(TNode t1, TNode t2) { + Debug("uf") << "NotifyClass::eqNotifyPreMerge(" << t1 << ", " << t2 << std::endl; + d_uf.eqNotifyPreMerge(t1, t2); + } + + void eqNotifyPostMerge(TNode t1, TNode t2) { + Debug("uf") << "NotifyClass::eqNotifyPostMerge(" << t1 << ", " << t2 << std::endl; + d_uf.eqNotifyPostMerge(t1, t2); + } + + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason) { + Debug("uf") << "NotifyClass::eqNotifyDisequal(" << t1 << ", " << t2 << ", " << reason << std::endl; + d_uf.eqNotifyDisequal(t1, t2, reason); + } + + };/* class TheoryUF::NotifyClass */ + + /** A callback class for ppRewrite(). See registerPpRewrite(), below. */ + class PpRewrite { + public: + virtual Node ppRewrite(TNode node) = 0; + };/* class TheoryUF::PpRewrite */ private: /** The notify class */ NotifyClass d_notify; + /** The associated theory strong solver (or NULL if none) */ + StrongSolverTheoryUf* d_thss; + /** Equaltity engine */ eq::EqualityEngine d_equalityEngine; @@ -118,10 +156,37 @@ private: /** Conflict when merging two constants */ void conflict(TNode a, TNode b); + /** called when a new equivalance class is created */ + void eqNotifyNewClass(TNode t); + + /** called when two equivalance classes will merge */ + void eqNotifyPreMerge(TNode t1, TNode t2); + + /** called when two equivalance classes have merged */ + void eqNotifyPostMerge(TNode t1, TNode t2); + + /** called when two equivalence classes are made disequal */ + void eqNotifyDisequal(TNode t1, TNode t2, TNode reason); + + /** a registry type for keeping Node-specific callbacks for ppRewrite() */ + typedef std::hash_map RegisterPpRewrites; + + /** a collection of callbacks to issue while doing a ppRewrite() */ + RegisterPpRewrites d_registeredPpRewrites; + public: /** Constructs a new instance of TheoryUF w.r.t. the provided context.*/ - TheoryUF(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo); + TheoryUF(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe); + + ~TheoryUF() { + // destruct all ppRewrite() callbacks + for(RegisterPpRewrites::iterator i = d_registeredPpRewrites.begin(); + i != d_registeredPpRewrites.end(); + ++i) { + delete i->second; + } + } void check(Effort); void preRegisterTerm(TNode term); @@ -133,7 +198,7 @@ public: void addSharedTerm(TNode n); void computeCareGraph(); - void propagate(Effort effort) {} + void propagate(Effort effort); EqualityStatus getEqualityStatus(TNode a, TNode b); @@ -141,6 +206,24 @@ public: return "THEORY_UF"; } + eq::EqualityEngine* getEqualityEngine() { + return &d_equalityEngine; + } + + StrongSolverTheoryUf* getStrongSolver() { + return d_thss; + } + + Node ppRewrite(TNode node); + + /** + * Register a ppRewrite() callback on "op." TheoryUF owns + * the callback, and will delete it when it is destructed. + */ + void registerPpRewrite(TNode op, PpRewrite* callback) { + d_registeredPpRewrites.insert(std::make_pair(op, callback)); + } + };/* class TheoryUF */ }/* CVC4::theory::uf namespace */ diff --git a/src/theory/uf/theory_uf_candidate_generator.cpp b/src/theory/uf/theory_uf_candidate_generator.cpp new file mode 100644 index 000000000..e8aa98aa7 --- /dev/null +++ b/src/theory/uf/theory_uf_candidate_generator.cpp @@ -0,0 +1,170 @@ +/********************* */ +/*! \file theory_uf_candidate_generator.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory uf candidate generator class + **/ + +#include "theory/uf/theory_uf_candidate_generator.h" +#include "theory/theory_engine.h" +#include "theory/uf/theory_uf.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::uf; + +CandidateGeneratorTheoryUf::CandidateGeneratorTheoryUf( InstantiatorTheoryUf* ith, Node op ) : + d_op( op ), d_ith( ith ), d_term_iter( -2 ){ + Assert( !d_op.isNull() ); +} +void CandidateGeneratorTheoryUf::resetInstantiationRound(){ + d_term_iter_limit = d_ith->getQuantifiersEngine()->getTermDatabase()->d_op_map[d_op].size(); +} + +void CandidateGeneratorTheoryUf::reset( Node eqc ){ + if( eqc.isNull() ){ + d_term_iter = 0; + }else{ + //create an equivalence class iterator in eq class eqc + if( ((TheoryUF*)d_ith->getTheory())->getEqualityEngine()->hasTerm( eqc ) ){ + eqc = ((TheoryUF*)d_ith->getTheory())->getEqualityEngine()->getRepresentative( eqc ); + d_eqc = eq::EqClassIterator( eqc, ((TheoryUF*)d_ith->getTheory())->getEqualityEngine() ); + d_retNode = Node::null(); + }else{ + d_retNode = eqc; + } + d_term_iter = -1; + } +} + +Node CandidateGeneratorTheoryUf::getNextCandidate(){ + if( d_term_iter>=0 ){ + //get next candidate term in the uf term database + while( d_term_itergetQuantifiersEngine()->getTermDatabase()->d_op_map[d_op][d_term_iter]; + d_term_iter++; + if( isLegalCandidate( n ) ){ + return n; + } + } + }else if( d_term_iter==-1 ){ + if( d_retNode.isNull() ){ + //get next candidate term in equivalence class + while( !d_eqc.isFinished() ){ + Node n = (*d_eqc); + ++d_eqc; + if( n.getKind()==APPLY_UF && n.getOperator()==d_op ){ + if( isLegalCandidate( n ) ){ + return n; + } + } + } + }else{ + Node ret; + if( d_retNode.hasOperator() && d_retNode.getOperator()==d_op ){ + ret = d_retNode; + } + d_term_iter = -2; //done returning matches + return ret; + } + } + return Node::null(); +} + + +//CandidateGeneratorTheoryUfDisequal::CandidateGeneratorTheoryUfDisequal( InstantiatorTheoryUf* ith, Node eqc ) : +// d_ith( ith ), d_eq_class( eqc ){ +// d_eci = NULL; +//} +//void CandidateGeneratorTheoryUfDisequal::resetInstantiationRound(){ +// +//} +////we will iterate over all terms that are disequal from eqc +//void CandidateGeneratorTheoryUfDisequal::reset( Node eqc ){ +// //Assert( !eqc.isNull() ); +// ////begin iterating over equivalence classes that are disequal from eqc +// //d_eci = d_ith->getEquivalenceClassInfo( eqc ); +// //if( d_eci ){ +// // d_eqci_iter = d_eci->d_disequal.begin(); +// //} +//} +//Node CandidateGeneratorTheoryUfDisequal::getNextCandidate(){ +// //if( d_eci ){ +// // while( d_eqci_iter != d_eci->d_disequal.end() ){ +// // if( (*d_eqci_iter).second ){ +// // //we have an equivalence class that is disequal from eqc +// // d_cg->reset( (*d_eqci_iter).first ); +// // Node n = d_cg->getNextCandidate(); +// // //if there is a candidate in this equivalence class, return it +// // if( !n.isNull() ){ +// // return n; +// // } +// // } +// // ++d_eqci_iter; +// // } +// //} +// return Node::null(); +//} + + +CandidateGeneratorTheoryUfLitEq::CandidateGeneratorTheoryUfLitEq( InstantiatorTheoryUf* ith, Node mpat ) : + d_match_pattern( mpat ), d_ith( ith ){ + +} +void CandidateGeneratorTheoryUfLitEq::resetInstantiationRound(){ + +} +void CandidateGeneratorTheoryUfLitEq::reset( Node eqc ){ + d_eq = eq::EqClassesIterator( ((TheoryUF*)d_ith->getTheory())->getEqualityEngine() ); +} +Node CandidateGeneratorTheoryUfLitEq::getNextCandidate(){ + while( d_eq.isFinished() ){ + Node n = (*d_eq); + ++d_eq; + if( n.getType()==d_match_pattern[0].getType() ){ + //an equivalence class with the same type as the pattern, return reflexive equality + return NodeManager::currentNM()->mkNode( d_match_pattern.getKind(), n, n ); + } + } + return Node::null(); +} + + +CandidateGeneratorTheoryUfLitDeq::CandidateGeneratorTheoryUfLitDeq( InstantiatorTheoryUf* ith, Node mpat ) : + d_match_pattern( mpat ), d_ith( ith ){ + +} +void CandidateGeneratorTheoryUfLitDeq::resetInstantiationRound(){ + +} +void CandidateGeneratorTheoryUfLitDeq::reset( Node eqc ){ + Node false_term = ((TheoryUF*)d_ith->getTheory())->getEqualityEngine()->getRepresentative( + NodeManager::currentNM()->mkConst(false) ); + d_eqc_false = eq::EqClassIterator( false_term, ((TheoryUF*)d_ith->getTheory())->getEqualityEngine() ); +} +Node CandidateGeneratorTheoryUfLitDeq::getNextCandidate(){ + //get next candidate term in equivalence class + while( !d_eqc_false.isFinished() ){ + Node n = (*d_eqc_false); + ++d_eqc_false; + if( n.getKind()==d_match_pattern.getKind() ){ + //found an iff or equality, try to match it + //DO_THIS: cache to avoid redundancies? + //DO_THIS: do we need to try the symmetric equality for n? or will it also exist in the eq class of false? + return n; + } + } + return Node::null(); +} diff --git a/src/theory/uf/theory_uf_candidate_generator.h b/src/theory/uf/theory_uf_candidate_generator.h new file mode 100644 index 000000000..948573439 --- /dev/null +++ b/src/theory/uf/theory_uf_candidate_generator.h @@ -0,0 +1,115 @@ +/********************* */ +/*! \file theory_uf_candidate generator.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Theory uf candidate generator + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY_UF_CANDIDATE_GENERATOR_H +#define __CVC4__THEORY_UF_CANDIDATE_GENERATOR_H + +#include "theory/quantifiers_engine.h" +#include "theory/uf/theory_uf_instantiator.h" + +namespace CVC4 { +namespace theory { +namespace uf { + +class CandidateGeneratorTheoryUfDisequal; + +class CandidateGeneratorTheoryUf : public CandidateGenerator +{ + friend class CandidateGeneratorTheoryUfDisequal; +private: + //operator you are looking for + Node d_op; + //instantiator pointer + InstantiatorTheoryUf* d_ith; + //the equality class iterator + eq::EqClassIterator d_eqc; + int d_term_iter; + int d_term_iter_limit; +private: + Node d_retNode; +public: + CandidateGeneratorTheoryUf( InstantiatorTheoryUf* ith, Node op ); + ~CandidateGeneratorTheoryUf(){} + + void resetInstantiationRound(); + void reset( Node eqc ); + Node getNextCandidate(); +}; + +//class CandidateGeneratorTheoryUfDisequal : public CandidateGenerator +//{ +//private: +// //equivalence class +// Node d_eq_class; +// //equivalence class info +// EqClassInfo* d_eci; +// //equivalence class iterator +// EqClassInfo::BoolMap::const_iterator d_eqci_iter; +// //instantiator pointer +// InstantiatorTheoryUf* d_ith; +//public: +// CandidateGeneratorTheoryUfDisequal( InstantiatorTheoryUf* ith, Node eqc ); +// ~CandidateGeneratorTheoryUfDisequal(){} +// +// void resetInstantiationRound(); +// void reset( Node eqc ); //should be what you want to be disequal from +// Node getNextCandidate(); +//}; + +class CandidateGeneratorTheoryUfLitEq : public CandidateGenerator +{ +private: + //the equality classes iterator + eq::EqClassesIterator d_eq; + //equality you are trying to match equalities for + Node d_match_pattern; + //einstantiator pointer + InstantiatorTheoryUf* d_ith; +public: + CandidateGeneratorTheoryUfLitEq( InstantiatorTheoryUf* ith, Node mpat ); + ~CandidateGeneratorTheoryUfLitEq(){} + + void resetInstantiationRound(); + void reset( Node eqc ); + Node getNextCandidate(); +}; + +class CandidateGeneratorTheoryUfLitDeq : public CandidateGenerator +{ +private: + //the equality class iterator for false + eq::EqClassIterator d_eqc_false; + //equality you are trying to match disequalities for + Node d_match_pattern; + //einstantiator pointer + InstantiatorTheoryUf* d_ith; +public: + CandidateGeneratorTheoryUfLitDeq( InstantiatorTheoryUf* ith, Node mpat ); + ~CandidateGeneratorTheoryUfLitDeq(){} + + void resetInstantiationRound(); + void reset( Node eqc ); + Node getNextCandidate(); +}; + + +} +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY_UF_INSTANTIATOR_H */ diff --git a/src/theory/uf/theory_uf_instantiator.cpp b/src/theory/uf/theory_uf_instantiator.cpp new file mode 100644 index 000000000..9fdcb5952 --- /dev/null +++ b/src/theory/uf/theory_uf_instantiator.cpp @@ -0,0 +1,520 @@ +/********************* */ +/*! \file theory_uf_instantiator.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory uf instantiator class + **/ + +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/theory_engine.h" +#include "theory/uf/theory_uf.h" +#include "theory/uf/equality_engine.h" +//#include "theory/uf/inst_strategy_model_find.h" + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::uf; + +EqClassInfo::EqClassInfo( context::Context* c ) : d_funs( c ), d_pfuns( c ), d_disequal( c ){ + +} + +//set member +void EqClassInfo::setMember( Node n, TermDb* db ){ + if( n.getKind()==APPLY_UF ){ + d_funs[n.getOperator()] = true; + } + //add parent functions + for( std::map< Node, std::map< int, std::vector< Node > > >::iterator it = db->d_parents[n].begin(); + it != db->d_parents[n].end(); ++it ){ + d_pfuns[ it->first ] = true; + } +} + +//get has function +bool EqClassInfo::hasFunction( Node op ){ + return d_funs.find( op )!=d_funs.end(); +} + +bool EqClassInfo::hasParent( Node op ){ + return d_pfuns.find( op )!=d_pfuns.end(); +} + +//merge with another eq class info +void EqClassInfo::merge( EqClassInfo* eci ){ + for( BoolMap::iterator it = eci->d_funs.begin(); it != eci->d_funs.end(); it++ ) { + d_funs[ (*it).first ] = true; + } + for( BoolMap::iterator it = eci->d_pfuns.begin(); it != eci->d_pfuns.end(); it++ ) { + d_pfuns[ (*it).first ] = true; + } +} + +InstantiatorTheoryUf::InstantiatorTheoryUf(context::Context* c, CVC4::theory::QuantifiersEngine* qe, Theory* th) : +Instantiator( c, qe, th ) +{ + qe->setEqualityQuery( new EqualityQueryInstantiatorTheoryUf( this ) ); + + if( Options::current()->finiteModelFind ){ + //if( Options::current()->cbqi ){ + // addInstStrategy( new InstStrategyCheckCESolved( this, qe ) ); + //} + //addInstStrategy( new InstStrategyFiniteModelFind( c, this, ((TheoryUF*)th)->getStrongSolver(), qe ) ); + qe->getTermDatabase()->setMatchingActive( false ); + }else{ + if( Options::current()->cbqi ){ + addInstStrategy( new InstStrategyCheckCESolved( this, qe ) ); + } + if( Options::current()->userPatternsQuant ){ + d_isup = new InstStrategyUserPatterns( this, qe ); + addInstStrategy( d_isup ); + }else{ + d_isup = NULL; + } + InstStrategyAutoGenTriggers* i_ag = new InstStrategyAutoGenTriggers( this, qe, Trigger::TS_ALL, + InstStrategyAutoGenTriggers::RELEVANCE_DEFAULT, 3 ); + i_ag->setGenerateAdditional( true ); + addInstStrategy( i_ag ); + //addInstStrategy( new InstStrategyAddFailSplits( this, ie ) ); + addInstStrategy( new InstStrategyFreeVariable( this, qe ) ); + //d_isup->setPriorityOver( i_ag ); + //d_isup->setPriorityOver( i_agm ); + //i_ag->setPriorityOver( i_agm ); + } +} + +void InstantiatorTheoryUf::preRegisterTerm( Node t ){ + //d_quantEngine->addTermToDatabase( t ); +} + +void InstantiatorTheoryUf::assertNode( Node assertion ) +{ + Debug("quant-uf-assert") << "InstantiatorTheoryUf::check: " << assertion << std::endl; + //preRegisterTerm( assertion ); + d_quantEngine->addTermToDatabase( assertion ); + if( Options::current()->cbqi ){ + if( assertion.hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion.getAttribute(InstConstantAttribute()) ); + }else if( assertion.getKind()==NOT && assertion[0].hasAttribute(InstConstantAttribute()) ){ + setHasConstraintsFrom( assertion[0].getAttribute(InstConstantAttribute()) ); + } + } +} + +void InstantiatorTheoryUf::addUserPattern( Node f, Node pat ){ + if( d_isup ){ + d_isup->addUserPattern( f, pat ); + } + setHasConstraintsFrom( f ); +} + + +void InstantiatorTheoryUf::processResetInstantiationRound( Theory::Effort effort ){ + d_ground_reps.clear(); +} + +int InstantiatorTheoryUf::process( Node f, Theory::Effort effort, int e, int instLimit ){ + Debug("quant-uf") << "UF: Try to solve (" << e << ") for " << f << "... " << std::endl; + return InstStrategy::STATUS_SAT; +} + +void InstantiatorTheoryUf::debugPrint( const char* c ) +{ + +} + +bool InstantiatorTheoryUf::hasTerm( Node a ){ + return ((TheoryUF*)d_th)->d_equalityEngine.hasTerm( a ); +} + +bool InstantiatorTheoryUf::areEqual( Node a, Node b ){ + if( hasTerm( a ) && hasTerm( b ) ){ + return ((TheoryUF*)d_th)->d_equalityEngine.areEqual( a, b ); + }else{ + return a==b; + } +} + +bool InstantiatorTheoryUf::areDisequal( Node a, Node b ){ + if( hasTerm( a ) && hasTerm( b ) ){ + return ((TheoryUF*)d_th)->d_equalityEngine.areDisequal( a, b, false ); + }else{ + return false; + } +} + +Node InstantiatorTheoryUf::getRepresentative( Node a ){ + if( hasTerm( a ) ){ + return ((TheoryUF*)d_th)->d_equalityEngine.getRepresentative( a ); + }else{ + return a; + } +} + +Node InstantiatorTheoryUf::getInternalRepresentative( Node a ){ + if( d_ground_reps.find( a )==d_ground_reps.end() ){ + if( !hasTerm( a ) ){ + return a; + }else{ + Node rep = getRepresentative( a ); + if( !rep.hasAttribute(InstConstantAttribute()) ){ + //return the representative of a + d_ground_reps[a] = rep; + return rep; + }else{ + //otherwise, must search eq class + eq::EqClassIterator eqc_iter( rep, &((TheoryUF*)d_th)->d_equalityEngine ); + rep = Node::null(); + while( !eqc_iter.isFinished() ){ + if( !(*eqc_iter).hasAttribute(InstConstantAttribute()) ){ + d_ground_reps[ a ] = *eqc_iter; + return *eqc_iter; + } + eqc_iter++; + } + d_ground_reps[ a ] = a; + } + } + } + return d_ground_reps[a]; +} + +InstantiatorTheoryUf::Statistics::Statistics(): + //d_instantiations("InstantiatorTheoryUf::Total_Instantiations", 0), + d_instantiations_ce_solved("InstantiatorTheoryUf::Instantiations_CE-Solved", 0), + d_instantiations_e_induced("InstantiatorTheoryUf::Instantiations_E-Induced", 0), + d_instantiations_user_pattern("InstantiatorTheoryUf::Instantiations_User_Pattern", 0), + d_instantiations_guess("InstantiatorTheoryUf::Instantiations_Free_Var", 0), + d_instantiations_auto_gen("InstantiatorTheoryUf::Instantiations_Auto_Gen", 0), + d_instantiations_auto_gen_min("InstantiatorTheoryUf::Instantiations_Auto_Gen_Min", 0), + d_splits("InstantiatorTheoryUf::Total_Splits", 0) +{ + //StatisticsRegistry::registerStat(&d_instantiations); + StatisticsRegistry::registerStat(&d_instantiations_ce_solved); + StatisticsRegistry::registerStat(&d_instantiations_e_induced); + StatisticsRegistry::registerStat(&d_instantiations_user_pattern ); + StatisticsRegistry::registerStat(&d_instantiations_guess ); + StatisticsRegistry::registerStat(&d_instantiations_auto_gen ); + StatisticsRegistry::registerStat(&d_instantiations_auto_gen_min ); + StatisticsRegistry::registerStat(&d_splits); +} + +InstantiatorTheoryUf::Statistics::~Statistics(){ + //StatisticsRegistry::unregisterStat(&d_instantiations); + StatisticsRegistry::unregisterStat(&d_instantiations_ce_solved); + StatisticsRegistry::unregisterStat(&d_instantiations_e_induced); + StatisticsRegistry::unregisterStat(&d_instantiations_user_pattern ); + StatisticsRegistry::unregisterStat(&d_instantiations_guess ); + StatisticsRegistry::unregisterStat(&d_instantiations_auto_gen ); + StatisticsRegistry::unregisterStat(&d_instantiations_auto_gen_min ); + StatisticsRegistry::unregisterStat(&d_splits); +} + +/** new node */ +void InstantiatorTheoryUf::newEqClass( TNode n ){ + d_quantEngine->addTermToDatabase( n ); +} + +/** merge */ +void InstantiatorTheoryUf::merge( TNode a, TNode b ){ + if( Options::current()->efficientEMatching ){ + if( a.getKind()!=IFF && a.getKind()!=EQUAL && b.getKind()!=IFF && b.getKind()!=EQUAL ){ + Debug("efficient-e-match") << "Merging " << a << " with " << b << std::endl; + + //determine new candidates for instantiation + computeCandidatesPcPairs( a, b ); + computeCandidatesPcPairs( b, a ); + computeCandidatesPpPairs( a, b ); + computeCandidatesPpPairs( b, a ); + } + //merge eqc_ops of b into a + EqClassInfo* eci_a = getOrCreateEquivalenceClassInfo( a ); + EqClassInfo* eci_b = getOrCreateEquivalenceClassInfo( b ); + eci_a->merge( eci_b ); + } +} + +/** assert terms are disequal */ +void InstantiatorTheoryUf::assertDisequal( TNode a, TNode b, TNode reason ){ + +} + +EqClassInfo* InstantiatorTheoryUf::getEquivalenceClassInfo( Node n ) { + return d_eqc_ops.find( n )==d_eqc_ops.end() ? NULL : d_eqc_ops[n]; +} +EqClassInfo* InstantiatorTheoryUf::getOrCreateEquivalenceClassInfo( Node n ){ + Assert( n==getRepresentative( n ) ); + if( d_eqc_ops.find( n )==d_eqc_ops.end() ){ + EqClassInfo* eci = new EqClassInfo( d_th->getSatContext() ); + eci->setMember( n, d_quantEngine->getTermDatabase() ); + d_eqc_ops[n] = eci; + } + return d_eqc_ops[n]; +} + +void InstantiatorTheoryUf::computeCandidatesPcPairs( Node a, Node b ){ + Debug("efficient-e-match") << "Compute candidates for pc pairs..." << std::endl; + Debug("efficient-e-match") << " Eq class = ["; + outputEqClass( "efficient-e-match", a); + Debug("efficient-e-match") << "]" << std::endl; + EqClassInfo* eci_a = getOrCreateEquivalenceClassInfo( a ); + EqClassInfo* eci_b = getOrCreateEquivalenceClassInfo( a ); + for( BoolMap::iterator it = eci_a->d_funs.begin(); it != eci_a->d_funs.end(); it++ ) { + //the child function: a member of eq_class( a ) has top symbol g, in other words g is in funs( a ) + Node g = (*it).first; + Debug("efficient-e-match") << " Checking application " << g << std::endl; + //look at all parent/child pairs + for( std::map< Node, std::map< Node, std::vector< InvertedPathString > > >::iterator itf = d_pc_pairs[g].begin(); + itf != d_pc_pairs[g].end(); ++itf ){ + //f/g is a parent/child pair + Node f = itf->first; + if( eci_b->hasParent( f ) || true ){ + //DO_THIS: determine if f in pfuns( b ), only do the follow if so + Debug("efficient-e-match") << " Checking parent application " << f << std::endl; + //scan through the list of inverted path strings/candidate generators + for( std::map< Node, std::vector< InvertedPathString > >::iterator cit = itf->second.begin(); + cit != itf->second.end(); ++cit ){ + Node pat = cit->first; + Debug("efficient-e-match") << " Checking pattern " << pat << std::endl; + for( int c=0; c<(int)cit->second.size(); c++ ){ + Debug("efficient-e-match") << " Check inverted path string for pattern "; + outputInvertedPathString( "efficient-e-match", cit->second[c] ); + Debug("efficient-e-match") << std::endl; + + //collect all new relevant terms + std::vector< Node > terms; + terms.push_back( b ); + collectTermsIps( cit->second[c], terms ); + if( !terms.empty() ){ + Debug("efficient-e-match") << " -> Added terms (" << (int)terms.size() << "): "; + //add them as candidates to the candidate generator + for( int t=0; t<(int)terms.size(); t++ ){ + Debug("efficient-e-match") << terms[t] << " "; + //Notice() << "Add candidate (PC) " << terms[t] << std::endl; + for( int cg=0; cg<(int)d_pat_cand_gens[pat].size(); cg++ ){ + d_pat_cand_gens[pat][cg]->addCandidate( terms[t] ); + } + } + Debug("efficient-e-match") << std::endl; + } + } + } + } + } + } +} + +void InstantiatorTheoryUf::computeCandidatesPpPairs( Node a, Node b ){ + Debug("efficient-e-match") << "Compute candidates for pp pairs..." << std::endl; + EqClassInfo* eci_a = getOrCreateEquivalenceClassInfo( a ); + EqClassInfo* eci_b = getOrCreateEquivalenceClassInfo( a ); + for( std::map< Node, std::map< Node, std::map< Node, std::vector< IpsPair > > > >::iterator it = d_pp_pairs.begin(); + it != d_pp_pairs.end(); ++it ){ + Node f = it->first; + if( eci_a->hasParent( f ) ){ + Debug("efficient-e-match") << " Checking parent application " << f << std::endl; + for( std::map< Node, std::map< Node, std::vector< IpsPair > > >::iterator it2 = it->second.begin(); + it2 != it->second.end(); ++it2 ){ + Node g = it2->first; + if( eci_b->hasParent( g ) ){ + Debug("efficient-e-match") << " Checking parent application " << g << std::endl; + //if f in pfuns( a ) and g is in pfuns( b ), only do the follow if so + for( std::map< Node, std::vector< IpsPair > >::iterator cit = it2->second.begin(); + cit != it2->second.end(); ++cit ){ + Node pat = cit->first; + for( int c=0; c<(int)cit->second.size(); c++ ){ + std::vector< Node > a_terms; + a_terms.push_back( a ); + if( !a_terms.empty() ){ + collectTermsIps( cit->second[c].first, a_terms ); + std::vector< Node > b_terms; + b_terms.push_back( b ); + collectTermsIps( cit->second[c].first, b_terms ); + //take intersection + for( int t=0; t<(int)a_terms.size(); t++ ){ + if( std::find( b_terms.begin(), b_terms.end(), a_terms[t] )!=b_terms.end() ){ + //Notice() << "Add candidate (PP) " << a_terms[t] << std::endl; + Debug("efficient-e-match") << " -> Add term " << a_terms[t] << std::endl; + //add to all candidate generators having this term + for( int cg=0; cg<(int)d_pat_cand_gens[pat].size(); cg++ ){ + d_pat_cand_gens[pat][cg]->addCandidate( a_terms[t] ); + } + } + } + } + } + } + } + } + } + } +} + +void InstantiatorTheoryUf::collectTermsIps( InvertedPathString& ips, std::vector< Node >& terms, int index ){ + if( index<(int)ips.size() && !terms.empty() ){ + Debug("efficient-e-match-debug") << "> Process " << index << std::endl; + Node f = ips[index].first; + int arg = ips[index].second; + + //for each term in terms, determine if any term (modulo equality) has parent "f" from position "arg" + bool addRep = ( index!=(int)ips.size()-1 ); + std::vector< Node > newTerms; + for( int t=0; t<(int)terms.size(); t++ ){ + collectParentsTermsIps( terms[t], f, arg, newTerms, addRep ); + } + terms.clear(); + terms.insert( terms.begin(), newTerms.begin(), newTerms.end() ); + + Debug("efficient-e-match-debug") << "> Terms are now: "; + for( int t=0; t<(int)terms.size(); t++ ){ + Debug("efficient-e-match-debug") << terms[t] << " "; + } + Debug("efficient-e-match-debug") << std::endl; + + collectTermsIps( ips, terms, index+1 ); + } +} + +bool InstantiatorTheoryUf::collectParentsTermsIps( Node n, Node f, int arg, std::vector< Node >& terms, bool addRep, bool modEq ){ + bool addedTerm = false; + if( ((TheoryUF*)d_th)->d_equalityEngine.hasTerm( n ) && modEq ){ + Assert( getRepresentative( n )==n ); + //collect modulo equality + //DO_THIS: this should (if necessary) compute a current set of (f, arg) parents for n and cache it + eq::EqClassIterator eqc_iter( getRepresentative( n ), &((TheoryUF*)d_th)->d_equalityEngine ); + while( !eqc_iter.isFinished() ){ + if( collectParentsTermsIps( (*eqc_iter), f, arg, terms, addRep, false ) ){ + //if only one argument, we know we can stop (since all others added will be congruent) + if( f.getType().getNumChildren()==2 ){ + return true; + } + addedTerm = true; + } + eqc_iter++; + } + }else{ + TermDb* db = d_quantEngine->getTermDatabase(); + //see if parent f exists from argument arg + if( db->d_parents.find( n )!=db->d_parents.end() ){ + if( db->d_parents[n].find( f )!=db->d_parents[n].end() ){ + if( db->d_parents[n][f].find( arg )!=db->d_parents[n][f].end() ){ + for( int i=0; i<(int)db->d_parents[n][f][arg].size(); i++ ){ + Node t = db->d_parents[n][f][arg][i]; + if( addRep ){ + t = getRepresentative( t ); + } + if( std::find( terms.begin(), terms.end(), t )==terms.end() ){ + terms.push_back( t ); + } + addedTerm = true; + } + } + } + } + } + return addedTerm; +} + +void InstantiatorTheoryUf::registerPatternElementPairs2( Node opat, Node pat, InvertedPathString& ips, + std::map< Node, std::vector< std::pair< Node, InvertedPathString > > >& ips_map ){ + Assert( pat.getKind()==APPLY_UF ); + //add information for possible pp-pair + for( int i=0; i<(int)pat.getNumChildren(); i++ ){ + if( pat[i].getKind()==INST_CONSTANT ){ + ips_map[ pat[i] ].push_back( std::pair< Node, InvertedPathString >( pat.getOperator(), InvertedPathString( ips ) ) ); + } + } + ips.push_back( std::pair< Node, int >( pat.getOperator(), 0 ) ); + for( int i=0; i<(int)pat.getNumChildren(); i++ ){ + if( pat[i].getKind()==APPLY_UF ){ + ips.back().second = i; + registerPatternElementPairs2( opat, pat[i], ips, ips_map ); + Debug("pattern-element-opt") << "Found pc-pair ( " << pat.getOperator() << ", " << pat[i].getOperator() << " )" << std::endl; + Debug("pattern-element-opt") << " Path = "; + outputInvertedPathString( "pattern-element-opt", ips ); + Debug("pattern-element-opt") << std::endl; + //pat.getOperator() and pat[i].getOperator() are a pc-pair + d_pc_pairs[ pat[i].getOperator() ][ pat.getOperator() ][opat].push_back( InvertedPathString( ips ) ); + } + } + ips.pop_back(); +} + +void InstantiatorTheoryUf::registerPatternElementPairs( Node pat ){ + InvertedPathString ips; + std::map< Node, std::vector< std::pair< Node, InvertedPathString > > > ips_map; + registerPatternElementPairs2( pat, pat, ips, ips_map ); + for( std::map< Node, std::vector< std::pair< Node, InvertedPathString > > >::iterator it = ips_map.begin(); it != ips_map.end(); ++it ){ + for( int j=0; j<(int)it->second.size(); j++ ){ + for( int k=j+1; k<(int)it->second.size(); k++ ){ + //found a pp-pair + Debug("pattern-element-opt") << "Found pp-pair ( " << it->second[j].first << ", " << it->second[k].first << " )" << std::endl; + Debug("pattern-element-opt") << " Paths = "; + outputInvertedPathString( "pattern-element-opt", it->second[j].second ); + Debug("pattern-element-opt") << " and "; + outputInvertedPathString( "pattern-element-opt", it->second[k].second ); + Debug("pattern-element-opt") << std::endl; + d_pp_pairs[ it->second[j].first ][ it->second[k].first ][pat].push_back( IpsPair( it->second[j].second, it->second[k].second ) ); + } + } + } +} + +void InstantiatorTheoryUf::registerCandidateGenerator( CandidateGenerator* cg, Node pat ){ + Debug("efficient-e-match") << "Register candidate generator..." << pat << std::endl; + if( d_pat_cand_gens.find( pat )==d_pat_cand_gens.end() ){ + registerPatternElementPairs( pat ); + } + d_pat_cand_gens[pat].push_back( cg ); + + //take all terms from the uf term db and add to candidate generator + Node op = pat.getOperator(); + TermDb* db = d_quantEngine->getTermDatabase(); + for( int i=0; i<(int)db->d_op_map[op].size(); i++ ){ + cg->addCandidate( db->d_op_map[op][i] ); + } + d_cand_gens[op].push_back( cg ); + + Debug("efficient-e-match") << "Done." << std::endl; +} + +void InstantiatorTheoryUf::registerTrigger( Trigger* tr, Node op ){ + if( std::find( d_op_triggers[op].begin(), d_op_triggers[op].end(), tr )==d_op_triggers[op].end() ){ + d_op_triggers[op].push_back( tr ); + } +} + +void InstantiatorTheoryUf::outputEqClass( const char* c, Node n ){ + if( ((TheoryUF*)d_th)->d_equalityEngine.hasTerm( n ) ){ + eq::EqClassIterator eqc_iter( getRepresentative( n ), + &((TheoryUF*)d_th)->d_equalityEngine ); + bool firstTime = true; + while( !eqc_iter.isFinished() ){ + if( !firstTime ){ Debug(c) << ", "; } + Debug(c) << (*eqc_iter); + firstTime = false; + eqc_iter++; + } + }else{ + Debug(c) << n; + } +} + +void InstantiatorTheoryUf::outputInvertedPathString( const char* c, InvertedPathString& ips ){ + for( int i=0; i<(int)ips.size(); i++ ){ + if( i>0 ){ Debug( c ) << "."; } + Debug( c ) << ips[i].first << "." << ips[i].second; + } +} diff --git a/src/theory/uf/theory_uf_instantiator.h b/src/theory/uf/theory_uf_instantiator.h new file mode 100644 index 000000000..e50e3823c --- /dev/null +++ b/src/theory/uf/theory_uf_instantiator.h @@ -0,0 +1,201 @@ +/********************* */ +/*! \file theory_uf_instantiator.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Theory uf instantiator + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY_UF_INSTANTIATOR_H +#define __CVC4__THEORY_UF_INSTANTIATOR_H + +#include "theory/uf/inst_strategy.h" + +#include "context/context.h" +#include "context/context_mm.h" +#include "context/cdchunk_list.h" + +#include "util/stats.h" +#include "theory/uf/theory_uf.h" + +namespace CVC4 { +namespace theory { + +class TermDb; + +namespace uf { + +class InstantiatorTheoryUf; + +//equivalence class info +class EqClassInfo +{ +public: + typedef context::CDHashMap BoolMap; + typedef context::CDChunkList NodeList; +public: + //a list of operators that occur as top symbols in this equivalence class + // Efficient E-Matching for SMT Solvers: "funs" + BoolMap d_funs; + //a list of operators f for which a term of the form f( ... t ... ) exists + // Efficient E-Matching for SMT Solvers: "pfuns" + BoolMap d_pfuns; + //a list of equivalence classes that are disequal + BoolMap d_disequal; +public: + EqClassInfo( context::Context* c ); + ~EqClassInfo(){} + //set member + void setMember( Node n, TermDb* db ); + //has function "funs" + bool hasFunction( Node op ); + //has parent "pfuns" + bool hasParent( Node op ); + //merge with another eq class info + void merge( EqClassInfo* eci ); +}; + +class InstantiatorTheoryUf : public Instantiator{ + friend class ::CVC4::theory::InstMatchGenerator; + friend class ::CVC4::theory::TermDb; +protected: + typedef context::CDHashMap BoolMap; + typedef context::CDHashMap IntMap; + typedef context::CDChunkList NodeList; + typedef context::CDHashMap NodeLists; + /** map to representatives used */ + std::map< Node, Node > d_ground_reps; +protected: + /** instantiation strategies */ + InstStrategyUserPatterns* d_isup; +public: + InstantiatorTheoryUf(context::Context* c, CVC4::theory::QuantifiersEngine* qe, Theory* th); + ~InstantiatorTheoryUf() {} + /** assertNode method */ + void assertNode( Node assertion ); + /** Pre-register a term. Done one time for a Node, ever. */ + void preRegisterTerm( Node t ); + /** identify */ + std::string identify() const { return std::string("InstantiatorTheoryUf"); } + /** debug print */ + void debugPrint( const char* c ); + /** add user pattern */ + void addUserPattern( Node f, Node pat ); +private: + /** reset instantiation */ + void processResetInstantiationRound( Theory::Effort effort ); + /** calculate matches for quantifier f at effort */ + int process( Node f, Theory::Effort effort, int e, int instLimit ); +public: + /** statistics class */ + class Statistics { + public: + //IntStat d_instantiations; + IntStat d_instantiations_ce_solved; + IntStat d_instantiations_e_induced; + IntStat d_instantiations_user_pattern; + IntStat d_instantiations_guess; + IntStat d_instantiations_auto_gen; + IntStat d_instantiations_auto_gen_min; + IntStat d_splits; + Statistics(); + ~Statistics(); + }; + Statistics d_statistics; +public: + /** the base match */ + std::map< Node, InstMatch > d_baseMatch; +private: + //for each equivalence class + std::map< Node, EqClassInfo* > d_eqc_ops; +public: + /** general queries about equality */ + bool hasTerm( Node a ); + bool areEqual( Node a, Node b ); + bool areDisequal( Node a, Node b ); + Node getRepresentative( Node a ); + Node getInternalRepresentative( Node a ); + /** new node */ + void newEqClass( TNode n ); + /** merge */ + void merge( TNode a, TNode b ); + /** assert terms are disequal */ + void assertDisequal( TNode a, TNode b, TNode reason ); + /** get equivalence class info */ + EqClassInfo* getEquivalenceClassInfo( Node n ); + EqClassInfo* getOrCreateEquivalenceClassInfo( Node n ); +private: + typedef std::vector< std::pair< Node, int > > InvertedPathString; + typedef std::pair< InvertedPathString, InvertedPathString > IpsPair; + /** Parent/Child Pairs (for efficient E-matching) + So, for example, if we have the pattern f( g( x ) ), then d_pc_pairs[g][f][f( g( x ) )] = { f.0 }. + */ + std::map< Node, std::map< Node, std::map< Node, std::vector< InvertedPathString > > > > d_pc_pairs; + /** Parent/Parent Pairs (for efficient E-matching) */ + std::map< Node, std::map< Node, std::map< Node, std::vector< IpsPair > > > > d_pp_pairs; + /** list of all candidate generators for each operator */ + std::map< Node, std::vector< CandidateGenerator* > > d_cand_gens; + /** map from patterns to candidate generators */ + std::map< Node, std::vector< CandidateGenerator* > > d_pat_cand_gens; + /** helper functions */ + void registerPatternElementPairs2( Node opat, Node pat, InvertedPathString& ips, + std::map< Node, std::vector< std::pair< Node, InvertedPathString > > >& ips_map ); + void registerPatternElementPairs( Node pat ); + /** compute candidates for pc pairs */ + void computeCandidatesPcPairs( Node a, Node b ); + /** compute candidates for pp pairs */ + void computeCandidatesPpPairs( Node a, Node b ); + /** collect terms based on inverted path string */ + void collectTermsIps( InvertedPathString& ips, std::vector< Node >& terms, int index = 0 ); + bool collectParentsTermsIps( Node n, Node f, int arg, std::vector< Node >& terms, bool addRep, bool modEq = true ); +public: + /** Register candidate generator cg for pattern pat. (for use with efficient e-matching) + This request will ensure that calls will be made to cg->addCandidate( n ) for all + ground terms n that are relevant for matching with pat. + */ + void registerCandidateGenerator( CandidateGenerator* cg, Node pat ); +private: + /** triggers */ + std::map< Node, std::vector< Trigger* > > d_op_triggers; +public: + /** register trigger (for eager quantifier instantiation) */ + void registerTrigger( Trigger* tr, Node op ); +public: + /** output eq class */ + void outputEqClass( const char* c, Node n ); + /** output inverted path string */ + void outputInvertedPathString( const char* c, InvertedPathString& ips ); +};/* class InstantiatorTheoryUf */ + +/** equality query object using instantiator theory uf */ +class EqualityQueryInstantiatorTheoryUf : public EqualityQuery +{ +private: + /** pointer to instantiator uf class */ + InstantiatorTheoryUf* d_ith; +public: + EqualityQueryInstantiatorTheoryUf( InstantiatorTheoryUf* ith ) : d_ith( ith ){} + ~EqualityQueryInstantiatorTheoryUf(){} + /** general queries about equality */ + bool hasTerm( Node a ) { return d_ith->hasTerm( a ); } + Node getRepresentative( Node a ) { return d_ith->getRepresentative( a ); } + bool areEqual( Node a, Node b ) { return d_ith->areEqual( a, b ); } + bool areDisequal( Node a, Node b ) { return d_ith->areDisequal( a, b ); } + Node getInternalRepresentative( Node a ) { return d_ith->getInternalRepresentative( a ); } +}; /* EqualityQueryInstantiatorTheoryUf */ + +} +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY_UF_INSTANTIATOR_H */ diff --git a/src/theory/uf/theory_uf_strong_solver.cpp b/src/theory/uf/theory_uf_strong_solver.cpp new file mode 100644 index 000000000..a793b6a57 --- /dev/null +++ b/src/theory/uf/theory_uf_strong_solver.cpp @@ -0,0 +1,1267 @@ +/********************* */ +/*! \file theory_uf_strong_solver.cpp + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Implementation of theory uf strong solver class + **/ + +#include "theory/uf/theory_uf_strong_solver.h" +#include "theory/uf/theory_uf.h" +#include "theory/uf/equality_engine.h" +#include "theory/uf/theory_uf_instantiator.h" +#include "theory/theory_engine.h" + +//#define USE_REGION_SAT + +using namespace std; +using namespace CVC4; +using namespace CVC4::kind; +using namespace CVC4::context; +using namespace CVC4::theory; +using namespace CVC4::theory::uf; + +void StrongSolverTheoryUf::ConflictFind::Region::takeNode( StrongSolverTheoryUf::ConflictFind::Region* r, Node n ){ + //Debug("uf-ss") << "takeNode " << r << " " << n << std::endl; + //Debug("uf-ss") << "r : " << std::endl; + //r->debugPrint("uf-ss"); + //Debug("uf-ss") << "this : " << std::endl; + //debugPrint("uf-ss"); + Assert( !hasRep( n ) ); + Assert( r->hasRep( n ) ); + //add representative + setRep( n, true ); + //take disequalities from r + RegionNodeInfo* rni = r->d_nodes[n]; + for( int t=0; t<2; t++ ){ + RegionNodeInfo::DiseqList* del = rni->d_disequalities[t]; + for( NodeBoolMap::iterator it = del->d_disequalities.begin(); it != del->d_disequalities.end(); ++it ){ + if( (*it).second ){ + r->setDisequal( n, (*it).first, t, false ); + if( t==0 ){ + if( hasRep( (*it).first ) ){ + setDisequal( (*it).first, n, 0, false ); + setDisequal( (*it).first, n, 1, true ); + setDisequal( n, (*it).first, 1, true ); + }else{ + setDisequal( n, (*it).first, 0, true ); + } + }else{ + r->setDisequal( (*it).first, n, 1, false ); + r->setDisequal( (*it).first, n, 0, true ); + setDisequal( n, (*it).first, 0, true ); + } + } + } + } + //remove representative + r->setRep( n, false ); + //Debug("uf-ss") << "done takeNode " << r << " " << n << std::endl; +} + +void StrongSolverTheoryUf::ConflictFind::Region::combine( StrongSolverTheoryUf::ConflictFind::Region* r ){ + //take all nodes from r + for( std::map< Node, RegionNodeInfo* >::iterator it = r->d_nodes.begin(); it != r->d_nodes.end(); ++it ){ + if( it->second->d_valid ){ + setRep( it->first, true ); + } + } + for( std::map< Node, RegionNodeInfo* >::iterator it = r->d_nodes.begin(); it != r->d_nodes.end(); ++it ){ + if( it->second->d_valid ){ + //take disequalities from r + Node n = it->first; + RegionNodeInfo* rni = it->second; + for( int t=0; t<2; t++ ){ + RegionNodeInfo::DiseqList* del = rni->d_disequalities[t]; + for( NodeBoolMap::iterator it2 = del->d_disequalities.begin(); it2 != del->d_disequalities.end(); ++it2 ){ + if( (*it2).second ){ + if( t==0 && hasRep( (*it2).first ) ){ + setDisequal( (*it2).first, n, 0, false ); + setDisequal( (*it2).first, n, 1, true ); + setDisequal( n, (*it2).first, 1, true ); + }else{ + setDisequal( n, (*it2).first, t, true ); + } + } + } + } + } + } + r->d_valid = false; +} + +void StrongSolverTheoryUf::ConflictFind::Region::setRep( Node n, bool valid ){ + Assert( hasRep( n )!=valid ); + if( d_nodes.find( n )==d_nodes.end() && valid ){ + d_nodes[n] = new RegionNodeInfo( d_cf->d_th->getSatContext() ); + } + d_nodes[n]->d_valid = valid; + d_reps_size = d_reps_size + ( valid ? 1 : -1 ); + if( d_testClique.find( n )!=d_testClique.end() && d_testClique[n] ){ + Assert( !valid ); + d_testClique[n] = false; + d_testCliqueSize = d_testCliqueSize - 1; + //remove all splits involving n + for( NodeBoolMap::iterator it = d_splits.begin(); it != d_splits.end(); ++it ){ + if( (*it).second ){ + if( (*it).first[0]==n || (*it).first[1]==n ){ + d_splits[ (*it).first ] = false; + d_splitsSize = d_splitsSize - 1; + } + } + } + } +} + +/** setEqual */ +void StrongSolverTheoryUf::ConflictFind::Region::setEqual( Node a, Node b ){ + Assert( hasRep( a ) && hasRep( b ) ); + //move disequalities of b over to a + for( int t=0; t<2; t++ ){ + RegionNodeInfo::DiseqList* del = d_nodes[b]->d_disequalities[t]; + for( NodeBoolMap::iterator it = del->d_disequalities.begin(); it != del->d_disequalities.end(); ++it ){ + if( (*it).second ){ + Node n = (*it).first; + Region* nr = d_cf->d_regions[ d_cf->d_regions_map[ n ] ]; + if( !isDisequal( a, n, t ) ){ + setDisequal( a, n, t, true ); + nr->setDisequal( n, a, t, true ); + } + setDisequal( b, n, t, false ); + nr->setDisequal( n, b, t, false ); + } + } + } + //remove b from representatives + setRep( b, false ); +} + +void StrongSolverTheoryUf::ConflictFind::Region::setDisequal( Node n1, Node n2, int type, bool valid ){ + //Debug("uf-ss-region-debug") << "set disequal " << n1 << " " << n2 << " " << type << " " << valid << std::endl; + //debugPrint("uf-ss-region-debug"); + //Assert( isDisequal( n1, n2, type )!=valid ); + if( isDisequal( n1, n2, type )!=valid ){ //DO_THIS: make assertion + d_nodes[ n1 ]->d_disequalities[type]->setDisequal( n2, valid ); + if( type==0 ){ + d_total_diseq_external = d_total_diseq_external + ( valid ? 1 : -1 ); + }else{ + d_total_diseq_internal = d_total_diseq_internal + ( valid ? 1 : -1 ); + if( valid ){ + //if they are both a part of testClique, then remove split + if( d_testClique.find( n1 )!=d_testClique.end() && d_testClique[n1] && + d_testClique.find( n2 )!=d_testClique.end() && d_testClique[n2] ){ + Node eq = NodeManager::currentNM()->mkNode( EQUAL, n1, n2 ); + if( d_splits.find( eq )!=d_splits.end() && d_splits[ eq ] ){ + Debug("uf-ss-debug") << "removing split for " << n1 << " " << n2 << std::endl; + d_splits[ eq ] = false; + d_splitsSize = d_splitsSize - 1; + } + } + } + } + } +} + +bool StrongSolverTheoryUf::ConflictFind::Region::isDisequal( Node n1, Node n2, int type ){ + RegionNodeInfo::DiseqList* del = d_nodes[ n1 ]->d_disequalities[type]; + return del->d_disequalities.find( n2 )!=del->d_disequalities.end() && del->d_disequalities[n2]; +} + +bool StrongSolverTheoryUf::ConflictFind::Region::getMustCombine( int cardinality ){ + if( d_total_diseq_external>=long(cardinality) ){ + //The number of external disequalities is greater than or equal to cardinality. + //Thus, a clique of size cardinality+1 may exist between nodes in d_regions[i] and other regions + //Check if this is actually the case: must have n nodes with outgoing degree (cardinality+1-n) for some n>0 + std::vector< int > degrees; + for( std::map< Node, RegionNodeInfo* >::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + RegionNodeInfo* rni = it->second; + if( rni->d_valid ){ + if( rni->getNumDisequalities()>=cardinality ){ + int outDeg = rni->getNumExternalDisequalities(); + if( outDeg>=cardinality ){ + //we have 1 node of degree greater than (cardinality) + return true; + }else if( outDeg>0 ){ + degrees.push_back( outDeg ); + if( (int)degrees.size()>=cardinality ){ + //we have (cardinality) nodes of degree 1 + return true; + } + } + } + } + } + std::sort( degrees.begin(), degrees.end() ); + for( int i=0; i<(int)degrees.size(); i++ ){ + if( degrees[i]>=cardinality+1-((int)degrees.size()-i) ){ + return true; + } + } + } + return false; +} + +struct sortInternalDegree { + StrongSolverTheoryUf::ConflictFind::Region* r; + bool operator() (Node i,Node j) { return (r->d_nodes[i]->getNumInternalDisequalities()>r->d_nodes[j]->getNumInternalDisequalities());} +}; + + +bool StrongSolverTheoryUf::ConflictFind::Region::check( Theory::Effort level, int cardinality, std::vector< Node >& clique ){ + if( d_reps_size>long(cardinality) ){ + if( d_reps_size>long(cardinality) && d_total_diseq_internal==d_reps_size*( d_reps_size - 1 ) ){ + //quick clique check, all reps form a clique + for( std::map< Node, RegionNodeInfo* >::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + if( it->second->d_valid ){ + clique.push_back( it->first ); + } + } + return true; + }else{ + //build test clique, up to size cardinality+1 + if( d_testCliqueSize<=long(cardinality) ){ + std::vector< Node > newClique; + if( d_testCliqueSize::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + //if not in the test clique, add it to the set of new members + if( it->second->d_valid && ( d_testClique.find( it->first )==d_testClique.end() || !d_testClique[ it->first ] ) ){ + newClique.push_back( it->first ); + } + } + //choose remaining nodes with the highest degrees + sortInternalDegree sidObj; + sidObj.r = this; + std::sort( newClique.begin(), newClique.end(), sidObj ); + newClique.erase( newClique.begin() + ( cardinality - d_testCliqueSize ) + 1, newClique.end() ); + }else{ + //scan for the highest degree + int maxDeg = -1; + Node maxNode; + for( std::map< Node, RegionNodeInfo* >::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + //if not in the test clique, add it to the set of new members + if( it->second->d_valid && ( d_testClique.find( it->first )==d_testClique.end() || !d_testClique[ it->first ] ) ){ + if( it->second->getNumInternalDisequalities()>maxDeg ){ + maxDeg = it->second->getNumInternalDisequalities(); + maxNode = it->first; + } + } + } + Assert( maxNode!=Node::null() ); + newClique.push_back( maxNode ); + } + //check splits internal to new members + for( int j=0; j<(int)newClique.size(); j++ ){ + Debug("uf-ss-debug") << "Choose to add clique member " << newClique[j] << std::endl; + for( int k=(j+1); k<(int)newClique.size(); k++ ){ + if( !isDisequal( newClique[j], newClique[k], 1 ) ){ + d_splits[ NodeManager::currentNM()->mkNode( EQUAL, newClique[j], newClique[k] ) ] = true; + d_splitsSize = d_splitsSize + 1; + } + } + //check disequalities with old members + for( NodeBoolMap::iterator it = d_testClique.begin(); it != d_testClique.end(); ++it ){ + if( (*it).second ){ + if( !isDisequal( (*it).first, newClique[j], 1 ) ){ + d_splits[ NodeManager::currentNM()->mkNode( EQUAL, (*it).first, newClique[j] ) ] = true; + d_splitsSize = d_splitsSize + 1; + } + } + } + } + //add new clique members to test clique + for( int j=0; j<(int)newClique.size(); j++ ){ + d_testClique[ newClique[j] ] = true; + d_testCliqueSize = d_testCliqueSize + 1; + } + } + Assert( d_testCliqueSize==long(cardinality+1) ); + if( d_splitsSize==0 ){ + //test clique is a clique + for( NodeBoolMap::iterator it = d_testClique.begin(); it != d_testClique.end(); ++it ){ + if( (*it).second ){ + clique.push_back( (*it).first ); + } + } + return true; + } + } + } + return false; +} + +Node StrongSolverTheoryUf::ConflictFind::Region::getBestSplit(){ + //take the first split you find + for( NodeBoolMap::iterator it = d_splits.begin(); it != d_splits.end(); ++it ){ + if( (*it).second ){ + return (*it).first; + } + } + return Node::null(); +} + +void StrongSolverTheoryUf::ConflictFind::Region::addSplit( OutputChannel* out ){ + Node s = getBestSplit(); + //add lemma to output channel + Assert( s!=Node::null() && s.getKind()==EQUAL ); + s = Rewriter::rewrite( s ); + Debug("uf-ss-lemma") << "*** Split on " << s << std::endl; + //Debug("uf-ss-lemma") << d_th->getEqualityEngine()->areEqual( s[0], s[1] ) << " "; + //Debug("uf-ss-lemma") << d_th->getEqualityEngine()->areDisequal( s[0], s[1] ) << std::endl; + //Debug("uf-ss-lemma") << s[0].getType() << " " << s[1].getType() << std::endl; + debugPrint("uf-ss-temp"); + //Notice() << "*** Split on " << s << std::endl; + //split on the equality s + out->split( s ); + //tell the sat solver to explore the equals branch first + out->requirePhase( s, true ); +} + +void StrongSolverTheoryUf::ConflictFind::Region::getRepresentatives( std::vector< Node >& reps ){ + for( std::map< Node, RegionNodeInfo* >::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + RegionNodeInfo* rni = it->second; + if( rni->d_valid ){ + reps.push_back( it->first ); + } + } +} + +bool StrongSolverTheoryUf::ConflictFind::Region::minimize( OutputChannel* out ){ + if( hasSplits() ){ + addSplit( out ); + return false; + }else{ + return true; + } +} + +void StrongSolverTheoryUf::ConflictFind::Region::getNumExternalDisequalities( std::map< Node, int >& num_ext_disequalities ){ + for( std::map< Node, RegionNodeInfo* >::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + RegionNodeInfo* rni = it->second; + if( rni->d_valid ){ + RegionNodeInfo::DiseqList* del = rni->d_disequalities[0]; + for( NodeBoolMap::iterator it2 = del->d_disequalities.begin(); it2 != del->d_disequalities.end(); ++it2 ){ + if( (*it2).second ){ + num_ext_disequalities[ (*it2).first ]++; + } + } + } + } +} + +void StrongSolverTheoryUf::ConflictFind::Region::debugPrint( const char* c, bool incClique ){ + Debug( c ) << "Num reps: " << d_reps_size << std::endl; + for( std::map< Node, RegionNodeInfo* >::iterator it = d_nodes.begin(); it != d_nodes.end(); ++it ){ + RegionNodeInfo* rni = it->second; + if( rni->d_valid ){ + Node n = it->first; + Debug( c ) << " " << n << std::endl; + for( int i=0; i<2; i++ ){ + Debug( c ) << " " << ( i==0 ? "Ext" : "Int" ) << " disequal:"; + RegionNodeInfo::DiseqList* del = rni->d_disequalities[i]; + for( NodeBoolMap::iterator it2 = del->d_disequalities.begin(); it2 != del->d_disequalities.end(); ++it2 ){ + if( (*it2).second ){ + Debug( c ) << " " << (*it2).first; + } + } + Debug( c ) << ", total = " << del->d_size << std::endl; + } + } + } + Debug( c ) << "Total disequal: " << d_total_diseq_external << " external," << std::endl; + Debug( c ) << " " << d_total_diseq_internal<< " internal." << std::endl; + + if( incClique ){ + Debug( c ) << "Candidate clique members: " << std::endl; + Debug( c ) << " "; + for( NodeBoolMap::iterator it = d_testClique.begin(); it != d_testClique.end(); ++ it ){ + if( (*it).second ){ + Debug( c ) << (*it).first << " "; + } + } + Debug( c ) << ", size = " << d_testCliqueSize << std::endl; + Debug( c ) << "Required splits: " << std::endl; + Debug( c ) << " "; + for( NodeBoolMap::iterator it = d_splits.begin(); it != d_splits.end(); ++ it ){ + if( (*it).second ){ + Debug( c ) << (*it).first << " "; + } + } + Debug( c ) << ", size = " << d_splitsSize << std::endl; + } +} + +void StrongSolverTheoryUf::ConflictFind::combineRegions( int ai, int bi ){ + Debug("uf-ss-region") << "uf-ss: Combine Region #" << bi << " with Region #" << ai << std::endl; + Assert( isValid( ai ) && isValid( bi ) ); + for( std::map< Node, Region::RegionNodeInfo* >::iterator it = d_regions[bi]->d_nodes.begin(); it != d_regions[bi]->d_nodes.end(); ++it ){ + Region::RegionNodeInfo* rni = it->second; + if( rni->d_valid ){ + d_regions_map[ it->first ] = ai; + } + } + //update regions disequal DO_THIS? + d_regions[ai]->combine( d_regions[bi] ); + d_regions[bi]->d_valid = false; +} + +void StrongSolverTheoryUf::ConflictFind::moveNode( Node n, int ri ){ + Debug("uf-ss-region") << "uf-ss: Move node " << n << " to Region #" << ri << std::endl; + Assert( isValid( d_regions_map[ n ] ) ); + Assert( isValid( ri ) ); + ////update regions disequal DO_THIS? + //Region::RegionNodeInfo::DiseqList* del = d_regions[ d_regions_map[n] ]->d_nodes[n]->d_disequalities[0]; + //for( NodeBoolMap::iterator it = del->d_disequalities.begin(); it != del->d_disequalities.end(); ++it ){ + // if( (*it).second ){ + // } + //} + //move node to region ri + d_regions[ri]->takeNode( d_regions[ d_regions_map[n] ], n ); + d_regions_map[n] = ri; +} + +int StrongSolverTheoryUf::ConflictFind::getNumDisequalitiesToRegion( Node n, int ri ){ + int ni = d_regions_map[n]; + int counter = 0; + Region::RegionNodeInfo::DiseqList* del = d_regions[ni]->d_nodes[n]->d_disequalities[0]; + for( NodeBoolMap::iterator it = del->d_disequalities.begin(); it != del->d_disequalities.end(); ++it ){ + if( (*it).second ){ + if( d_regions_map[ (*it).first ]==ri ){ + counter++; + } + } + } + return counter; +} + +void StrongSolverTheoryUf::ConflictFind::getDisequalitiesToRegions( int ri, std::map< int, int >& regions_diseq ){ + for( std::map< Node, Region::RegionNodeInfo* >::iterator it = d_regions[ri]->d_nodes.begin(); + it != d_regions[ri]->d_nodes.end(); ++it ){ + if( it->second->d_valid ){ + Region::RegionNodeInfo::DiseqList* del = it->second->d_disequalities[0]; + for( NodeBoolMap::iterator it2 = del->d_disequalities.begin(); it2 != del->d_disequalities.end(); ++it2 ){ + if( (*it2).second ){ + //if( !isValid( d_regions_map[ (*it2).first ] ) ){ + // Debug( "uf-ss-temp" ) << "^^^" << ri << " " << d_regions_map[ (*it2).first ].get() << std::endl; + // debugPrint( "uf-ss-temp" ); + //} + Assert( isValid( d_regions_map[ (*it2).first ] ) ); + //Notice() << "Found disequality with " << (*it2).first << ", region = " << d_regions_map[ (*it2).first ] << std::endl; + regions_diseq[ d_regions_map[ (*it2).first ] ]++; + } + } + } + } +} + +void StrongSolverTheoryUf::ConflictFind::explainClique( std::vector< Node >& clique, OutputChannel* out ){ + Assert( d_cardinality>0 ); + while( clique.size()>long(d_cardinality+1) ){ + clique.pop_back(); + } + //found a clique + Debug("uf-ss") << "Found a clique (cardinality=" << d_cardinality << ") :" << std::endl; + Debug("uf-ss") << " "; + for( int i=0; i<(int)clique.size(); i++ ){ + Debug("uf-ss") << clique[i] << " "; + } + Debug("uf-ss") << std::endl; + Debug("uf-ss") << "Finding clique disequalities..." << std::endl; + std::vector< Node > conflict; + //collect disequalities, and nodes that must be equal within representatives + std::map< Node, std::map< Node, bool > > explained; + std::map< Node, std::map< Node, bool > > nodesWithinRep; + for( int i=0; i<(int)d_disequalities_index; i++ ){ + //if both sides of disequality exist in clique + Node r1 = d_th->d_equalityEngine.getRepresentative( d_disequalities[i][0][0] ); + Node r2 = d_th->d_equalityEngine.getRepresentative( d_disequalities[i][0][1] ); + if( r1!=r2 && ( explained.find( r1 )==explained.end() || explained[r1].find( r2 )==explained[r1].end() ) && + std::find( clique.begin(), clique.end(), r1 )!=clique.end() && + std::find( clique.begin(), clique.end(), r2 )!=clique.end() ){ + explained[r1][r2] = true; + explained[r2][r1] = true; + conflict.push_back( d_disequalities[i] ); + nodesWithinRep[r1][ d_disequalities[i][0][0] ] = true; + nodesWithinRep[r2][ d_disequalities[i][0][1] ] = true; + if( conflict.size()==((int)clique.size()*( (int)clique.size()-1 )/2) ){ + break; + } + } + } + //Debug("uf-ss") << conflict.size() << " " << clique.size() << std::endl; + Assert( (int)conflict.size()==((int)clique.size()*( (int)clique.size()-1 )/2) ); + //Assert( (int)conflict.size()==(int)clique.size()*( (int)clique.size()-1 )/2 ); + Debug("uf-ss") << "Finding clique equalities internal to eq classes..." << std::endl; + //now, we must explain equalities within each equivalence class + for( std::map< Node, std::map< Node, bool > >::iterator it = nodesWithinRep.begin(); it != nodesWithinRep.end(); ++it ){ + if( it->second.size()>1 ){ + Node prev; + //add explanation of t1 = t2 = ... = tn + for( std::map< Node, bool >::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2 ){ + if( prev!=Node::null() ){ + //explain it2->first and prev + std::vector< TNode > expl; + d_th->d_equalityEngine.explainEquality( it2->first, prev, true, expl ); + for( int i=0; i<(int)expl.size(); i++ ){ + if( std::find( conflict.begin(), conflict.end(), expl[i] )==conflict.end() ){ + conflict.push_back( expl[i] ); + } + } + } + prev = it2->first; + } + } + } + Debug("uf-ss") << "Explanation of clique (size=" << conflict.size() << ") = " << std::endl; + for( int i=0; i<(int)conflict.size(); i++ ){ + Debug("uf-ss") << conflict[i] << " "; + } + Debug("uf-ss") << std::endl; + //now, make the conflict + Node conflictNode = conflict.size()==1 ? conflict[0] : NodeManager::currentNM()->mkNode( AND, conflict ); + //add cardinality constraint + //Node cardNode = NodeManager::currentNM()->mkNode( CARDINALITY_CONSTRAINT, d_cardinality_lemma_term, + // NodeManager::currentNM()->mkConst( Rational(d_cardinality) ) ); + Node cardNode = d_cardinality_literal[ d_cardinality ]; + conflictNode = NodeManager::currentNM()->mkNode( IMPLIES, conflictNode, cardNode.notNode() ); + Debug("uf-ss-lemma") << "*** Add clique conflict " << conflictNode << std::endl; + //Notice() << "*** Add clique conflict " << conflictNode << std::endl; + out->lemma( conflictNode ); + ++( d_th->getStrongSolver()->d_statistics.d_clique_lemmas ); + + //DO_THIS: ensure that the same clique is not reported??? Check standard effort after assertDisequal can produce same clique. +} + +/** new node */ +void StrongSolverTheoryUf::ConflictFind::newEqClass( Node n ){ + if( d_regions_map.find( n )==d_regions_map.end() ){ + d_regions_map[n] = d_regions_index; + Debug("uf-ss") << "StrongSolverTheoryUf: New Eq Class " << n << std::endl; + Debug("uf-ss-debug") << d_regions_index << " " << (int)d_regions.size() << std::endl; + if( d_regions_indexdebugPrint("uf-ss-debug",true); + d_regions[ d_regions_index ]->d_valid = true; + //Assert( d_regions[ d_regions_index ]->d_valid ); + Assert( d_regions[ d_regions_index ]->getNumReps()==0 ); + }else{ + d_regions.push_back( new Region( this, d_th->getSatContext() ) ); + } + d_regions[ d_regions_index ]->setRep( n, true ); + d_regions_index = d_regions_index + 1; + d_reps = d_reps + 1; + } +} + +/** merge */ +void StrongSolverTheoryUf::ConflictFind::merge( Node a, Node b ){ + //Assert( a==d_th->d_equalityEngine.getRepresentative( a ) ); + //Assert( b==d_th->d_equalityEngine.getRepresentative( b ) ); + Debug("uf-ss") << "StrongSolverTheoryUf: Merging " << a << " = " << b << "..." << std::endl; + if( a!=b ){ + Assert( d_regions_map.find( a )!=d_regions_map.end() ); + Assert( d_regions_map.find( b )!=d_regions_map.end() ); + int ai = d_regions_map[a]; + int bi = d_regions_map[b]; + Debug("uf-ss") << " regions: " << ai << " " << bi << std::endl; + if( ai!=bi ){ + if( d_regions[ai]->getNumReps()==1 ){ + combineRegions( bi, ai ); + d_regions[bi]->setEqual( a, b ); + checkRegion( bi ); + }else if( d_regions[bi]->getNumReps()==1 ){ + combineRegions( ai, bi ); + d_regions[ai]->setEqual( a, b ); + checkRegion( ai ); + }else{ + // either move a to d_regions[bi], or b to d_regions[ai] + int aex = d_regions[ai]->d_nodes[a]->getNumInternalDisequalities() - getNumDisequalitiesToRegion( a, bi ); + int bex = d_regions[bi]->d_nodes[b]->getNumInternalDisequalities() - getNumDisequalitiesToRegion( b, ai ); + //based on which would produce the fewest number of external disequalities + if( aexsetEqual( a, b ); + }else{ + moveNode( b, ai ); + d_regions[ai]->setEqual( a, b ); + } + checkRegion( ai ); + checkRegion( bi ); + } + }else{ + d_regions[ai]->setEqual( a, b ); + checkRegion( ai ); + } + d_reps = d_reps - 1; + d_regions_map[b] = -1; + } + Debug("uf-ss") << "Done merge." << std::endl; +} + +/** assert terms are disequal */ +void StrongSolverTheoryUf::ConflictFind::assertDisequal( Node a, Node b, Node reason ){ + //if they are not already disequal + a = d_th->d_equalityEngine.getRepresentative( a ); + b = d_th->d_equalityEngine.getRepresentative( b ); + if( !d_th->d_equalityEngine.areDisequal( a, b, true ) ){ + Debug("uf-ss") << "Assert disequal " << a << " != " << b << "..." << std::endl; + //if( reason.getKind()!=NOT || ( reason[0].getKind()!=EQUAL && reason[0].getKind()!=IFF ) || + // a!=reason[0][0] || b!=reason[0][1] ){ + // Notice() << "Assert disequal " << a << " != " << b << ", reason = " << reason << "..." << std::endl; + //} + Debug("uf-ss-disequal") << "Assert disequal " << a << " != " << b << "..." << std::endl; + //add to list of disequalities + if( d_disequalities_indexsetDisequal( a, b, 1, true ); + d_regions[ai]->setDisequal( b, a, 1, true ); + }else{ + //external disequality + d_regions[ai]->setDisequal( a, b, 0, true ); + d_regions[bi]->setDisequal( b, a, 0, true ); + checkRegion( ai ); + checkRegion( bi ); + } + //Notice() << "done" << std::endl; + } +} + +void StrongSolverTheoryUf::ConflictFind::assertCardinality( int c, bool val ){ + Assert( d_cardinality_literal.find( c )!=d_cardinality_literal.end() ); + d_cardinality_assertions[ d_cardinality_literal[c] ] = val; + if( val ){ + d_hasCard = true; + } +} + +bool StrongSolverTheoryUf::ConflictFind::checkRegion( int ri, bool rec ){ + if( isValid(ri) ){ + Assert( d_cardinality>0 ); + //first check if region is in conflict + std::vector< Node > clique; + if( d_regions[ri]->check( Theory::EFFORT_STANDARD, d_cardinality, clique ) ){ + //explain clique + explainClique( clique, &d_th->getOutputChannel() ); + return false; + }else if( d_regions[ri]->getMustCombine( d_cardinality ) ){ + //this region must merge with another + Debug("uf-ss-check-region") << "We must combine Region #" << ri << ". " << std::endl; + d_regions[ri]->debugPrint("uf-ss-check-region"); + ////alternatively, check if we can reduce the number of external disequalities by moving single nodes + //for( std::map< Node, bool >::iterator it = d_regions[i]->d_reps.begin(); it != d_regions[i]->d_reps.end(); ++it ){ + // if( it->second ){ + // int inDeg = d_regions[i]->d_disequalities_size[1][ it-> first ]; + // int outDeg = d_regions[i]->d_disequalities_size[1][ it-> first ]; + // if( inDeg regions_diseq; + getDisequalitiesToRegions( ri, regions_diseq ); + for( std::map< int, int >::iterator it = regions_diseq.begin(); it != regions_diseq.end(); ++it ){ + Debug("uf-ss-check-region") << it->first << " : " << it->second << std::endl; + } + for( std::map< int, int >::iterator it = regions_diseq.begin(); it != regions_diseq.end(); ++it ){ + Assert( it->first!=ri ); + Assert( isValid( it->first ) ); + Assert( d_regions[ it->first ]->getNumReps()>0 ); + double tempScore = double(it->second)/double(d_regions[it->first]->getNumReps() ); + if( tempScore>maxScore ){ + maxRegion = it->first; + maxScore = tempScore; + } + } + Assert( maxRegion!=-1 ); + Debug("uf-ss-check-region") << "Combine with region #" << maxRegion << ":" << std::endl; + d_regions[maxRegion]->debugPrint("uf-ss-check-region"); + combineRegions( ri, maxRegion ); + if( rec ){ + checkRegion( ri, rec ); + } + //std::vector< Node > clique; + //if( d_regions[ri]->check( Theory::EFFORT_STANDARD, cardinality, clique ) ){ + // //explain clique + // Notice() << "found clique " << std::endl; + //} + return true; + } + } + return false; +} + +bool StrongSolverTheoryUf::ConflictFind::disambiguateTerms( OutputChannel* out ){ + Debug("uf-ss-disamb") << "Disambiguate terms." << std::endl; + bool lemmaAdded = false; + //otherwise, determine ambiguous pairs of ground terms for relevant sorts + TermDb* db = d_th->getQuantifiersEngine()->getTermDatabase(); + for( std::map< Node, std::vector< Node > >::iterator it = db->d_op_map.begin(); it != db->d_op_map.end(); ++it ){ + Debug("uf-ss-disamb") << "Check " << it->first << std::endl; + if( it->second.size()>1 ){ + if( StrongSolverTheoryUf::involvesRelevantType( it->second[0] ) ){ + for( int i=0; i<(int)it->second.size(); i++ ){ + for( int j=(i+1); j<(int)it->second.size(); j++ ){ + Kind knd = it->second[i].getType()==NodeManager::currentNM()->booleanType() ? IFF : EQUAL; + Node eq = NodeManager::currentNM()->mkNode( knd, it->second[i], it->second[j] ); + eq = Rewriter::rewrite(eq); + //determine if they are ambiguous + if( d_term_amb.find( eq )==d_term_amb.end() ){ + Debug("uf-ss-disamb") << "Check disambiguate " << it->second[i] << " " << it->second[j] << std::endl; + d_term_amb[ eq ] = true; + //if they are equal + if( d_th->d_equalityEngine.areEqual( it->second[i], it->second[j] ) ){ + d_term_amb[ eq ] = false; + }else{ + //if an argument is disequal, then they are not ambiguous + for( int k=0; k<(int)it->second[i].getNumChildren(); k++ ){ + if( d_th->d_equalityEngine.areDisequal( it->second[i][k], it->second[j][k], true ) ){ + d_term_amb[ eq ] = false; + break; + } + } + } + if( d_term_amb[ eq ] ){ + Debug("uf-ss-disamb") << "Disambiguate " << it->second[i] << " " << it->second[j] << std::endl; + //must add lemma + std::vector< Node > children; + children.push_back( eq ); + for( int k=0; k<(int)it->second[i].getNumChildren(); k++ ){ + Kind knd2 = it->second[i][k].getType()==NodeManager::currentNM()->booleanType() ? IFF : EQUAL; + Node eqc = NodeManager::currentNM()->mkNode( knd2, it->second[i][k], it->second[j][k] ); + children.push_back( eqc.notNode() ); + } + Assert( children.size()>1 ); + Node lem = NodeManager::currentNM()->mkNode( OR, children ); + Debug( "uf-ss-lemma" ) << "*** Diambiguate lemma : " << lem << std::endl; + //Notice() << "*** Diambiguate lemma : " << lem << std::endl; + out->lemma( lem ); + d_term_amb[ eq ] = false; + lemmaAdded = true; + ++( d_th->getStrongSolver()->d_statistics.d_disamb_term_lemmas ); + } + } + } + } + } + } + } + Debug("uf-ss-disamb") << "Done disambiguate terms. " << lemmaAdded << std::endl; + return lemmaAdded; +} + +/** check */ +void StrongSolverTheoryUf::ConflictFind::check( Theory::Effort level, OutputChannel* out ){ + if( level>=Theory::EFFORT_STANDARD ){ + Assert( d_cardinality>0 ); + Debug("uf-ss") << "StrongSolverTheoryUf: Check " << level << " " << d_type << std::endl; + //Notice() << "StrongSolverTheoryUf: Check " << level << std::endl; + if( d_reps<=(unsigned)d_cardinality ){ + Debug("uf-ss-debug") << "We have " << d_reps << " representatives for type " << d_type << ", <= " << d_cardinality << std::endl; + if( level==Theory::EFFORT_FULL ){ + Debug("uf-ss-sat") << "We have " << d_reps << " representatives for type " << d_type << ", <= " << d_cardinality << std::endl; + //Notice() << "We have " << d_reps << " representatives for type " << d_type << ", <= " << cardinality << std::endl; + //Notice() << "Model size for " << d_type << " is " << cardinality << std::endl; + //Notice() << cardinality << " "; + } + return; + }else{ + //do a check within each region + for( int i=0; i<(int)d_regions_index; i++ ){ + if( d_regions[i]->d_valid ){ + std::vector< Node > clique; + if( d_regions[i]->check( level, d_cardinality, clique ) ){ + //explain clique + explainClique( clique, out ); + return; + }else{ + Debug("uf-ss-debug") << "No clique in Region #" << i << std::endl; + } + } + } + if( level==Theory::EFFORT_FULL ){ + Debug("uf-ss-debug") << "Add splits?" << std::endl; + //see if we have any recommended splits + bool addedLemma = false; + for( int i=0; i<(int)d_regions_index; i++ ){ + if( d_regions[i]->d_valid ){ + if( d_regions[i]->hasSplits() ){ + d_regions[i]->addSplit( out ); + addedLemma = true; + ++( d_th->getStrongSolver()->d_statistics.d_split_lemmas ); + } + } + } + if( !addedLemma ){ + Debug("uf-ss") << "No splits added." << std::endl; + if( Options::current()->fmfRegionSat ){ + //otherwise, try to disambiguate individual terms + if( !disambiguateTerms( out ) ){ + //no disequalities can be propagated + //we are in a situation where it suffices to apply a coloring to equivalence classes + //due to our invariants, we know no coloring conflicts will occur between regions, and thus + // we are SAT in this case. + Debug("uf-ss-sat") << "SAT: regions = " << getNumRegions() << std::endl; + //Notice() << "Model size for " << d_type << " is " << cardinality << ", regions = " << getNumRegions() << std::endl; + debugPrint("uf-ss-sat"); + } + }else{ + //naive strategy. combine the first two valid regions + int regIndex = -1; + for( int i=0; i<(int)d_regions_index; i++ ){ + if( d_regions[i]->d_valid ){ + if( regIndex==-1 ){ + regIndex = i; + }else{ + combineRegions( regIndex, i ); + check( level, out ); + } + } + } + } + } + } + } + } +} + +void StrongSolverTheoryUf::ConflictFind::propagate( Theory::Effort level, OutputChannel* out ){ + Assert( d_cardinality>0 ); + + //propagate the current cardinality as a decision literal + Node cn = d_cardinality_literal[ d_cardinality ]; + Debug("uf-ss-prop-as-dec") << "Propagate as decision " << d_type << ", cardinality = " << d_cardinality << std::endl; + Assert( !cn.isNull() ); + if( d_cardinality_assertions.find( cn )==d_cardinality_assertions.end() ){ + out->propagateAsDecision( d_cardinality_literal[ d_cardinality ] ); + Debug("uf-ss-prop-as-dec") << "Propagate as decision " << d_cardinality_literal[ d_cardinality ]; + Debug("uf-ss-prop-as-dec") << " " << d_cardinality_literal[ d_cardinality ][0].getType() << std::endl; + } + +} + +void StrongSolverTheoryUf::ConflictFind::debugPrint( const char* c ){ + Debug( c ) << "-- Conflict Find:" << std::endl; + Debug( c ) << "Number of reps = " << d_reps << std::endl; + Debug( c ) << "Cardinality req = " << d_cardinality << std::endl; + unsigned debugReps = 0; + for( int i=0; i<(int)d_regions_index; i++ ){ + if( d_regions[i]->d_valid ){ + Debug( c ) << "Region #" << i << ": " << std::endl; + d_regions[i]->debugPrint( c, true ); + Debug( c ) << std::endl; + for( std::map< Node, Region::RegionNodeInfo* >::iterator it = d_regions[i]->d_nodes.begin(); it != d_regions[i]->d_nodes.end(); ++it ){ + if( it->second->d_valid ){ + if( d_regions_map[ it->first ]!=i ){ + Debug( c ) << "***Bad regions map : " << it->first << " " << d_regions_map[ it->first ].get() << std::endl; + } + } + } + debugReps += d_regions[i]->getNumReps(); + } + } + if( debugReps!=d_reps ){ + Debug( c ) << "***Bad reps: " << d_reps << ", actual = " << debugReps << std::endl; + } +} + +int StrongSolverTheoryUf::ConflictFind::getNumRegions(){ + int count = 0; + for( int i=0; i<(int)d_regions_index; i++ ){ + if( d_regions[i]->d_valid ){ + count++; + } + } + return count; +} + +void StrongSolverTheoryUf::ConflictFind::setCardinality( int c, OutputChannel* out ){ + d_cardinality = c; + //add appropriate lemma + Node lem = getCardinalityLemma(); + out->lemma( lem ); + //add the appropriate lemma + Debug("uf-ss-fmf") << "Set cardinality " << d_type << " = " << c << std::endl; + Debug("uf-ss-prop-as-dec") << "Propagate as decision " << lem[0] << std::endl; + out->propagateAsDecision( lem[0] ); + d_is_cardinality_requested = true; + d_is_cardinality_requested_c = true; + //now, require old literal to be decided false + //if( d_cardinality_literal.find( c-1 )!=d_cardinality_literal.end() ){ + // Debug("uf-ss-req-phase") << "Require phase " << d_cardinality_literal[c-1] << " = false " << std::endl; + // out->requirePhase( d_cardinality_literal[c-1], false ); + //} +} + +void StrongSolverTheoryUf::ConflictFind::getRepresentatives( std::vector< Node >& reps ){ + if( !Options::current()->fmfRegionSat ){ + bool foundRegion = false; + for( int i=0; i<(int)d_regions_index; i++ ){ + //should not have multiple regions at this point + if( foundRegion ){ + Assert( !d_regions[i]->d_valid ); + } + if( d_regions[i]->d_valid ){ + //this is the only valid region + d_regions[i]->getRepresentatives( reps ); + foundRegion = true; + } + } + }else{ + Unimplemented("Build representatives for fmf region sat is not implemented"); + } +} + +bool StrongSolverTheoryUf::ConflictFind::minimize( OutputChannel* out ){ + int validRegionIndex = -1; + for( int i=0; i<(int)d_regions_index; i++ ){ + if( d_regions[i]->d_valid ){ + if( validRegionIndex!=-1 ){ + combineRegions( validRegionIndex, i ); + if( !d_regions[validRegionIndex]->minimize( out ) ){ + return false; + } + }else{ + validRegionIndex = i; + } + } + } + if( !d_regions[validRegionIndex]->minimize( out ) ){ + return false; + } + return true; +} + + +Node StrongSolverTheoryUf::ConflictFind::getCardinalityLemma(){ + if( d_cardinality_lemma.find( d_cardinality )==d_cardinality_lemma.end() ){ + if( d_cardinality_lemma_term.isNull() ){ + std::stringstream ss; + ss << "fmf_term_" << d_type; + d_cardinality_lemma_term = NodeManager::currentNM()->mkVar( ss.str(), d_type ); + ModelBasisAttribute mba; + d_cardinality_lemma_term.setAttribute(mba,true); + } + Node lem = NodeManager::currentNM()->mkNode( CARDINALITY_CONSTRAINT, d_cardinality_lemma_term, + NodeManager::currentNM()->mkConst( Rational( d_cardinality ) ) ); + lem = Rewriter::rewrite(lem); + d_cardinality_literal[ d_cardinality ] = lem; + lem = NodeManager::currentNM()->mkNode( OR, lem, lem.notNode() ); + d_cardinality_lemma[ d_cardinality ] = lem; + } + return d_cardinality_lemma[ d_cardinality ]; +} + +StrongSolverTheoryUf::StrongSolverTheoryUf(context::Context* c, context::UserContext* u, OutputChannel& out, TheoryUF* th) : +d_out( &out ), +d_th( th ), +d_conf_find_init( c ) +{ + +} + +/** new node */ +void StrongSolverTheoryUf::newEqClass( Node n ){ + TypeNode tn = n.getType(); + ConflictFind* c = getConflictFind( tn ); + if( c ){ + Debug("uf-ss-solver") << "StrongSolverTheoryUf: New eq class " << n << " " << tn << std::endl; + c->newEqClass( n ); + } + //else if( isRelevantType( tn ) ){ + // //Debug("uf-ss-solver") << "WAIT: StrongSolverTheoryUf: New eq class " << n << " " << tn << std::endl; + // //d_new_eq_class_waiting[tn].push_back( n ); + //} +} + +/** merge */ +void StrongSolverTheoryUf::merge( Node a, Node b ){ + TypeNode tn = a.getType(); + ConflictFind* c = getConflictFind( tn ); + if( c ){ + Debug("uf-ss-solver") << "StrongSolverTheoryUf: Merge " << a << " " << b << " " << tn << std::endl; + c->merge( a, b ); + } + //else if( isRelevantType( tn ) ){ + //} +} + +/** assert terms are disequal */ +void StrongSolverTheoryUf::assertDisequal( Node a, Node b, Node reason ){ + TypeNode tn = a.getType(); + ConflictFind* c = getConflictFind( tn ); + if( c ){ + Debug("uf-ss-solver") << "StrongSolverTheoryUf: Assert disequal " << a << " " << b << " " << tn << std::endl; + //Assert( d_th->d_equalityEngine.getRepresentative( a )==a ); + //Assert( d_th->d_equalityEngine.getRepresentative( b )==b ); + c->assertDisequal( a, b, reason ); + } + //else if( isRelevantType( tn ) ){ + //} +} + +/** assert a node */ +void StrongSolverTheoryUf::assertNode( Node n, bool isDecision ){ + Debug("uf-ss-assert") << "Assert " << n << " " << isDecision << std::endl; + if( n.getKind()==CARDINALITY_CONSTRAINT ){ + TypeNode tn = n[0].getType(); + Assert( d_conf_find[tn]->getCardinality()>0 ); + Assert( isRelevantType( tn ) ); + Assert( d_conf_find[tn] ); + long nCard = n[1].getConst().getNumerator().getLong(); + d_conf_find[tn]->assertCardinality( nCard, true ); + if( nCard==d_conf_find[tn]->getCardinality() ){ + d_conf_find[tn]->d_is_cardinality_set = true; + d_conf_find[tn]->d_is_cardinality_requested = false; + d_conf_find[tn]->d_is_cardinality_requested_c = false; + } + }else if( n.getKind()==NOT && n[0].getKind()==CARDINALITY_CONSTRAINT ){ + //must add new lemma + Node nn = n[0]; + TypeNode tn = nn[0].getType(); + Assert( isRelevantType( tn ) ); + Assert( d_conf_find[tn] ); + long nCard = nn[1].getConst().getNumerator().getLong(); + d_conf_find[tn]->assertCardinality( nCard, false ); + if( nCard==d_conf_find[tn]->getCardinality() ){ + AlwaysAssert(!isDecision, "Error: Negative cardinality node decided upon"); + Debug("uf-ss-fmf") << "No model of size " << d_conf_find[tn]->getCardinality() << " exists for type " << tn << std::endl; + //Notice() << "No model of size " << d_conf_find[tn]->getCardinality() << " exists for type " << tn << std::endl; + //increment to next cardinality + d_statistics.d_max_model_size.maxAssign( d_conf_find[tn]->getCardinality() + 1 ); + d_conf_find[tn]->setCardinality( d_conf_find[tn]->getCardinality() + 1, d_out ); + //Notice() << d_conf_find[tn]->getCardinality() << " "; + ////give up permanently on this cardinality + //d_out->lemma( n ); + } + }else{ + ////FIXME: this is too strict: theory propagations are showing up as isDecision=true, but + //// a theory propagation is not a decision. + //if( isDecision ){ + // for( std::map< TypeNode, ConflictFind* >::iterator it = d_conf_find.begin(); it != d_conf_find.end(); ++it ){ + // if( !it->second->hasCardinalityAsserted() ){ + // Notice() << "Assert " << n << " " << isDecision << std::endl; + // Notice() << "Error: constraint asserted before cardinality for " << it->first << std::endl; + // Unimplemented(); + // } + // } + //} + } +} + + +/** check */ +void StrongSolverTheoryUf::check( Theory::Effort level ){ + Debug("uf-ss-solver") << "StrongSolverTheoryUf: check " << level << std::endl; + if( level==Theory::EFFORT_FULL ){ + debugPrint( "uf-ss-debug" ); + } + for( std::map< TypeNode, ConflictFind* >::iterator it = d_conf_find.begin(); it != d_conf_find.end(); ++it ){ + it->second->check( level, d_out ); + } + Debug("uf-ss-solver") << "Done StrongSolverTheoryUf: check " << level << std::endl; +} + +/** propagate */ +void StrongSolverTheoryUf::propagate( Theory::Effort level ){ + for( std::map< TypeNode, ConflictFind* >::iterator it = d_conf_find.begin(); it != d_conf_find.end(); ++it ){ + it->second->propagate( level, d_out ); + } +} + +void StrongSolverTheoryUf::preRegisterTerm( TNode n ){ + //shouldn't have to preregister this type (it may be that there are no quantifiers over tn) FIXME + TypeNode tn = n.getType(); + if( isRelevantType( tn ) ){ + preRegisterType( tn ); + } +} + +void StrongSolverTheoryUf::registerQuantifier( Node f ){ + Debug("uf-ss-register") << "Register quantifier " << f << std::endl; + //must ensure the quantifier does not quantify over arithmetic + for( int i=0; i<(int)f[0].getNumChildren(); i++ ){ + TypeNode tn = f[0][i].getType(); + if( isRelevantType( tn ) ){ + preRegisterType( tn ); + }else{ + if( tn==NodeManager::currentNM()->integerType() || tn==NodeManager::currentNM()->realType() ){ + Debug("uf-ss-na") << "Error: Cannot perform finite model finding on arithmetic quantifier"; + Debug("uf-ss-na") << " (" << f << ")"; + Debug("uf-ss-na") << std::endl; + Unimplemented("Cannot perform finite model finding on arithmetic quantifier"); + }else if( tn.isDatatype() ){ + Debug("uf-ss-na") << "Error: Cannot perform finite model finding on datatype quantifier"; + Debug("uf-ss-na") << " (" << f << ")"; + Debug("uf-ss-na") << std::endl; + Unimplemented("Cannot perform finite model finding on datatype quantifier"); + } + } + } +} + +void StrongSolverTheoryUf::preRegisterType( TypeNode tn ){ + if( d_conf_find.find( tn )==d_conf_find.end() ){ + Debug("uf-ss-register") << "Preregister " << tn << "." << std::endl; + //enter into incremental finite model finding mode: try cardinality = 1 first + //if( !d_conf_types.empty() ){ + // Debug("uf-ss-na") << "Strong solver unimplemented for multiple sorts." << std::endl; + // Unimplemented(); + //} + d_conf_find[tn] = new ConflictFind( tn, d_th->getSatContext(), d_th ); + //assign cardinality restriction + d_statistics.d_max_model_size.maxAssign( 1 ); + d_conf_find[tn]->setCardinality( 1, d_out ); + ////add waiting equivalence classes now + //if( !d_new_eq_class_waiting[tn].empty() ){ + // Debug("uf-ss-register") << "Add " << (int)d_new_eq_class_waiting[tn].size() << " new eq classes." << std::endl; + // for( int i=0; i<(int)d_new_eq_class_waiting[tn].size(); i++ ){ + // newEqClass( d_new_eq_class_waiting[tn][i] ); + // } + // d_new_eq_class_waiting[tn].clear(); + //} + d_conf_types.push_back( tn ); + } +} + +StrongSolverTheoryUf::ConflictFind* StrongSolverTheoryUf::getConflictFind( TypeNode tn ){ + std::map< TypeNode, ConflictFind* >::iterator it = d_conf_find.find( tn ); + //pre-register the type if not done already + if( it==d_conf_find.end() ){ + if( isRelevantType( tn ) ){ + preRegisterType( tn ); + it = d_conf_find.find( tn ); + } + } + if( it!=d_conf_find.end() ){ + //initialize the type if necessary + if( d_conf_find_init.find( tn )==d_conf_find_init.end() ){ + //assign cardinality restriction + d_statistics.d_max_model_size.maxAssign( 1 ); + it->second->setCardinality( 1, d_out ); + d_conf_find_init[tn] = true; + } + return it->second; + }else{ + return NULL; + } +} + +void StrongSolverTheoryUf::notifyRestart(){ + Debug("uf-ss-prop-as-dec") << "Restart?" << std::endl; +} + +/** get cardinality for sort */ +int StrongSolverTheoryUf::getCardinality( TypeNode t ) { + ConflictFind* c = getConflictFind( t ); + if( c ){ + return c->getCardinality(); + }else{ + return -1; + } +} + +void StrongSolverTheoryUf::getRepresentatives( TypeNode t, std::vector< Node >& reps ){ + ConflictFind* c = getConflictFind( t ); + if( c ){ + c->getRepresentatives( reps ); + } +} + +Node StrongSolverTheoryUf::getCardinalityTerm( TypeNode t ){ + ConflictFind* c = getConflictFind( t ); + if( c ){ + return c->getCardinalityTerm(); + }else{ + return Node::null(); + } +} + +bool StrongSolverTheoryUf::minimize(){ + for( std::map< TypeNode, ConflictFind* >::iterator it = d_conf_find.begin(); it != d_conf_find.end(); ++it ){ + if( !it->second->minimize( d_out ) ){ + return false; + } + } + return true; +} + +//print debug +void StrongSolverTheoryUf::debugPrint( const char* c ){ + //EqClassesIterator< TheoryUF::NotifyClass > eqc_iter( &((TheoryUF*)d_th)->d_equalityEngine ); + //while( !eqc_iter.isFinished() ){ + // Debug( c ) << "Eq class [[" << (*eqc_iter) << "]]" << std::endl; + // EqClassIterator< TheoryUF::NotifyClass > eqc_iter2( *eqc_iter, &((TheoryUF*)d_th)->d_equalityEngine ); + // Debug( c ) << " "; + // while( !eqc_iter2.isFinished() ){ + // Debug( c ) << "[" << (*eqc_iter2) << "] "; + // eqc_iter2++; + // } + // Debug( c ) << std::endl; + // eqc_iter++; + //} + + for( std::map< TypeNode, ConflictFind* >::iterator it = d_conf_find.begin(); it != d_conf_find.end(); ++it ){ + Debug( c ) << "Conflict find structure for " << it->first << ": " << std::endl; + it->second->debugPrint( c ); + Debug( c ) << std::endl; + } +} + +StrongSolverTheoryUf::Statistics::Statistics(): + d_clique_lemmas("StrongSolverTheoryUf::Clique_Lemmas", 0), + d_split_lemmas("StrongSolverTheoryUf::Split_Lemmas", 0), + d_disamb_term_lemmas("StrongSolverTheoryUf::Disambiguate_Term_Lemmas", 0), + d_max_model_size("StrongSolverTheoryUf::Max_Model_Size", 0) +{ + StatisticsRegistry::registerStat(&d_clique_lemmas); + StatisticsRegistry::registerStat(&d_split_lemmas); + StatisticsRegistry::registerStat(&d_disamb_term_lemmas); + StatisticsRegistry::registerStat(&d_max_model_size); +} + +StrongSolverTheoryUf::Statistics::~Statistics(){ + StatisticsRegistry::unregisterStat(&d_clique_lemmas); + StatisticsRegistry::unregisterStat(&d_split_lemmas); + StatisticsRegistry::unregisterStat(&d_disamb_term_lemmas); + StatisticsRegistry::unregisterStat(&d_max_model_size); +} + +bool StrongSolverTheoryUf::isRelevantType( TypeNode t ){ + return t!=NodeManager::currentNM()->booleanType() && + t!=NodeManager::currentNM()->integerType() && + t!=NodeManager::currentNM()->realType() && + t!=NodeManager::currentNM()->builtinOperatorType() && + !t.isFunction() && + !t.isDatatype(); +} + +bool StrongSolverTheoryUf::involvesRelevantType( Node n ){ + if( n.getKind()==APPLY_UF ){ + for( int i=0; i<(int)n.getNumChildren(); i++ ){ + if( isRelevantType( n[i].getType() ) ){ + return true; + } + } + } + return false; +} diff --git a/src/theory/uf/theory_uf_strong_solver.h b/src/theory/uf/theory_uf_strong_solver.h new file mode 100644 index 000000000..e36441f6d --- /dev/null +++ b/src/theory/uf/theory_uf_strong_solver.h @@ -0,0 +1,322 @@ +/********************* */ +/*! \file theory_uf_strong_solver.h + ** \verbatim + ** Original author: ajreynol + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Theory uf strong solver + **/ + +#include "cvc4_private.h" + +#ifndef __CVC4__THEORY_UF_STRONG_SOLVER_H +#define __CVC4__THEORY_UF_STRONG_SOLVER_H + +#include "theory/theory.h" + +#include "context/context.h" +#include "context/context_mm.h" +#include "context/cdchunk_list.h" + +#include "util/stats.h" + +namespace CVC4 { +namespace theory { + +struct ModelBasisAttributeId {}; +typedef expr::Attribute ModelBasisAttribute; + +namespace uf { + +class TheoryUF; + +class StrongSolverTheoryUf{ +protected: + typedef context::CDHashMap NodeBoolMap; + typedef context::CDHashMap NodeIntMap; + typedef context::CDChunkList NodeList; + typedef context::CDList BoolList; + typedef context::CDHashMap TypeNodeBoolMap; +public: + /** information for incremental conflict/clique finding for a particular sort */ + class ConflictFind { + public: + /** a partition of the current equality graph for which cliques can occur internally */ + class Region { + public: + /** conflict find pointer */ + ConflictFind* d_cf; + /** information stored about each node in region */ + class RegionNodeInfo { + public: + /** disequality list for node */ + class DiseqList { + public: + DiseqList( context::Context* c ) : d_size( c, 0 ), d_disequalities( c ){} + ~DiseqList(){} + context::CDO< unsigned > d_size; + NodeBoolMap d_disequalities; + void setDisequal( Node n, bool valid ){ + Assert( d_disequalities.find( n )==d_disequalities.end() || d_disequalities[n]!=valid ); + d_disequalities[ n ] = valid; + d_size = d_size + ( valid ? 1 : -1 ); + } + }; + private: + DiseqList d_internal; + DiseqList d_external; + public: + /** constructor */ + RegionNodeInfo( context::Context* c ) : d_internal( c ), d_external( c ), d_valid( c, true ){ + d_disequalities[0] = &d_internal; + d_disequalities[1] = &d_external; + } + ~RegionNodeInfo(){} + context::CDO< bool > d_valid; + DiseqList* d_disequalities[2]; + + int getNumDisequalities() { return d_disequalities[0]->d_size + d_disequalities[1]->d_size; } + int getNumExternalDisequalities() { return d_disequalities[0]->d_size; } + int getNumInternalDisequalities() { return d_disequalities[1]->d_size; } + }; + ///** end class RegionNodeInfo */ + private: + //a postulated clique + NodeBoolMap d_testClique; + context::CDO< unsigned > d_testCliqueSize; + //disequalities needed for this clique to happen + NodeBoolMap d_splits; + context::CDO< unsigned > d_splitsSize; + /** get split */ + Node getBestSplit(); + private: + //number of valid representatives in this region + context::CDO< unsigned > d_reps_size; + //total disequality size (external) + context::CDO< unsigned > d_total_diseq_external; + //total disequality size (internal) + context::CDO< unsigned > d_total_diseq_internal; + public: + //constructor + Region( ConflictFind* cf, context::Context* c ) : d_cf( cf ), d_testClique( c ), d_testCliqueSize( c, 0 ), + d_splits( c ), d_splitsSize( c, 0 ), d_reps_size( c, 0 ), d_total_diseq_external( c, 0 ), + d_total_diseq_internal( c, 0 ), d_valid( c, true ) { + } + ~Region(){} + //region node infomation + std::map< Node, RegionNodeInfo* > d_nodes; + //whether region is valid + context::CDO< bool > d_valid; + public: + //get num reps + int getNumReps() { return d_reps_size; } + // has representative + bool hasRep( Node n ) { return d_nodes.find( n )!=d_nodes.end() && d_nodes[n]->d_valid; } + //take node from region + void takeNode( Region* r, Node n ); + //merge with other region + void combine( Region* r ); + /** set rep */ + void setRep( Node n, bool valid ); + /** merge */ + void setEqual( Node a, Node b ); + //set n1 != n2 to value 'valid', type is whether it is internal/external + void setDisequal( Node n1, Node n2, int type, bool valid ); + // is disequal + bool isDisequal( Node n1, Node n2, int type ); + public: + /** get must merge */ + bool getMustCombine( int cardinality ); + /** check for cliques */ + bool check( Theory::Effort level, int cardinality, std::vector< Node >& clique ); + /** has splits */ + bool hasSplits() { return d_splitsSize>0; } + /** add split */ + void addSplit( OutputChannel* out ); + /** get representatives */ + void getRepresentatives( std::vector< Node >& reps ); + /** minimize */ + bool minimize( OutputChannel* out ); + /** get external disequalities */ + void getNumExternalDisequalities( std::map< Node, int >& num_ext_disequalities ); + //print debug + void debugPrint( const char* c, bool incClique = false ); + }; + private: + /** theory uf pointer */ + TheoryUF* d_th; + /** regions used to d_region_index */ + context::CDO< unsigned > d_regions_index; + /** vector of regions */ + std::vector< Region* > d_regions; + /** map from Nodes to index of d_regions they exist in, -1 means invalid */ + NodeIntMap d_regions_map; + /** regions used to d_region_index */ + context::CDO< unsigned > d_disequalities_index; + /** list of all disequalities */ + std::vector< Node > d_disequalities; + /** number of representatives in all regions */ + context::CDO< unsigned > d_reps; + /** whether two terms are ambiguous (indexed by equalities) */ + NodeBoolMap d_term_amb; + private: + /** merge regions */ + void combineRegions( int ai, int bi ); + /** move node n to region ri */ + void moveNode( Node n, int ri ); + /** get number of disequalities from node n to region ri */ + int getNumDisequalitiesToRegion( Node n, int ri ); + /** get number of disequalities from Region r to other regions */ + void getDisequalitiesToRegions( int ri, std::map< int, int >& regions_diseq ); + /** check if we need to combine region ri */ + bool checkRegion( int ri, bool rec = true ); + /** explain clique */ + void explainClique( std::vector< Node >& clique, OutputChannel* out ); + /** is valid */ + bool isValid( int ri ) { return ri>=0 && ri<(int)d_regions_index && d_regions[ ri ]->d_valid; } + /** check ambiguous terms */ + bool disambiguateTerms( OutputChannel* out ); + private: + /** cardinality operating with */ + context::CDO< int > d_cardinality; + /** type */ + TypeNode d_type; + /** cardinality lemma term */ + Node d_cardinality_lemma_term; + /** cardinality literals */ + std::map< int, Node > d_cardinality_literal; + /** cardinality lemmas */ + std::map< int, Node > d_cardinality_lemma; + /** cardinality assertions (indexed by cardinality literals ) */ + NodeBoolMap d_cardinality_assertions; + public: + ConflictFind( TypeNode tn, context::Context* c, TheoryUF* th ) : + d_th( th ), d_regions_index( c, 0 ), d_regions_map( c ), d_disequalities_index( c, 0 ), + d_reps( c, 0 ), d_term_amb( c ), d_cardinality( c, 1 ), d_type( tn ), + d_cardinality_assertions( c ), d_is_cardinality_set( c, false ), + d_is_cardinality_requested_c( c, false ), d_is_cardinality_requested( false ), d_hasCard( c, false ){} + ~ConflictFind(){} + /** new node */ + void newEqClass( Node n ); + /** merge */ + void merge( Node a, Node b ); + /** assert terms are disequal */ + void assertDisequal( Node a, Node b, Node reason ); + /** assert cardinality */ + void assertCardinality( int c, bool val ); + /** whether cardinality has been asserted */ + bool hasCardinalityAsserted() { return d_hasCard; } + /** check */ + void check( Theory::Effort level, OutputChannel* out ); + /** propagate */ + void propagate( Theory::Effort level, OutputChannel* out ); + //print debug + void debugPrint( const char* c ); + /** set cardinality */ + void setCardinality( int c, OutputChannel* out ); + /** get cardinality */ + int getCardinality() { return d_cardinality; } + /** get representatives */ + void getRepresentatives( std::vector< Node >& reps ); + /** get model basis term */ + Node getCardinalityTerm() { return d_cardinality_lemma_term; } + /** minimize */ + bool minimize( OutputChannel* out ); + /** get cardinality lemma */ + Node getCardinalityLemma(); + public: + /** get number of regions (for debugging) */ + int getNumRegions(); + /** is cardinality set */ + context::CDO< bool > d_is_cardinality_set; + context::CDO< bool > d_is_cardinality_requested_c; + bool d_is_cardinality_requested; + /** whether a positive cardinality constraint has been asserted */ + context::CDO< bool > d_hasCard; + }; /** class ConflictFind */ +private: + /** The output channel for the strong solver. */ + OutputChannel* d_out; + /** theory uf pointer */ + TheoryUF* d_th; + /** conflict find structure, one for each type */ + std::map< TypeNode, ConflictFind* > d_conf_find; + /** all types */ + std::vector< TypeNode > d_conf_types; + /** whether conflict find data structures have been initialized */ + TypeNodeBoolMap d_conf_find_init; + /** pre register type */ + void preRegisterType( TypeNode tn ); + /** get conflict find */ + ConflictFind* getConflictFind( TypeNode tn ); +public: + StrongSolverTheoryUf(context::Context* c, context::UserContext* u, OutputChannel& out, TheoryUF* th); + ~StrongSolverTheoryUf() {} + /** new node */ + void newEqClass( Node n ); + /** merge */ + void merge( Node a, Node b ); + /** assert terms are disequal */ + void assertDisequal( Node a, Node b, Node reason ); + /** assert node */ + void assertNode( Node n, bool isDecision ); +public: + /** check */ + void check( Theory::Effort level ); + /** propagate */ + void propagate( Theory::Effort level ); + /** preregister a term */ + void preRegisterTerm( TNode n ); + /** preregister a quantifier */ + void registerQuantifier( Node f ); + /** notify restart */ + void notifyRestart(); +public: + /** identify */ + std::string identify() const { return std::string("StrongSolverTheoryUf"); } + //print debug + void debugPrint( const char* c ); +public: + /** get number of types */ + int getNumCardinalityTypes() { return (int)d_conf_types.size(); } + /** get type */ + TypeNode getCardinalityType( int i ) { return d_conf_types[i]; } + /** get cardinality for sort */ + int getCardinality( TypeNode t ); + /** get representatives */ + void getRepresentatives( TypeNode t, std::vector< Node >& reps ); + /** get cardinality term */ + Node getCardinalityTerm( TypeNode t ); + /** minimize */ + bool minimize(); + + class Statistics { + public: + IntStat d_clique_lemmas; + IntStat d_split_lemmas; + IntStat d_disamb_term_lemmas; + IntStat d_max_model_size; + Statistics(); + ~Statistics(); + }; + /** statistics class */ + Statistics d_statistics; + + /** is relavant type */ + static bool isRelevantType( TypeNode t ); + /** involves relavant type */ + static bool involvesRelevantType( Node n ); +};/* class StrongSolverTheoryUf */ + +} +}/* CVC4::theory namespace */ +}/* CVC4 namespace */ + +#endif /* __CVC4__THEORY_UF_STRONG_SOLVER_H */ diff --git a/src/theory/uf/theory_uf_type_rules.h b/src/theory/uf/theory_uf_type_rules.h index 3d7e51746..b68a11abd 100644 --- a/src/theory/uf/theory_uf_type_rules.h +++ b/src/theory/uf/theory_uf_type_rules.h @@ -59,6 +59,20 @@ public: } };/* class UfTypeRule */ +class CardinalityConstraintTypeRule { +public: + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) + throw(TypeCheckingExceptionPrivate) { + if( check ) { + TypeNode valType = n[1].getType(check); + if( valType != nodeManager->integerType() ) { + throw TypeCheckingExceptionPrivate(n, "cardinality constraint must be integer"); + } + } + return nodeManager->booleanType(); + } +};/* class UfTypeRule */ + }/* CVC4::theory::uf namespace */ }/* CVC4::theory namespace */ }/* CVC4 namespace */ diff --git a/src/theory/valuation.cpp b/src/theory/valuation.cpp index cae62570c..ef02f6278 100644 --- a/src/theory/valuation.cpp +++ b/src/theory/valuation.cpp @@ -100,5 +100,9 @@ Node Valuation::ensureLiteral(TNode n) { return preprocessed; } +bool Valuation::isDecision(Node lit) const { + return d_engine->getPropEngine()->isDecision(lit); +} + }/* CVC4::theory namespace */ }/* CVC4 namespace */ diff --git a/src/theory/valuation.h b/src/theory/valuation.h index ab47dcbdd..dd3848e7f 100644 --- a/src/theory/valuation.h +++ b/src/theory/valuation.h @@ -112,6 +112,14 @@ public: */ Node ensureLiteral(TNode n) CVC4_WARN_UNUSED_RESULT; + /** + * Returns whether the given lit (which must be a SAT literal) is a decision + * literal or not. Throws an exception if lit is not a SAT literal. "lit" may + * be in either phase; that is, if "lit" is a SAT literal, this function returns + * true both for lit and the negation of lit. + */ + bool isDecision(Node lit) const; + };/* class Valuation */ }/* CVC4::theory namespace */ diff --git a/src/util/datatype.cpp b/src/util/datatype.cpp index f009bbbbe..86a43c878 100644 --- a/src/util/datatype.cpp +++ b/src/util/datatype.cpp @@ -438,7 +438,7 @@ void DatatypeConstructor::resolve(ExprManager* em, DatatypeType self, d_tester = em->mkVar(d_name.substr(d_name.find('\0') + 1), em->mkTesterType(self)); d_name.resize(d_name.find('\0')); d_constructor = em->mkVar(d_name, em->mkConstructorType(*this, self)); - //associate constructor with all selectors + // associate constructor with all selectors for(iterator i = begin(), i_end = end(); i != i_end; ++i) { (*i).d_constructor = d_constructor; } diff --git a/src/util/datatype.h b/src/util/datatype.h index d39d7110d..b701073c7 100644 --- a/src/util/datatype.h +++ b/src/util/datatype.h @@ -361,9 +361,9 @@ public: * * Datatypes may also be defined parametrically, such as this example: * - * DATATYPE - * list[T] = cons(car : T, cdr : list[T]) | null, - * tree = node(children : list[tree]) | leaf + * DATATYPE + * list[T] = cons(car : T, cdr : list[T]) | null, + * tree = node(children : list[tree]) | leaf * END; * * Here, the definition of the parametric datatype list, where T is a type variable. diff --git a/src/util/ite_removal.cpp b/src/util/ite_removal.cpp index 9d2524170..9a4fc8dc2 100644 --- a/src/util/ite_removal.cpp +++ b/src/util/ite_removal.cpp @@ -79,23 +79,30 @@ Node RemoveITE::run(TNode node, std::vector& output, } // If not an ITE, go deep - vector newChildren; - bool somethingChanged = false; - if(node.getMetaKind() == kind::metakind::PARAMETERIZED) { - newChildren.push_back(node.getOperator()); - } - // Remove the ITEs from the children - for(TNode::const_iterator it = node.begin(), end = node.end(); it != end; ++it) { - Node newChild = run(*it, output, iteSkolemMap); - somethingChanged |= (newChild != *it); - newChildren.push_back(newChild); - } + if( node.getKind() != kind::FORALL && + node.getKind() != kind::EXISTS && + node.getKind() != kind::REWRITE_RULE ) { + vector newChildren; + bool somethingChanged = false; + if(node.getMetaKind() == kind::metakind::PARAMETERIZED) { + newChildren.push_back(node.getOperator()); + } + // Remove the ITEs from the children + for(TNode::const_iterator it = node.begin(), end = node.end(); it != end; ++it) { + Node newChild = run(*it, output, iteSkolemMap); + somethingChanged |= (newChild != *it); + newChildren.push_back(newChild); + } - // If changes, we rewrite - if(somethingChanged) { - cachedRewrite = nodeManager->mkNode(node.getKind(), newChildren); - nodeManager->setAttribute(node, IteRewriteAttr(), cachedRewrite); - return cachedRewrite; + // If changes, we rewrite + if(somethingChanged) { + cachedRewrite = nodeManager->mkNode(node.getKind(), newChildren); + nodeManager->setAttribute(node, IteRewriteAttr(), cachedRewrite); + return cachedRewrite; + } else { + nodeManager->setAttribute(node, IteRewriteAttr(), Node::null()); + return node; + } } else { nodeManager->setAttribute(node, IteRewriteAttr(), Node::null()); return node; diff --git a/src/util/options.cpp b/src/util/options.cpp index 26881e052..1296fa5af 100644 --- a/src/util/options.cpp +++ b/src/util/options.cpp @@ -130,6 +130,25 @@ Options::Options() : arithRewriteEqSetByUser(false), ufSymmetryBreaker(false), ufSymmetryBreakerSetByUser(false), + miniscopeQuant(true), + miniscopeQuantFreeVar(true), + prenexQuant(true), + varElimQuant(false), + cnfQuant(false), + preSkolemQuant(false), + smartTriggers(true), + registerQuantBodyTerms(false), + instWhenMode(INST_WHEN_FULL_LAST_CALL), + eagerInstQuant(false), + finiteModelFind(false), + fmfRegionSat(false), + fmfModelBasedInst(true), + efficientEMatching(false), + literalMatchMode(LITERAL_MATCH_NONE), + cbqi(false), + cbqiSetByUser(false), + userPatternsQuant(true), + flipDecision(false), lemmaOutputChannel(NULL), lemmaInputChannel(NULL), threads(2),// default should be 1 probably, but say 2 for now @@ -240,6 +259,27 @@ Additional CVC4 options:\n\ --enable-symmetry-breaker turns on UF symmetry breaker (Deharbe et al.,\n\ CADE 2011) [on by default only for QF_UF]\n\ --disable-symmetry-breaker turns off UF symmetry breaker\n\ + --disable-miniscope-quant disable miniscope quantifiers\n\ + --disable-miniscope-quant-fv disable miniscope quantifiers for ground subformulas\n\ + --disable-prenex-quant disable prenexing of quantified formulas\n\ + --var-elim-quant enable variable elimination of quantified formulas\n\ + --cnf-quant apply CNF conversion to quantified formulas\n\ + --pre-skolem-quant apply skolemization eagerly to bodies of quantified formulas\n\ + --disable-smart-triggers disable smart triggers\n\ + --register-quant-body-terms consider terms within bodies of quantified formulas for matching\n\ + --inst-when=MODE when to apply instantiation\n\ + --eager-inst-quant apply quantifier instantiation eagerly\n\ + --finite-model-find use finite model finding heuristic for quantifier instantiation\n\ + --use-fmf-region-sat use region-based SAT heuristic for finite model finding\n\ + --disable-fmf-model-inst disable model-based instantiation for finite model finding\n\ + --efficient-e-matching use efficient E-matching\n\ + --literal-matching=MODE choose literal matching mode\n\ + --enable-cbqi turns on counterexample-based quantifier instantiation [off by default]\n\ + --disable-cbqi turns off counterexample-based quantifier instantiation\n\ + --ignore-user-patterns ignore user-provided patterns for quantifier instantiation\n\ + --enable-flip-decision turns on flip decision heuristic\n\ + --disable-dio-solver turns off Linear Diophantine Equation solver (Griggio, JSAT 2012)\n\ + --disable-arith-rewrite-equalities turns off the preprocessing rewrite turning equalities into a conjunction of inequalities.\n\ --threads=N sets the number of solver threads\n\ --threadN=string configures thread N (0..#threads-1)\n\ --filter-lemma-length=N don't share lemmas strictly longer than N\n\ @@ -439,7 +479,7 @@ void Options::printLanguageHelp(std::ostream& out) { */ enum OptionValue { OPTION_VALUE_BEGIN = 256, /* avoid clashing with char options */ - SMTCOMP, + SMTCOMP, STATS, SEGV_NOSPIN, OUTPUT_LANGUAGE, @@ -496,6 +536,25 @@ enum OptionValue { DISABLE_ARITHMETIC_REWRITE_EQUALITIES, ENABLE_SYMMETRY_BREAKER, DISABLE_SYMMETRY_BREAKER, + DISABLE_MINISCOPE_QUANT, + DISABLE_MINISCOPE_QUANT_FV, + DISABLE_PRENEX_QUANT, + VAR_ELIM_QUANT, + CNF_QUANT, + PRE_SKOLEM_QUANT, + DISABLE_SMART_TRIGGERS, + REGISTER_QUANT_BODY_TERMS, + INST_WHEN, + EAGER_INST_QUANT, + FINITE_MODEL_FIND, + FMF_REGION_SAT, + DISABLE_FMF_MODEL_BASED_INST, + EFFICIENT_E_MATCHING, + LITERAL_MATCHING, + ENABLE_CBQI, + DISABLE_CBQI, + IGNORE_USER_PATTERNS, + ENABLE_FLIP_DECISION, PARALLEL_THREADS, PARALLEL_SEPARATE_OUTPUT, PORTFOLIO_FILTER_LENGTH, @@ -602,6 +661,25 @@ static struct option cmdlineOptions[] = { { "disable-arith-rewrite-equalities", no_argument, NULL, DISABLE_ARITHMETIC_REWRITE_EQUALITIES }, { "enable-symmetry-breaker", no_argument, NULL, ENABLE_SYMMETRY_BREAKER }, { "disable-symmetry-breaker", no_argument, NULL, DISABLE_SYMMETRY_BREAKER }, + { "disable-miniscope-quant", no_argument, NULL, DISABLE_MINISCOPE_QUANT }, + { "disable-miniscope-quant-fv", no_argument, NULL, DISABLE_MINISCOPE_QUANT_FV }, + { "disable-prenex-quant", no_argument, NULL, DISABLE_PRENEX_QUANT }, + { "var-elim-quant", no_argument, NULL, VAR_ELIM_QUANT }, + { "cnf-quant", no_argument, NULL, CNF_QUANT }, + { "pre-skolem-quant", no_argument, NULL, PRE_SKOLEM_QUANT }, + { "disable-smart-triggers", no_argument, NULL, DISABLE_SMART_TRIGGERS }, + { "register-quant-body-terms", no_argument, NULL, REGISTER_QUANT_BODY_TERMS }, + { "inst-when", required_argument, NULL, INST_WHEN }, + { "eager-inst-quant", no_argument, NULL, EAGER_INST_QUANT }, + { "finite-model-find", no_argument, NULL, FINITE_MODEL_FIND }, + { "use-fmf-region-sat", no_argument, NULL, FMF_REGION_SAT }, + { "disable-fmf-model-inst", no_argument, NULL, DISABLE_FMF_MODEL_BASED_INST }, + { "efficient-e-matching", no_argument, NULL, EFFICIENT_E_MATCHING }, + { "literal-matching", required_argument, NULL, LITERAL_MATCHING }, + { "enable-cbqi", no_argument, NULL, ENABLE_CBQI }, + { "disable-cbqi", no_argument, NULL, DISABLE_CBQI }, + { "ignore-user-patterns", no_argument, NULL, IGNORE_USER_PATTERNS }, + { "enable-flip-decision", no_argument, NULL, ENABLE_FLIP_DECISION }, { "threads", required_argument, NULL, PARALLEL_THREADS }, { "separate-output", no_argument, NULL, PARALLEL_SEPARATE_OUTPUT }, { "filter-lemma-length", required_argument, NULL, PORTFOLIO_FILTER_LENGTH }, @@ -984,7 +1062,7 @@ throw(OptionException) { case 'm': produceModels = true; break; - + case PRODUCE_ASSIGNMENTS: produceAssignments = true; break; @@ -1016,7 +1094,7 @@ throw(OptionException) { throw OptionException("This is not a proof-enabled build of CVC4; --proof cannot be used"); #endif /* CVC4_PROOF */ break; - + case NO_TYPE_CHECKING: typeChecking = false; earlyTypeChecking = false; @@ -1073,7 +1151,91 @@ throw(OptionException) { ufSymmetryBreaker = false; ufSymmetryBreakerSetByUser = true; break; - + case DISABLE_MINISCOPE_QUANT: + miniscopeQuant = false; + break; + case DISABLE_MINISCOPE_QUANT_FV: + miniscopeQuantFreeVar = false; + break; + case DISABLE_PRENEX_QUANT: + prenexQuant = false; + break; + case VAR_ELIM_QUANT: + varElimQuant = true; + break; + case CNF_QUANT: + cnfQuant = true; + break; + case PRE_SKOLEM_QUANT: + preSkolemQuant = true; + break; + case DISABLE_SMART_TRIGGERS: + smartTriggers = false; + break; + case REGISTER_QUANT_BODY_TERMS: + registerQuantBodyTerms = true; + break; + case INST_WHEN: + if(!strcmp(optarg, "pre-full")) { + instWhenMode = INST_WHEN_PRE_FULL; + } else if(!strcmp(optarg, "full")) { + instWhenMode = INST_WHEN_FULL; + } else if(!strcmp(optarg, "full-last-call")) { + instWhenMode = INST_WHEN_FULL_LAST_CALL; + } else if(!strcmp(optarg, "last-call")) { + instWhenMode = INST_WHEN_LAST_CALL; + } else if(!strcmp(optarg, "help")) { + //puts(instWhenHelp.c_str()); + exit(1); + } else { + throw OptionException(string("unknown option for --inst-when: `") + + optarg + "'. Try --inst-when help."); + } + break; + case EAGER_INST_QUANT: + eagerInstQuant = true; + break; + case FINITE_MODEL_FIND: + finiteModelFind = true; + break; + case FMF_REGION_SAT: + fmfRegionSat = true; + break; + case DISABLE_FMF_MODEL_BASED_INST: + fmfModelBasedInst = false; + break; + case EFFICIENT_E_MATCHING: + efficientEMatching = true; + break; + case LITERAL_MATCHING: + if(!strcmp(optarg, "none")) { + literalMatchMode = LITERAL_MATCH_NONE; + } else if(!strcmp(optarg, "predicate")) { + literalMatchMode = LITERAL_MATCH_PREDICATE; + } else if(!strcmp(optarg, "equality")) { + literalMatchMode = LITERAL_MATCH_EQUALITY; + } else if(!strcmp(optarg, "help")) { + //puts(literalMatchHelp.c_str()); + exit(1); + } else { + throw OptionException(string("unknown option for --literal-matching: `") + + optarg + "'. Try --literal-matching help."); + } + break; + case ENABLE_CBQI: + cbqi = true; + cbqiSetByUser = true; + break; + case DISABLE_CBQI: + cbqi = false; + cbqiSetByUser = true; + break; + case IGNORE_USER_PATTERNS: + userPatternsQuant = false; + break; + case ENABLE_FLIP_DECISION: + flipDecision = true; + break; case TIME_LIMIT: { int i = atoi(optarg); @@ -1141,7 +1303,7 @@ throw(OptionException) { optarg + "' is not between 0.0 and 1.0."); } break; - + case SAT_RESTART_FIRST: { int i = atoi(optarg); @@ -1151,7 +1313,7 @@ throw(OptionException) { satRestartFirst = i; break; } - + case SAT_RESTART_INC: { int i = atoi(optarg); @@ -1341,7 +1503,7 @@ throw(OptionException) { case PORTFOLIO_FILTER_LENGTH: sharingFilterByLength = atoi(optarg); - break; + break; case ':': // This can be a long or short option, and the way to get at the name of it is different. diff --git a/src/util/options.h b/src/util/options.h index 0584fdc2a..fb5f71060 100644 --- a/src/util/options.h +++ b/src/util/options.h @@ -310,6 +310,126 @@ struct CVC4_PUBLIC Options { */ bool ufSymmetryBreakerSetByUser; + /** + * Whether to mini-scope quantifiers. + * For example, forall x. ( P( x ) ^ Q( x ) ) will be rewritten to + * ( forall x. P( x ) ) ^ ( forall x. Q( x ) ) + */ + bool miniscopeQuant; + + /** + * Whether to mini-scope quantifiers based on formulas with no free variables. + * For example, forall x. ( P( x ) V Q ) will be rewritten to + * ( forall x. P( x ) ) V Q + */ + bool miniscopeQuantFreeVar; + + /** + * Whether to prenex (nested universal) quantifiers + */ + bool prenexQuant; + + /** + * Whether to variable-eliminate quantifiers. + * For example, forall x y. ( P( x, y ) V x != c ) will be rewritten to + * forall y. P( c, y ) + */ + bool varElimQuant; + + /** + * Whether to CNF quantifier bodies + */ + bool cnfQuant; + + /** + * Whether to pre-skolemize quantifier bodies. + * For example, forall x. ( P( x ) => (exists y. f( y ) = x) ) will be rewritten to + * forall x. P( x ) => f( S( x ) ) = x + */ + bool preSkolemQuant; + + /** + * Whether to use smart triggers + */ + bool smartTriggers; + + /** + * Whether to consider terms in the bodies of quantifiers for matching + */ + bool registerQuantBodyTerms; + + /** Enumeration of inst_when modes (when to instantiate). */ + typedef enum { + /** Apply instantiation round before full effort (possibly at standard effort) */ + INST_WHEN_PRE_FULL, + /** Apply instantiation round at full effort or above */ + INST_WHEN_FULL, + /** Apply instantiation round at full effort half the time, and last call always */ + INST_WHEN_FULL_LAST_CALL, + /** Apply instantiation round at last call only */ + INST_WHEN_LAST_CALL, + } InstWhenMode; + /** When to perform instantiation round. */ + InstWhenMode instWhenMode; + + /** + * Whether to eagerly instantiate quantifiers + */ + bool eagerInstQuant; + + /** + * Whether to use finite model find heuristic + */ + bool finiteModelFind; + + /** + * Whether to use region-based SAT for finite model finding + */ + bool fmfRegionSat; + + /** + * Whether to use model-based exhaustive instantiation for finite model finding + */ + bool fmfModelBasedInst; + + /** + * Whether to use efficient E-matching + */ + bool efficientEMatching; + + /** Enumeration of literal matching modes. */ + typedef enum { + /** Do not consider polarity of patterns */ + LITERAL_MATCH_NONE, + /** Consider polarity of boolean predicates only */ + LITERAL_MATCH_PREDICATE, + /** Consider polarity of boolean predicates, as well as equalities */ + LITERAL_MATCH_EQUALITY, + } LiteralMatchMode; + + /** Which literal matching mode to use. */ + LiteralMatchMode literalMatchMode; + + /** + * Whether to do counterexample-based quantifier instantiation + */ + bool cbqi; + + /** + * Whether the user explicitly requested that counterexample-based + * quantifier instantiation be enabled or disabled. + */ + bool cbqiSetByUser; + + /** + * Whether to use user patterns for pattern-based instantiation + */ + bool userPatternsQuant; + + /** + * Whether to use flip decision (useful when cbqi=true) + */ + bool flipDecision; /** The output channel to receive notfication events for new lemmas */ LemmaOutputChannel* lemmaOutputChannel; diff --git a/test/Makefile.am b/test/Makefile.am index bbb009a0c..2a5b24fc8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -41,6 +41,8 @@ subdirs_to_check = \ regress/regress0/arrays \ regress/regress0/aufbv \ regress/regress0/datatypes \ + regress/regress0/quantifiers \ + regress/regress0/rewriterules \ regress/regress0/lemmas \ regress/regress0/push-pop \ regress/regress0/precedence \ diff --git a/test/regress/regress0/Makefile.am b/test/regress/regress0/Makefile.am index a03084129..ebab2f8ed 100644 --- a/test/regress/regress0/Makefile.am +++ b/test/regress/regress0/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = . arith precedence uf uflra uflia bv arrays aufbv auflia datatypes lemmas push-pop preprocess unconstrained +SUBDIRS = . arith precedence uf uflra uflia bv arrays aufbv auflia datatypes quantifiers rewriterules lemmas push-pop preprocess unconstrained BINARY = cvc4 if PROOF_REGRESSIONS diff --git a/test/regress/regress0/quantifiers/AdditiveMethods_AdditiveMethods..ctor.smt2 b/test/regress/regress0/quantifiers/AdditiveMethods_AdditiveMethods..ctor.smt2 new file mode 100644 index 000000000..bbd32d988 --- /dev/null +++ b/test/regress/regress0/quantifiers/AdditiveMethods_AdditiveMethods..ctor.smt2 @@ -0,0 +1,399 @@ +(set-logic AUFLIA) +(set-info :source | + Boogie/Spec# benchmarks. + This benchmark was translated by Michal Moskal. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun boolIff (Int Int) Int) +(declare-fun PeerGroupPlaceholder_ () Int) +(declare-fun intGreater (Int Int) Int) +(declare-fun IfThenElse_ (Int Int Int) Int) +(declare-fun CONCVARSYM (Int) Int) +(declare-fun SharingMode_Unshared_ () Int) +(declare-fun OwnedResults.Mz_ (Int Int) Int) +(declare-fun System.Reflection.IReflect () Int) +(declare-fun int_m2147483648 () Int) +(declare-fun System.Int32 () Int) +(declare-fun intAtMost (Int Int) Int) +(declare-fun multiply (Int Int) Int) +(declare-fun Is_ (Int Int) Int) +(declare-fun Smt.true () Int) +(declare-fun ElementType_ (Int) Int) +(declare-fun divide (Int Int) Int) +(declare-fun int_m9223372036854775808 () Int) +(declare-fun divides (Int Int) Int) +(declare-fun select1 (Int Int) Int) +(declare-fun store1 (Int Int Int) Int) +(declare-fun select2 (Int Int Int) Int) +(declare-fun nullObject () Int) +(declare-fun store2 (Int Int Int Int) Int) +(declare-fun modulo (Int Int) Int) +(declare-fun ownerRef_ () Int) +(declare-fun StructSet_ (Int Int Int) Int) +(declare-fun AsDirectSubClass (Int Int) Int) +(declare-fun OwnedResults.Pw_ (Int Int) Int) +(declare-fun System.Boolean () Int) +(declare-fun shl_ (Int Int) Int) +(declare-fun DimLength_ (Int Int) Int) +(declare-fun anyEqual (Int Int) Int) +(declare-fun System.Array () Int) +(declare-fun System.Reflection.ICustomAttributeProvider () Int) +(declare-fun SharingMode_LockProtected_ () Int) +(declare-fun IsMemberlessType_ (Int) Int) +(declare-fun System.UInt16 () Int) +(declare-fun ClassRepr (Int) Int) +(declare-fun System.Runtime.InteropServices._Type () Int) +(declare-fun block3927_correct () Int) +(declare-fun boolNot (Int) Int) +(declare-fun T () Int) +(declare-fun System.Runtime.InteropServices._MemberInfo () Int) +(declare-fun boolAnd (Int Int) Int) +(declare-fun boolImplies (Int Int) Int) +(declare-fun Unbox (Int) Int) +(declare-fun intAtLeast (Int Int) Int) +(declare-fun ownerFrame_ () Int) +(declare-fun int_4294967295 () Int) +(declare-fun IsAllocated (Int Int) Int) +(declare-fun TypeName (Int) Int) +(declare-fun AsPeerField (Int) Int) +(declare-fun int_9223372036854775807 () Int) +(declare-fun AsRepField (Int Int) Int) +(declare-fun System.Reflection.MemberInfo () Int) +(declare-fun ArrayCategoryValue_ () Int) +(declare-fun is (Int Int) Int) +(declare-fun InRange (Int Int) Bool) +(declare-fun AsOwner (Int Int) Int) +(declare-fun OwnedResults.Qz_System.Int32_ (Int Int Int) Int) +(declare-fun System.Int64 () Int) +(declare-fun or_ (Int Int) Int) +(declare-fun As_ (Int Int) Int) +(declare-fun exposeVersion_ () Int) +(declare-fun System.Type () Int) +(declare-fun intLess (Int Int) Int) +(declare-fun AsImmutable_ (Int) Int) +(declare-fun NonNullFieldsAreInitialized_ () Int) +(declare-fun LBound_ (Int Int) Int) +(declare-fun System.Object () Int) +(declare-fun System.UInt32 () Int) +(declare-fun localinv_ () Int) +(declare-fun inv_ () Int) +(declare-fun OwnedResults.Static0_ (Int) Int) +(declare-fun Heap_0_ () Int) +(declare-fun entry_correct () Int) +(declare-fun OwnedResults.Pz_ (Int Int) Int) +(declare-fun FirstConsistentOwner_ () Int) +(declare-fun UnboxedType (Int) Int) +(declare-fun AsRefField (Int Int) Int) +(declare-fun System.Byte () Int) +(declare-fun AdditiveMethods () Int) +(declare-fun this () Int) +(declare-fun int_2147483647 () Int) +(declare-fun ArrayCategoryRef_ () Int) +(declare-fun Heap_ () Int) +(declare-fun OwnedResults.Qz_System.Int32_.1 (Int Int) Int) +(declare-fun Length_ (Int) Int) +(declare-fun AsNonNullRefField (Int Int) Int) +(declare-fun Sub () Int) +(declare-fun IsHeap (Int) Int) +(declare-fun OwnedResults.Static1_ (Int) Int) +(declare-fun Heap_1_ () Int) +(declare-fun UBound_ (Int Int) Int) +(declare-fun System.String () Int) +(declare-fun System.String.IsInterned_System.String_notnull_ (Int) Int) +(declare-fun UnknownRef_ () Int) +(declare-fun Rank_ (Int) Int) +(declare-fun RefArraySet (Int Int Int) Int) +(declare-fun ValueArraySet (Int Int Int) Int) +(declare-fun boolOr (Int Int) Int) +(declare-fun sharingMode_ () Int) +(declare-fun AdditiveMethods.amRep () Int) +(declare-fun subtypes (Int Int) Bool) +(declare-fun System.String.Equals_System.String_System.String_ (Int Int) Int) +(declare-fun anyNeq (Int Int) Int) +(declare-fun IsStaticField (Int) Int) +(declare-fun IsNotNull_ (Int Int) Int) +(declare-fun typeof_ (Int) Int) +(declare-fun OwnedResults () Int) +(declare-fun ArrayCategoryNonNullRef_ () Int) +(declare-fun RefArrayGet (Int Int) Int) +(declare-fun ValueArrayGet (Int Int) Int) +(declare-fun TypeObject (Int) Int) +(declare-fun and_ (Int Int) Int) +(declare-fun OwnedResults.x () Int) +(declare-fun block3910_correct () Int) +(declare-fun BoxTester (Int Int) Int) +(declare-fun OwnedResults.y () Int) +(declare-fun OwnedResults.Static2_ () Int) +(declare-fun IsValueType_ (Int) Int) +(declare-fun AsRangeField (Int Int) Int) +(declare-fun AdditiveMethods.amPeer () Int) +(declare-fun System.SByte () Int) +(declare-fun BeingConstructed_ () Int) +(declare-fun FieldDependsOnFCO_ (Int Int Int) Int) +(declare-fun NonNullRefArray (Int Int) Int) +(declare-fun RefArray (Int Int) Int) +(declare-fun ArrayCategory_ (Int) Int) +(declare-fun AsPureObject_ (Int) Int) +(declare-fun System.String.Equals_System.String_ (Int Int) Int) +(declare-fun System.Int16 () Int) +(declare-fun AsMutable_ (Int) Int) +(declare-fun OwnedResults.Pw_.1 (Int) Int) +(declare-fun System.Char () Int) +(declare-fun System.UInt64 () Int) +(declare-fun StructGet_ (Int Int) Int) +(declare-fun OneClassDown (Int Int) Int) +(declare-fun ArrayIndex (Int Int Int Int) Int) +(declare-fun Box (Int Int) Int) +(declare-fun int_18446744073709551615 () Int) +(declare-fun shr_ (Int Int) Int) +(declare-fun OwnedResults.Pz_.1 (Int) Int) +(declare-fun IsDirectlyModifiableField (Int) Int) +(declare-fun StringLength_ (Int) Int) +(declare-fun allocated_ () Int) +(declare-fun BaseClass_ (Int) Int) +(declare-fun ValueArray (Int Int) Int) +(declare-fun Smt.false () Int) +(declare-fun IsImmutable_ (Int) Int) +(declare-fun elements_ () Int) +(declare-fun DeclType (Int) Int) +(declare-fun ReallyLastGeneratedExit_correct () Int) +(assert (distinct allocated_ elements_ inv_ localinv_ exposeVersion_ sharingMode_ SharingMode_Unshared_ SharingMode_LockProtected_ ownerRef_ ownerFrame_ PeerGroupPlaceholder_ ArrayCategoryValue_ ArrayCategoryRef_ ArrayCategoryNonNullRef_ System.Array System.Object System.Type BeingConstructed_ NonNullFieldsAreInitialized_ System.String FirstConsistentOwner_ System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64 System.Char int_m2147483648 int_2147483647 int_4294967295 int_m9223372036854775808 int_9223372036854775807 int_18446744073709551615 UnknownRef_ OwnedResults.x AdditiveMethods.amPeer AdditiveMethods.amRep OwnedResults.y OwnedResults System.Runtime.InteropServices._Type System.Runtime.InteropServices._MemberInfo System.Reflection.IReflect Sub System.Reflection.ICustomAttributeProvider System.Boolean AdditiveMethods T System.Reflection.MemberInfo)) +(assert (= (DeclType exposeVersion_) System.Object)) +(assert (forall ((?c0 Int) (?c1 Int)) (! (=> (not (= ?c0 ?c1)) (not (= (ClassRepr ?c0) (ClassRepr ?c1)))) :pattern ((ClassRepr ?c0) (ClassRepr ?c1)) ))) +(assert (forall ((?T Int)) (not (subtypes (typeof_ (ClassRepr ?T)) System.Object)))) +(assert (forall ((?T Int)) (not (= (ClassRepr ?T) nullObject)))) +(assert (forall ((?T Int) (?h Int)) (! (=> (= (IsHeap ?h) Smt.true) (= (select2 ?h (ClassRepr ?T) ownerFrame_) PeerGroupPlaceholder_)) :pattern ((select2 ?h (ClassRepr ?T) ownerFrame_)) ))) +(assert (not (= (IsDirectlyModifiableField allocated_) Smt.true))) +(assert (= (IsDirectlyModifiableField elements_) Smt.true)) +(assert (not (= (IsDirectlyModifiableField inv_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField localinv_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField ownerRef_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField ownerFrame_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField exposeVersion_) Smt.true))) +(assert (not (= (IsStaticField allocated_) Smt.true))) +(assert (not (= (IsStaticField elements_) Smt.true))) +(assert (not (= (IsStaticField inv_) Smt.true))) +(assert (not (= (IsStaticField localinv_) Smt.true))) +(assert (not (= (IsStaticField exposeVersion_) Smt.true))) +(assert (forall ((?A Int) (?i Int) (?x Int)) (= (ValueArrayGet (ValueArraySet ?A ?i ?x) ?i) ?x))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (ValueArrayGet (ValueArraySet ?A ?i ?x) ?j) (ValueArrayGet ?A ?j))))) +(assert (forall ((?A Int) (?i Int) (?x Int)) (= (RefArrayGet (RefArraySet ?A ?i ?x) ?i) ?x))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (RefArrayGet (RefArraySet ?A ?i ?x) ?j) (RefArrayGet ?A ?j))))) +(assert (forall ((?a Int) (?d Int) (?x Int) (?y Int) (|?x'| Int) (|?y'| Int)) (! (=> (= (ArrayIndex ?a ?d ?x ?y) (ArrayIndex ?a ?d |?x'| |?y'|)) (and (= ?x |?x'|) (= ?y |?y'|))) :pattern ((ArrayIndex ?a ?d ?x ?y) (ArrayIndex ?a ?d |?x'| |?y'|)) ))) +(assert (forall ((?a Int) (?T Int) (?i Int) (?r Int) (?heap Int)) (! (=> (and (= (IsHeap ?heap) Smt.true) (subtypes (typeof_ ?a) (RefArray ?T ?r))) (= (Is_ (RefArrayGet (select2 ?heap ?a elements_) ?i) ?T) Smt.true)) :pattern ((subtypes (typeof_ ?a) (RefArray ?T ?r)) (RefArrayGet (select2 ?heap ?a elements_) ?i)) ))) +(assert (forall ((?a Int) (?T Int) (?i Int) (?r Int) (?heap Int)) (! (=> (and (= (IsHeap ?heap) Smt.true) (subtypes (typeof_ ?a) (NonNullRefArray ?T ?r))) (= (IsNotNull_ (RefArrayGet (select2 ?heap ?a elements_) ?i) ?T) Smt.true)) :pattern ((subtypes (typeof_ ?a) (NonNullRefArray ?T ?r)) (RefArrayGet (select2 ?heap ?a elements_) ?i)) ))) +(assert (forall ((?a Int)) (<= 1 (Rank_ ?a)))) +(assert (forall ((?a Int) (?T Int) (?r Int)) (! (=> (and (not (= ?a nullObject)) (subtypes (typeof_ ?a) (RefArray ?T ?r))) (= (Rank_ ?a) ?r)) :pattern ((subtypes (typeof_ ?a) (RefArray ?T ?r))) ))) +(assert (forall ((?a Int) (?T Int) (?r Int)) (! (=> (and (not (= ?a nullObject)) (subtypes (typeof_ ?a) (NonNullRefArray ?T ?r))) (= (Rank_ ?a) ?r)) :pattern ((subtypes (typeof_ ?a) (NonNullRefArray ?T ?r))) ))) +(assert (forall ((?a Int) (?T Int) (?r Int)) (! (=> (and (not (= ?a nullObject)) (subtypes (typeof_ ?a) (ValueArray ?T ?r))) (= (Rank_ ?a) ?r)) :pattern ((subtypes (typeof_ ?a) (ValueArray ?T ?r))) ))) +(assert (forall ((?a Int)) (! (<= 0 (Length_ ?a)) :pattern ((Length_ ?a)) ))) +(assert (forall ((?a Int) (?i Int)) (<= 0 (DimLength_ ?a ?i)))) +(assert (forall ((?a Int)) (! (=> (= (Rank_ ?a) 1) (= (DimLength_ ?a 0) (Length_ ?a))) :pattern ((DimLength_ ?a 0)) ))) +(assert (forall ((?a Int) (?i Int)) (! (= (LBound_ ?a ?i) 0) :pattern ((LBound_ ?a ?i)) ))) +(assert (forall ((?a Int) (?i Int)) (! (= (UBound_ ?a ?i) (- (DimLength_ ?a ?i) 1)) :pattern ((UBound_ ?a ?i)) ))) +(assert (forall ((?T Int) (?ET Int) (?r Int)) (! (=> (subtypes ?T (ValueArray ?ET ?r)) (= (ArrayCategory_ ?T) ArrayCategoryValue_)) :pattern ((subtypes ?T (ValueArray ?ET ?r))) ))) +(assert (forall ((?T Int) (?ET Int) (?r Int)) (! (=> (subtypes ?T (RefArray ?ET ?r)) (= (ArrayCategory_ ?T) ArrayCategoryRef_)) :pattern ((subtypes ?T (RefArray ?ET ?r))) ))) +(assert (forall ((?T Int) (?ET Int) (?r Int)) (! (=> (subtypes ?T (NonNullRefArray ?ET ?r)) (= (ArrayCategory_ ?T) ArrayCategoryNonNullRef_)) :pattern ((subtypes ?T (NonNullRefArray ?ET ?r))) ))) +(assert (subtypes System.Array System.Object)) +(assert (forall ((?T Int) (?r Int)) (! (subtypes (ValueArray ?T ?r) System.Array) :pattern ((ValueArray ?T ?r)) ))) +(assert (forall ((?T Int) (?r Int)) (! (subtypes (RefArray ?T ?r) System.Array) :pattern ((RefArray ?T ?r)) ))) +(assert (forall ((?T Int) (?r Int)) (! (subtypes (NonNullRefArray ?T ?r) System.Array) :pattern ((NonNullRefArray ?T ?r)) ))) +(assert (forall ((?T Int) (?U Int) (?r Int)) (=> (subtypes ?U ?T) (subtypes (RefArray ?U ?r) (RefArray ?T ?r))))) +(assert (forall ((?T Int) (?U Int) (?r Int)) (=> (subtypes ?U ?T) (subtypes (NonNullRefArray ?U ?r) (NonNullRefArray ?T ?r))))) +(assert (forall ((?A Int) (?r Int)) (= (ElementType_ (ValueArray ?A ?r)) ?A))) +(assert (forall ((?A Int) (?r Int)) (= (ElementType_ (RefArray ?A ?r)) ?A))) +(assert (forall ((?A Int) (?r Int)) (= (ElementType_ (NonNullRefArray ?A ?r)) ?A))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (! (let ((?v_0 (ElementType_ ?T))) (=> (subtypes ?T (RefArray ?A ?r)) (and (= ?T (RefArray ?v_0 ?r)) (subtypes ?v_0 ?A)))) :pattern ((subtypes ?T (RefArray ?A ?r))) ))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (! (let ((?v_0 (ElementType_ ?T))) (=> (subtypes ?T (NonNullRefArray ?A ?r)) (and (= ?T (NonNullRefArray ?v_0 ?r)) (subtypes ?v_0 ?A)))) :pattern ((subtypes ?T (NonNullRefArray ?A ?r))) ))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ValueArray ?A ?r))) (=> (subtypes ?T ?v_0) (= ?T ?v_0))))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ElementType_ ?T))) (=> (subtypes (RefArray ?A ?r) ?T) (or (subtypes System.Array ?T) (and (= ?T (RefArray ?v_0 ?r)) (subtypes ?A ?v_0))))))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ElementType_ ?T))) (=> (subtypes (NonNullRefArray ?A ?r) ?T) (or (subtypes System.Array ?T) (and (= ?T (NonNullRefArray ?v_0 ?r)) (subtypes ?A ?v_0))))))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ValueArray ?A ?r))) (=> (subtypes ?v_0 ?T) (or (subtypes System.Array ?T) (= ?T ?v_0)))))) +(assert (forall ((?s Int) (?f Int) (?x Int)) (= (StructGet_ (StructSet_ ?s ?f ?x) ?f) ?x))) +(assert (forall ((?s Int) (?f Int) (|?f'| Int) (?x Int)) (=> (not (= ?f |?f'|)) (= (StructGet_ (StructSet_ ?s ?f ?x) |?f'|) (StructGet_ ?s |?f'|))))) +(assert (forall ((?A Int) (?B Int) (?C Int)) (! (=> (subtypes ?C (AsDirectSubClass ?B ?A)) (= (OneClassDown ?C ?A) ?B)) :pattern ((subtypes ?C (AsDirectSubClass ?B ?A))) ))) +(assert (forall ((?T Int)) (=> (= (IsValueType_ ?T) Smt.true) (and (forall ((?U Int)) (=> (subtypes ?T ?U) (= ?T ?U))) (forall ((?U Int)) (=> (subtypes ?U ?T) (= ?T ?U))))))) +(assert (subtypes System.Type System.Object)) +(assert (forall ((?T Int)) (! (= (IsNotNull_ (TypeObject ?T) System.Type) Smt.true) :pattern ((TypeObject ?T)) ))) +(assert (forall ((?T Int)) (! (= (TypeName (TypeObject ?T)) ?T) :pattern ((TypeObject ?T)) ))) +(assert (forall ((?o Int) (?T Int)) (! (= (= (Is_ ?o ?T) Smt.true) (or (= ?o nullObject) (subtypes (typeof_ ?o) ?T))) :pattern ((Is_ ?o ?T)) ))) +(assert (forall ((?o Int) (?T Int)) (! (= (= (IsNotNull_ ?o ?T) Smt.true) (and (not (= ?o nullObject)) (= (Is_ ?o ?T) Smt.true))) :pattern ((IsNotNull_ ?o ?T)) ))) +(assert (forall ((?o Int) (?T Int)) (=> (= (Is_ ?o ?T) Smt.true) (= (As_ ?o ?T) ?o)))) +(assert (forall ((?o Int) (?T Int)) (=> (not (= (Is_ ?o ?T) Smt.true)) (= (As_ ?o ?T) nullObject)))) +(assert (forall ((?h Int) (?o Int)) (! (let ((?v_0 (typeof_ ?o))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (subtypes ?v_0 System.Array)) (and (= (select2 ?h ?o inv_) ?v_0) (= (select2 ?h ?o localinv_) ?v_0)))) :pattern ((select2 ?h ?o inv_)) ))) +(assert (forall ((?h Int) (?o Int) (?f Int)) (! (=> (and (= (IsHeap ?h) Smt.true) (= (select2 ?h ?o allocated_) Smt.true)) (= (IsAllocated ?h (select2 ?h ?o ?f)) Smt.true)) :pattern ((IsAllocated ?h (select2 ?h ?o ?f))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int)) (! (=> (and (= (IsHeap ?h) Smt.true) (= (select2 ?h ?o allocated_) Smt.true)) (= (select2 ?h (select2 ?h ?o ?f) allocated_) Smt.true)) :pattern ((select2 ?h (select2 ?h ?o ?f) allocated_)) ))) +(assert (forall ((?h Int) (?s Int) (?f Int)) (! (=> (= (IsAllocated ?h ?s) Smt.true) (= (IsAllocated ?h (StructGet_ ?s ?f)) Smt.true)) :pattern ((IsAllocated ?h (StructGet_ ?s ?f))) ))) +(assert (forall ((?h Int) (?e Int) (?i Int)) (! (=> (= (IsAllocated ?h ?e) Smt.true) (= (IsAllocated ?h (RefArrayGet ?e ?i)) Smt.true)) :pattern ((IsAllocated ?h (RefArrayGet ?e ?i))) ))) +(assert (forall ((?h Int) (?e Int) (?i Int)) (! (=> (= (IsAllocated ?h ?e) Smt.true) (= (IsAllocated ?h (ValueArrayGet ?e ?i)) Smt.true)) :pattern ((IsAllocated ?h (ValueArrayGet ?e ?i))) ))) +(assert (forall ((?h Int) (?o Int)) (! (=> (= (IsAllocated ?h ?o) Smt.true) (= (select2 ?h ?o allocated_) Smt.true)) :pattern ((select2 ?h ?o allocated_)) ))) +(assert (forall ((?h Int) (?c Int)) (! (=> (= (IsHeap ?h) Smt.true) (= (select2 ?h (ClassRepr ?c) allocated_) Smt.true)) :pattern ((select2 ?h (ClassRepr ?c) allocated_)) ))) +(assert (forall ((?f Int) (?T Int)) (! (=> (= (AsNonNullRefField ?f ?T) ?f) (= (AsRefField ?f ?T) ?f)) :pattern ((AsNonNullRefField ?f ?T)) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (=> (= (IsHeap ?h) Smt.true) (= (Is_ (select2 ?h ?o (AsRefField ?f ?T)) ?T) Smt.true)) :pattern ((select2 ?h ?o (AsRefField ?f ?T))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (or (not (= ?o BeingConstructed_)) (= (= (select2 ?h BeingConstructed_ NonNullFieldsAreInitialized_) Smt.true) true))) (not (= (select2 ?h ?o (AsNonNullRefField ?f ?T)) nullObject))) :pattern ((select2 ?h ?o (AsNonNullRefField ?f ?T))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (=> (= (IsHeap ?h) Smt.true) (InRange (select2 ?h ?o (AsRangeField ?f ?T)) ?T)) :pattern ((select2 ?h ?o (AsRangeField ?f ?T))) ))) +(assert (forall ((?o Int)) (! (not (= (IsMemberlessType_ (typeof_ ?o)) Smt.true)) :pattern ((IsMemberlessType_ (typeof_ ?o))) ))) +(assert (not (= (IsImmutable_ System.Object) Smt.true))) +(assert (forall ((?T Int) (?U Int)) (! (=> (subtypes ?U (AsImmutable_ ?T)) (and (= (IsImmutable_ ?U) Smt.true) (= (AsImmutable_ ?U) ?U))) :pattern ((subtypes ?U (AsImmutable_ ?T))) ))) +(assert (forall ((?T Int) (?U Int)) (! (=> (subtypes ?U (AsMutable_ ?T)) (and (not (= (IsImmutable_ ?U) Smt.true)) (= (AsMutable_ ?U) ?U))) :pattern ((subtypes ?U (AsMutable_ ?T))) ))) +(assert (forall ((?o Int) (?T Int)) (! (=> (and (not (= ?o nullObject)) (not (= ?o BeingConstructed_)) (subtypes (typeof_ ?o) (AsImmutable_ ?T))) (forall ((?h Int)) (! (let ((?v_0 (typeof_ ?o))) (=> (= (IsHeap ?h) Smt.true) (and (= (select2 ?h ?o inv_) ?v_0) (= (select2 ?h ?o localinv_) ?v_0) (= (select2 ?h ?o ownerFrame_) PeerGroupPlaceholder_) (= (AsOwner ?o (select2 ?h ?o ownerRef_)) ?o) (forall ((?t Int)) (! (=> (= (AsOwner ?o (select2 ?h ?t ownerRef_)) ?o) (or (= ?t ?o) (not (= (select2 ?h ?t ownerFrame_) PeerGroupPlaceholder_)))) :pattern ((AsOwner ?o (select2 ?h ?t ownerRef_))) ))))) :pattern ((IsHeap ?h)) ))) :pattern ((subtypes (typeof_ ?o) (AsImmutable_ ?T))) ))) +(assert (forall ((?s Int)) (! (<= 0 (StringLength_ ?s)) :pattern ((StringLength_ ?s)) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (let ((?v_0 (select2 ?h ?o (AsRepField ?f ?T)))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?v_0 nullObject))) (and (= (select2 ?h ?v_0 ownerRef_) ?o) (= (select2 ?h ?v_0 ownerFrame_) ?T)))) :pattern ((select2 ?h ?o (AsRepField ?f ?T))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int)) (! (let ((?v_0 (select2 ?h ?o (AsPeerField ?f)))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?v_0 nullObject))) (and (= (select2 ?h ?v_0 ownerRef_) (select2 ?h ?o ownerRef_)) (= (select2 ?h ?v_0 ownerFrame_) (select2 ?h ?o ownerFrame_))))) :pattern ((select2 ?h ?o (AsPeerField ?f))) ))) +(assert (forall ((?h Int) (?o Int)) (let ((?v_0 (select2 ?h ?o ownerFrame_)) (?v_1 (select2 ?h ?o ownerRef_)) (?v_2 (typeof_ ?o))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?v_0 PeerGroupPlaceholder_)) (subtypes (select2 ?h ?v_1 inv_) ?v_0) (not (= (select2 ?h ?v_1 localinv_) (BaseClass_ ?v_0)))) (and (= (select2 ?h ?o inv_) ?v_2) (= (select2 ?h ?o localinv_) ?v_2)))))) +(assert (forall ((?o Int) (?f Int) (?h Int)) (! (let ((?v_0 (select2 ?h ?o ownerFrame_)) (?v_1 (select2 ?h ?o ownerRef_))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (= (= (select2 ?h ?o allocated_) Smt.true) true) (not (= ?v_0 PeerGroupPlaceholder_)) (subtypes (select2 ?h ?v_1 inv_) ?v_0) (not (= (select2 ?h ?v_1 localinv_) (BaseClass_ ?v_0)))) (= (select2 ?h ?o ?f) (FieldDependsOnFCO_ ?o ?f (select2 ?h (select2 ?h ?o FirstConsistentOwner_) exposeVersion_))))) :pattern ((select2 ?h (AsPureObject_ ?o) ?f)) ))) +(assert (forall ((?o Int) (?h Int)) (! (let ((?v_0 (select2 ?h ?o ownerFrame_)) (?v_1 (select2 ?h ?o ownerRef_)) (?v_2 (select2 ?h ?o FirstConsistentOwner_))) (let ((?v_3 (select2 ?h ?v_2 ownerFrame_)) (?v_4 (select2 ?h ?v_2 ownerRef_))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (= (= (select2 ?h ?o allocated_) Smt.true) true) (not (= ?v_0 PeerGroupPlaceholder_)) (subtypes (select2 ?h ?v_1 inv_) ?v_0) (not (= (select2 ?h ?v_1 localinv_) (BaseClass_ ?v_0)))) (and (not (= ?v_2 nullObject)) (= (= (select2 ?h ?v_2 allocated_) Smt.true) true) (or (= ?v_3 PeerGroupPlaceholder_) (not (subtypes (select2 ?h ?v_4 inv_) ?v_3)) (= (select2 ?h ?v_4 localinv_) (BaseClass_ ?v_3))))))) :pattern ((select2 ?h ?o FirstConsistentOwner_)) ))) +(assert (forall ((?x Int) (?p Int)) (! (= (Unbox (Box ?x ?p)) ?x) :pattern ((Unbox (Box ?x ?p))) ))) +(assert (forall ((?p Int)) (! (=> (= (IsValueType_ (UnboxedType ?p)) Smt.true) (forall ((?heap Int) (?x Int)) (let ((?v_0 (Box ?x ?p))) (let ((?v_1 (typeof_ ?v_0))) (=> (= (IsHeap ?heap) Smt.true) (and (= (select2 ?heap ?v_0 inv_) ?v_1) (= (select2 ?heap ?v_0 localinv_) ?v_1))))))) :pattern ((IsValueType_ (UnboxedType ?p))) ))) +(assert (forall ((?x Int) (?p Int)) (let ((?v_0 (Box ?x ?p))) (=> (and (subtypes (UnboxedType ?v_0) System.Object) (= ?v_0 ?p)) (= ?x ?p))))) +(assert (forall ((?p Int) (?typ Int)) (! (= (= (UnboxedType ?p) ?typ) (not (= (BoxTester ?p ?typ) nullObject))) :pattern ((BoxTester ?p ?typ)) ))) +(assert (= (IsValueType_ System.SByte) Smt.true)) +(assert (= (IsValueType_ System.Byte) Smt.true)) +(assert (= (IsValueType_ System.Int16) Smt.true)) +(assert (= (IsValueType_ System.UInt16) Smt.true)) +(assert (= (IsValueType_ System.Int32) Smt.true)) +(assert (= (IsValueType_ System.UInt32) Smt.true)) +(assert (= (IsValueType_ System.Int64) Smt.true)) +(assert (= (IsValueType_ System.UInt64) Smt.true)) +(assert (= (IsValueType_ System.Char) Smt.true)) +(assert (< int_m9223372036854775808 int_m2147483648)) +(assert (< int_m2147483648 (- 0 100000))) +(assert (< 100000 int_2147483647)) +(assert (< int_2147483647 int_4294967295)) +(assert (< int_4294967295 int_9223372036854775807)) +(assert (< int_9223372036854775807 int_18446744073709551615)) +(assert (forall ((?i Int)) (= (InRange ?i System.SByte) (and (<= (- 0 128) ?i) (< ?i 128))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Byte) (and (<= 0 ?i) (< ?i 256))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Int16) (and (<= (- 0 32768) ?i) (< ?i 32768))))) +(assert (forall ((?i Int)) (= (InRange ?i System.UInt16) (and (<= 0 ?i) (< ?i 65536))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Int32) (and (<= int_m2147483648 ?i) (<= ?i int_2147483647))))) +(assert (forall ((?i Int)) (= (InRange ?i System.UInt32) (and (<= 0 ?i) (<= ?i int_4294967295))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Int64) (and (<= int_m9223372036854775808 ?i) (<= ?i int_9223372036854775807))))) +(assert (forall ((?i Int)) (= (InRange ?i System.UInt64) (and (<= 0 ?i) (<= ?i int_18446744073709551615))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Char) (and (<= 0 ?i) (< ?i 65536))))) +(assert (forall ((?b Int) (?x Int) (?y Int)) (! (=> (= ?b Smt.true) (= (IfThenElse_ ?b ?x ?y) ?x)) :pattern ((IfThenElse_ ?b ?x ?y)) ))) +(assert (forall ((?b Int) (?x Int) (?y Int)) (! (=> (not (= ?b Smt.true)) (= (IfThenElse_ ?b ?x ?y) ?y)) :pattern ((IfThenElse_ ?b ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (modulo ?x ?y) (- ?x (multiply (divide ?x ?y) ?y))) :pattern ((modulo ?x ?y)) :pattern ((divide ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= 0 ?x) (< 0 ?y)) (and (<= 0 ?v_0) (< ?v_0 ?y)))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= 0 ?x) (< ?y 0)) (and (<= 0 ?v_0) (< ?v_0 (- 0 ?y))))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= ?x 0) (< 0 ?y)) (and (< (- 0 ?y) ?v_0) (<= ?v_0 0)))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= ?x 0) (< ?y 0)) (and (< ?y ?v_0) (<= ?v_0 0)))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (= (modulo (+ ?x ?y) ?y) (modulo ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (= (modulo (+ ?y ?x) ?y) (modulo ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (- ?x ?y))) (=> (and (<= 0 ?v_0) (<= 0 ?y)) (= (modulo ?v_0 ?y) (modulo ?x ?y)))))) +(assert (forall ((?a Int) (?b Int) (?d Int)) (! (=> (and (<= 2 ?d) (= (modulo ?a ?d) (modulo ?b ?d)) (< ?a ?b)) (<= (+ ?a ?d) ?b)) :pattern ((modulo ?a ?d) (modulo ?b ?d)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (and_ ?x ?y))) :pattern ((and_ ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (or_ ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= 0 ?v_0) (<= ?v_0 (+ ?x ?y))))) :pattern ((or_ ?x ?y)) ))) +(assert (forall ((?i Int)) (! (= (shl_ ?i 0) ?i) :pattern ((shl_ ?i 0)) ))) +(assert (forall ((?i Int) (?j Int)) (=> (<= 0 ?j) (= (shl_ ?i (+ ?j 1)) (* (shl_ ?i ?j) 2))))) +(assert (forall ((?i Int)) (! (= (shr_ ?i 0) ?i) :pattern ((shr_ ?i 0)) ))) +(assert (forall ((?i Int) (?j Int)) (=> (<= 0 ?j) (= (shr_ ?i (+ ?j 1)) (divide (shr_ ?i ?j) 2))))) +(assert (forall ((?a Int) (?b Int)) (! (= (= (System.String.Equals_System.String_ ?a ?b) Smt.true) (= (System.String.Equals_System.String_System.String_ ?a ?b) Smt.true)) :pattern ((System.String.Equals_System.String_ ?a ?b)) ))) +(assert (forall ((?a Int) (?b Int)) (! (= (= (System.String.Equals_System.String_System.String_ ?a ?b) Smt.true) (= (System.String.Equals_System.String_System.String_ ?b ?a) Smt.true)) :pattern ((System.String.Equals_System.String_System.String_ ?a ?b)) ))) +(assert (forall ((?a Int) (?b Int)) (! (=> (and (not (= ?a nullObject)) (not (= ?b nullObject)) (= (System.String.Equals_System.String_System.String_ ?a ?b) Smt.true)) (= (System.String.IsInterned_System.String_notnull_ ?a) (System.String.IsInterned_System.String_notnull_ ?b))) :pattern ((System.String.Equals_System.String_System.String_ ?a ?b)) ))) +(assert (not (= (IsStaticField AdditiveMethods.amPeer) Smt.true))) +(assert (= (IsDirectlyModifiableField AdditiveMethods.amPeer) Smt.true)) +(assert (= (AsPeerField AdditiveMethods.amPeer) AdditiveMethods.amPeer)) +(assert (= (DeclType AdditiveMethods.amPeer) AdditiveMethods)) +(assert (= (AsRefField AdditiveMethods.amPeer AdditiveMethods) AdditiveMethods.amPeer)) +(assert (not (= (IsStaticField AdditiveMethods.amRep) Smt.true))) +(assert (= (IsDirectlyModifiableField AdditiveMethods.amRep) Smt.true)) +(assert (= (AsRepField AdditiveMethods.amRep AdditiveMethods) AdditiveMethods.amRep)) +(assert (= (DeclType AdditiveMethods.amRep) AdditiveMethods)) +(assert (= (AsRefField AdditiveMethods.amRep AdditiveMethods) AdditiveMethods.amRep)) +(assert (not (= (IsStaticField OwnedResults.x) Smt.true))) +(assert (= (IsDirectlyModifiableField OwnedResults.x) Smt.true)) +(assert (= (AsRepField OwnedResults.x OwnedResults) OwnedResults.x)) +(assert (= (DeclType OwnedResults.x) OwnedResults)) +(assert (= (AsRefField OwnedResults.x T) OwnedResults.x)) +(assert (not (= (IsStaticField OwnedResults.y) Smt.true))) +(assert (= (IsDirectlyModifiableField OwnedResults.y) Smt.true)) +(assert (= (AsPeerField OwnedResults.y) OwnedResults.y)) +(assert (= (DeclType OwnedResults.y) OwnedResults)) +(assert (= (AsRefField OwnedResults.y T) OwnedResults.y)) +(assert (subtypes AdditiveMethods AdditiveMethods)) +(assert (= (BaseClass_ AdditiveMethods) System.Object)) +(assert (subtypes AdditiveMethods (BaseClass_ AdditiveMethods))) +(assert (= (AsDirectSubClass AdditiveMethods (BaseClass_ AdditiveMethods)) AdditiveMethods)) +(assert (not (= (IsImmutable_ AdditiveMethods) Smt.true))) +(assert (= (AsMutable_ AdditiveMethods) AdditiveMethods)) +(assert (subtypes System.Type System.Type)) +(assert (subtypes System.Reflection.MemberInfo System.Reflection.MemberInfo)) +(assert (= (BaseClass_ System.Reflection.MemberInfo) System.Object)) +(assert (subtypes System.Reflection.MemberInfo (BaseClass_ System.Reflection.MemberInfo))) +(assert (= (AsDirectSubClass System.Reflection.MemberInfo (BaseClass_ System.Reflection.MemberInfo)) System.Reflection.MemberInfo)) +(assert (= (IsImmutable_ System.Reflection.MemberInfo) Smt.true)) +(assert (= (AsImmutable_ System.Reflection.MemberInfo) System.Reflection.MemberInfo)) +(assert (subtypes System.Reflection.ICustomAttributeProvider System.Object)) +(assert (= (IsMemberlessType_ System.Reflection.ICustomAttributeProvider) Smt.true)) +(assert (subtypes System.Reflection.MemberInfo System.Reflection.ICustomAttributeProvider)) +(assert (subtypes System.Runtime.InteropServices._MemberInfo System.Object)) +(assert (= (IsMemberlessType_ System.Runtime.InteropServices._MemberInfo) Smt.true)) +(assert (subtypes System.Reflection.MemberInfo System.Runtime.InteropServices._MemberInfo)) +(assert (= (IsMemberlessType_ System.Reflection.MemberInfo) Smt.true)) +(assert (= (BaseClass_ System.Type) System.Reflection.MemberInfo)) +(assert (subtypes System.Type (BaseClass_ System.Type))) +(assert (= (AsDirectSubClass System.Type (BaseClass_ System.Type)) System.Type)) +(assert (= (IsImmutable_ System.Type) Smt.true)) +(assert (= (AsImmutable_ System.Type) System.Type)) +(assert (subtypes System.Runtime.InteropServices._Type System.Object)) +(assert (= (IsMemberlessType_ System.Runtime.InteropServices._Type) Smt.true)) +(assert (subtypes System.Type System.Runtime.InteropServices._Type)) +(assert (subtypes System.Reflection.IReflect System.Object)) +(assert (= (IsMemberlessType_ System.Reflection.IReflect) Smt.true)) +(assert (subtypes System.Type System.Reflection.IReflect)) +(assert (= (IsMemberlessType_ System.Type) Smt.true)) +(assert (subtypes Sub Sub)) +(assert (= (BaseClass_ Sub) AdditiveMethods)) +(assert (subtypes Sub (BaseClass_ Sub))) +(assert (= (AsDirectSubClass Sub (BaseClass_ Sub)) Sub)) +(assert (not (= (IsImmutable_ Sub) Smt.true))) +(assert (= (AsMutable_ Sub) Sub)) +(assert (subtypes OwnedResults OwnedResults)) +(assert (= (BaseClass_ OwnedResults) System.Object)) +(assert (subtypes OwnedResults (BaseClass_ OwnedResults))) +(assert (= (AsDirectSubClass OwnedResults (BaseClass_ OwnedResults)) OwnedResults)) +(assert (not (= (IsImmutable_ OwnedResults) Smt.true))) +(assert (= (AsMutable_ OwnedResults) OwnedResults)) +(assert (subtypes T T)) +(assert (= (BaseClass_ T) System.Object)) +(assert (subtypes T (BaseClass_ T))) +(assert (= (AsDirectSubClass T (BaseClass_ T)) T)) +(assert (not (= (IsImmutable_ T) Smt.true))) +(assert (= (AsMutable_ T) T)) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (OwnedResults.Mz_ ?Heap_ ?this))) (=> (and (= (IsHeap ?Heap_) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2)))))) (= ?v_0 (select2 ?Heap_ ?this OwnedResults.x))))) :pattern ((OwnedResults.Mz_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (OwnedResults.Pz_ ?Heap_ ?this))) (=> (and (= (IsHeap ?Heap_) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2)))))) (= ?v_0 (select2 ?Heap_ ?this OwnedResults.x))))) :pattern ((OwnedResults.Pz_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (typeof_ ?this))) (=> (and (not (= ?this nullObject)) (subtypes ?v_0 OwnedResults) (= (select2 ?Heap_ ?this inv_) ?v_0) (= (select2 ?Heap_ ?this localinv_) ?v_0) (= (IsHeap ?Heap_) Smt.true) (= (= (select2 ?Heap_ ?this allocated_) Smt.true) true)) (= (OwnedResults.Pz_ ?Heap_ ?this) (OwnedResults.Pz_.1 (select2 ?Heap_ ?this exposeVersion_))))) :pattern ((OwnedResults.Pz_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (OwnedResults.Pw_ ?Heap_ ?this))) (=> (and (= (IsHeap ?Heap_) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2)))))) (= ?v_0 (select2 ?Heap_ ?this OwnedResults.y))))) :pattern ((OwnedResults.Pw_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (typeof_ ?this))) (=> (and (not (= ?this nullObject)) (subtypes ?v_0 OwnedResults) (= (select2 ?Heap_ ?this inv_) ?v_0) (= (select2 ?Heap_ ?this localinv_) ?v_0) (= (IsHeap ?Heap_) Smt.true) (= (= (select2 ?Heap_ ?this allocated_) Smt.true) true)) (= (OwnedResults.Pw_ ?Heap_ ?this) (OwnedResults.Pw_.1 (select2 ?Heap_ ?this exposeVersion_))))) :pattern ((OwnedResults.Pw_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int) (?k_in Int)) (! (let ((?v_0 (OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in))) (=> (and (= (IsHeap ?Heap_) Smt.true) (InRange ?k_in System.Int32) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2))))))))) :pattern ((OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in)) ))) +(assert (forall ((?Heap_ Int) (?this Int) (?k_in Int)) (! (let ((?v_0 (typeof_ ?this))) (=> (and (not (= ?this nullObject)) (subtypes ?v_0 OwnedResults) (= (select2 ?Heap_ ?this inv_) ?v_0) (= (select2 ?Heap_ ?this localinv_) ?v_0) (= (IsHeap ?Heap_) Smt.true) (= (= (select2 ?Heap_ ?this allocated_) Smt.true) true)) (= (OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in) (OwnedResults.Qz_System.Int32_.1 (select2 ?Heap_ ?this exposeVersion_) ?k_in)))) :pattern ((OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in)) ))) +(assert (forall ((?U_ Int)) (! (=> (subtypes ?U_ System.Boolean) (= ?U_ System.Boolean)) :pattern ((subtypes ?U_ System.Boolean)) ))) +(assert (forall ((?Heap_ Int)) (! (let ((?v_0 (OwnedResults.Static0_ ?Heap_))) (=> (= (IsHeap ?Heap_) Smt.true) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (IsNotNull_ ?v_0 T) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))))) :pattern ((OwnedResults.Static0_ ?Heap_)) ))) +(assert (forall ((?Heap_ Int)) (! (let ((?v_0 (OwnedResults.Static1_ ?Heap_))) (=> (= (IsHeap ?Heap_) Smt.true) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (IsNotNull_ ?v_0 T) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))))) :pattern ((OwnedResults.Static1_ ?Heap_)) ))) +(assert (=> true (= (IsNotNull_ OwnedResults.Static2_ T) Smt.true))) +(assert (forall ((?A Int) (?i Int) (?v Int)) (= (select1 (store1 ?A ?i ?v) ?i) ?v))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?v Int)) (=> (not (= ?i ?j)) (= (select1 (store1 ?A ?i ?v) ?j) (select1 ?A ?j))))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?v Int)) (= (select2 (store2 ?A ?o ?f ?v) ?o ?f) ?v))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?o ?p)) (= (select2 (store2 ?A ?o ?f ?v) ?p ?g) (select2 ?A ?p ?g))))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?f ?g)) (= (select2 (store2 ?A ?o ?f ?v) ?p ?g) (select2 ?A ?p ?g))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolIff ?x ?y) Smt.true) (= (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolImplies ?x ?y) Smt.true) (=> (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolAnd ?x ?y) Smt.true) (and (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolOr ?x ?y) Smt.true) (or (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int)) (! (= (= (boolNot ?x) Smt.true) (not (= ?x Smt.true))) :pattern ((boolNot ?x)) ))) +(assert (forall ((?x Int) (?y Int)) (= (= (anyEqual ?x ?y) Smt.true) (= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (anyNeq ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((anyNeq ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (= (= (intLess ?x ?y) Smt.true) (< ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intAtMost ?x ?y) Smt.true) (<= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intAtLeast ?x ?y) Smt.true) (>= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intGreater ?x ?y) Smt.true) (> ?x ?y)))) +(assert (distinct Smt.false Smt.true)) +(assert (forall ((?t Int)) (! (subtypes ?t ?t) :pattern ((subtypes ?t ?t)) ))) +(assert (forall ((?t Int) (?u Int) (?v Int)) (! (=> (and (subtypes ?t ?u) (subtypes ?u ?v)) (subtypes ?t ?v)) :pattern ((subtypes ?t ?u) (subtypes ?u ?v)) ))) +(assert (forall ((?t Int) (?u Int)) (! (=> (and (subtypes ?t ?u) (subtypes ?u ?t)) (= ?t ?u)) :pattern ((subtypes ?t ?u) (subtypes ?u ?t)) ))) +(assert (let ((?v_1 (select2 Heap_ this ownerRef_)) (?v_2 (select2 Heap_ this ownerFrame_))) (let ((?v_0 (= ?v_2 PeerGroupPlaceholder_)) (?v_6 (typeof_ this)) (?v_3 (not (= this nullObject))) (?v_4 (select2 Heap_0_ this ownerFrame_)) (?v_5 (select2 Heap_0_ this ownerRef_)) (?v_7 (= (select2 Heap_0_ this inv_) System.Object))) (let ((?v_8 (= (select2 Heap_0_ this localinv_) ?v_6)) (?v_9 (forall ((?p_ Int)) (let ((?v_23 (typeof_ ?p_))) (=> (and (not (= ?p_ nullObject)) (= (= (select2 Heap_0_ ?p_ allocated_) Smt.true) true) (= (select2 Heap_0_ ?p_ ownerRef_) this) (= (select2 Heap_0_ ?p_ ownerFrame_) AdditiveMethods)) (and (= (select2 Heap_0_ ?p_ inv_) ?v_23) (= (select2 Heap_0_ ?p_ localinv_) ?v_23)))))) (?v_10 (forall ((?o_ Int)) (=> (and (not (= ?o_ nullObject)) (= (= (select2 Heap_ ?o_ allocated_) Smt.true) true)) (and (= (select2 Heap_ ?o_ ownerRef_) (select2 Heap_1_ ?o_ ownerRef_)) (= (select2 Heap_ ?o_ ownerFrame_) (select2 Heap_1_ ?o_ ownerFrame_)))))) (?v_11 (= (select2 Heap_1_ this sharingMode_) SharingMode_Unshared_)) (?v_15 (select2 Heap_1_ this ownerRef_))) (let ((?v_12 (= ?v_15 ?v_1)) (?v_14 (select2 Heap_1_ this ownerFrame_))) (let ((?v_13 (= ?v_14 ?v_2)) (?v_16 (or (= ?v_14 PeerGroupPlaceholder_) (not (subtypes (select2 Heap_1_ ?v_15 inv_) ?v_14)) (= (select2 Heap_1_ ?v_15 localinv_) (BaseClass_ ?v_14)))) (?v_17 (= (select2 Heap_1_ this inv_) AdditiveMethods)) (?v_18 (= (select2 Heap_1_ this localinv_) ?v_6)) (?v_19 (= ReallyLastGeneratedExit_correct Smt.true)) (?v_20 (= block3927_correct Smt.true)) (?v_21 (= block3910_correct Smt.true)) (?v_22 (= entry_correct Smt.true))) (not (=> (=> (=> true (=> (= (IsHeap Heap_) Smt.true) (=> (= BeingConstructed_ this) (=> (forall ((?o_ Int)) (=> (and (= (select2 Heap_ ?o_ ownerRef_) ?v_1) (= (select2 Heap_ ?o_ ownerFrame_) ?v_2)) (= ?o_ this))) (=> (and (= ?v_1 this) ?v_0) (=> (forall ((?o_ Int)) (=> (not (= ?o_ this)) (not (= (select2 Heap_ ?o_ ownerRef_) this)))) (=> true (=> (= (IsNotNull_ this AdditiveMethods) Smt.true) (=> (= (= (select2 Heap_ this allocated_) Smt.true) true) (=> (and (or ?v_0 (not (subtypes (select2 Heap_ ?v_1 inv_) ?v_2)) (= (select2 Heap_ ?v_1 localinv_) (BaseClass_ ?v_2))) (= (select2 Heap_ this inv_) System.Object) (= (select2 Heap_ this localinv_) ?v_6)) (=> (= (select2 Heap_ this AdditiveMethods.amPeer) nullObject) (=> (= (select2 Heap_ this AdditiveMethods.amRep) nullObject) (=> true (=> (=> (=> true (=> true (=> true (=> (=> (=> true (=> true (and ?v_3 (=> ?v_3 (=> (= (IsHeap Heap_0_) Smt.true) (=> (and (or (= ?v_4 PeerGroupPlaceholder_) (not (subtypes (select2 Heap_0_ ?v_5 inv_) ?v_4)) (= (select2 Heap_0_ ?v_5 localinv_) (BaseClass_ ?v_4))) ?v_7 ?v_8) (=> (and (= ?v_5 ?v_1) (= ?v_4 ?v_2)) (=> (= (select2 Heap_0_ this sharingMode_) SharingMode_Unshared_) (=> (forall ((?o_ Int)) (let ((?v_24 (typeof_ ?o_))) (=> (and (not (= ?o_ nullObject)) (= (= (select2 Heap_ ?o_ allocated_) Smt.true) (not true)) (= (= (select2 Heap_0_ ?o_ allocated_) Smt.true) true)) (and (= (select2 Heap_0_ ?o_ inv_) ?v_24) (= (select2 Heap_0_ ?o_ localinv_) ?v_24))))) (=> (forall ((?o_ Int)) (! (let ((?v_25 (select2 Heap_ ?o_ FirstConsistentOwner_))) (=> (= (select2 Heap_ ?v_25 exposeVersion_) (select2 Heap_0_ ?v_25 exposeVersion_)) (= ?v_25 (select2 Heap_0_ ?o_ FirstConsistentOwner_)))) :pattern ((select2 Heap_0_ ?o_ FirstConsistentOwner_)) )) (=> (forall ((?o_ Int)) (=> (and (not (= ?o_ nullObject)) (= (= (select2 Heap_ ?o_ allocated_) Smt.true) true)) (and (= (select2 Heap_ ?o_ ownerRef_) (select2 Heap_0_ ?o_ ownerRef_)) (= (select2 Heap_ ?o_ ownerFrame_) (select2 Heap_0_ ?o_ ownerFrame_))))) (=> (forall ((?o_ Int) (?f_ Int)) (! (let ((?v_26 (select2 Heap_ ?o_ ownerFrame_)) (?v_27 (select2 Heap_ ?o_ ownerRef_))) (=> (and (not (= ?f_ inv_)) (not (= ?f_ localinv_)) (not (= ?f_ FirstConsistentOwner_)) (or (not (= (IsStaticField ?f_) Smt.true)) (not (= (IsDirectlyModifiableField ?f_) Smt.true))) (not (= ?o_ nullObject)) (= (= (select2 Heap_ ?o_ allocated_) Smt.true) true) (or (= ?v_26 PeerGroupPlaceholder_) (not (subtypes (select2 Heap_ ?v_27 inv_) ?v_26)) (= (select2 Heap_ ?v_27 localinv_) (BaseClass_ ?v_26))) (or (not (= ?o_ this)) (not (subtypes System.Object (DeclType ?f_)))) true) (= (select2 Heap_ ?o_ ?f_) (select2 Heap_0_ ?o_ ?f_)))) :pattern ((select2 Heap_0_ ?o_ ?f_)) )) (=> (forall ((?o_ Int)) (or (= ?o_ this) (and (= (select2 Heap_ ?o_ inv_) (select2 Heap_0_ ?o_ inv_)) (= (select2 Heap_ ?o_ localinv_) (select2 Heap_0_ ?o_ localinv_))) (= (= (select2 Heap_ ?o_ allocated_) Smt.true) (not true)))) (=> (and (forall ((?o_ Int)) (=> (= (= (select2 Heap_ ?o_ allocated_) Smt.true) true) (= (= (select2 Heap_0_ ?o_ allocated_) Smt.true) true))) (forall ((?ot_ Int)) (let ((?v_28 (select2 Heap_ ?ot_ ownerFrame_))) (=> (and (= (= (select2 Heap_ ?ot_ allocated_) Smt.true) true) (not (= ?v_28 PeerGroupPlaceholder_))) (and (= (select2 Heap_0_ ?ot_ ownerRef_) (select2 Heap_ ?ot_ ownerRef_)) (= (select2 Heap_0_ ?ot_ ownerFrame_) ?v_28))))) (= (= (select2 Heap_ BeingConstructed_ NonNullFieldsAreInitialized_) Smt.true) (= (select2 Heap_0_ BeingConstructed_ NonNullFieldsAreInitialized_) Smt.true))) (=> (forall ((?o_ Int)) (or (= ?o_ this) (= (select2 Heap_ ?o_ sharingMode_) (select2 Heap_0_ ?o_ sharingMode_)))) (and ?v_3 (=> ?v_3 (and ?v_7 ?v_8 (=> (and ?v_7 ?v_8) (and ?v_9 (=> ?v_9 (=> (= Heap_1_ (store2 Heap_0_ this inv_ AdditiveMethods)) (=> (= (IsHeap Heap_1_) Smt.true) (=> true (=> (=> (=> true (and ?v_10 (=> ?v_10 (and ?v_11 (=> ?v_11 (and ?v_12 ?v_13 (=> (and ?v_12 ?v_13) (and ?v_16 ?v_17 ?v_18 (=> (and ?v_16 ?v_17 ?v_18) (=> true true)))))))))) ?v_19) ?v_19))))))))))))))))))))))))) ?v_20) ?v_20)))) ?v_21) ?v_21)))))))))))))) ?v_22) ?v_22)))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/AdditiveMethods_OwnedResults.Mz.smt2 b/test/regress/regress0/quantifiers/AdditiveMethods_OwnedResults.Mz.smt2 new file mode 100644 index 000000000..670dcc006 --- /dev/null +++ b/test/regress/regress0/quantifiers/AdditiveMethods_OwnedResults.Mz.smt2 @@ -0,0 +1,399 @@ +(set-logic AUFLIA) +(set-info :source | + Boogie/Spec# benchmarks. + This benchmark was translated by Michal Moskal. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun boolIff (Int Int) Int) +(declare-fun PeerGroupPlaceholder_ () Int) +(declare-fun intGreater (Int Int) Int) +(declare-fun IfThenElse_ (Int Int Int) Int) +(declare-fun CONCVARSYM (Int) Int) +(declare-fun SharingMode_Unshared_ () Int) +(declare-fun OwnedResults.Mz_ (Int Int) Int) +(declare-fun System.Reflection.IReflect () Int) +(declare-fun int_m2147483648 () Int) +(declare-fun System.Int32 () Int) +(declare-fun intAtMost (Int Int) Int) +(declare-fun multiply (Int Int) Int) +(declare-fun Is_ (Int Int) Int) +(declare-fun Smt.true () Int) +(declare-fun ElementType_ (Int) Int) +(declare-fun divide (Int Int) Int) +(declare-fun int_m9223372036854775808 () Int) +(declare-fun divides (Int Int) Int) +(declare-fun select1 (Int Int) Int) +(declare-fun store1 (Int Int Int) Int) +(declare-fun select2 (Int Int Int) Int) +(declare-fun nullObject () Int) +(declare-fun store2 (Int Int Int Int) Int) +(declare-fun modulo (Int Int) Int) +(declare-fun ownerRef_ () Int) +(declare-fun StructSet_ (Int Int Int) Int) +(declare-fun AsDirectSubClass (Int Int) Int) +(declare-fun OwnedResults.Pw_ (Int Int) Int) +(declare-fun System.Boolean () Int) +(declare-fun shl_ (Int Int) Int) +(declare-fun DimLength_ (Int Int) Int) +(declare-fun block8823_correct () Int) +(declare-fun anyEqual (Int Int) Int) +(declare-fun System.Array () Int) +(declare-fun System.Reflection.ICustomAttributeProvider () Int) +(declare-fun SharingMode_LockProtected_ () Int) +(declare-fun IsMemberlessType_ (Int) Int) +(declare-fun System.UInt16 () Int) +(declare-fun ClassRepr (Int) Int) +(declare-fun System.Runtime.InteropServices._Type () Int) +(declare-fun boolNot (Int) Int) +(declare-fun T () Int) +(declare-fun System.Runtime.InteropServices._MemberInfo () Int) +(declare-fun boolAnd (Int Int) Int) +(declare-fun boolImplies (Int Int) Int) +(declare-fun Unbox (Int) Int) +(declare-fun intAtLeast (Int Int) Int) +(declare-fun ownerFrame_ () Int) +(declare-fun int_4294967295 () Int) +(declare-fun IsAllocated (Int Int) Int) +(declare-fun TypeName (Int) Int) +(declare-fun AsPeerField (Int) Int) +(declare-fun int_9223372036854775807 () Int) +(declare-fun block8840_correct () Int) +(declare-fun AsRepField (Int Int) Int) +(declare-fun System.Reflection.MemberInfo () Int) +(declare-fun ArrayCategoryValue_ () Int) +(declare-fun is (Int Int) Int) +(declare-fun InRange (Int Int) Bool) +(declare-fun AsOwner (Int Int) Int) +(declare-fun OwnedResults.Qz_System.Int32_ (Int Int Int) Int) +(declare-fun System.Int64 () Int) +(declare-fun or_ (Int Int) Int) +(declare-fun As_ (Int Int) Int) +(declare-fun exposeVersion_ () Int) +(declare-fun System.Type () Int) +(declare-fun intLess (Int Int) Int) +(declare-fun AsImmutable_ (Int) Int) +(declare-fun NonNullFieldsAreInitialized_ () Int) +(declare-fun LBound_ (Int Int) Int) +(declare-fun System.Object () Int) +(declare-fun System.UInt32 () Int) +(declare-fun localinv_ () Int) +(declare-fun inv_ () Int) +(declare-fun OwnedResults.Static0_ (Int) Int) +(declare-fun entry_correct () Int) +(declare-fun OwnedResults.Pz_ (Int Int) Int) +(declare-fun FirstConsistentOwner_ () Int) +(declare-fun UnboxedType (Int) Int) +(declare-fun AsRefField (Int Int) Int) +(declare-fun System.Byte () Int) +(declare-fun AdditiveMethods () Int) +(declare-fun this () Int) +(declare-fun int_2147483647 () Int) +(declare-fun ArrayCategoryRef_ () Int) +(declare-fun Heap_ () Int) +(declare-fun OwnedResults.Qz_System.Int32_.1 (Int Int) Int) +(declare-fun Length_ (Int) Int) +(declare-fun AsNonNullRefField (Int Int) Int) +(declare-fun Sub () Int) +(declare-fun IsHeap (Int) Int) +(declare-fun OwnedResults.Static1_ (Int) Int) +(declare-fun UBound_ (Int Int) Int) +(declare-fun System.String () Int) +(declare-fun System.String.IsInterned_System.String_notnull_ (Int) Int) +(declare-fun UnknownRef_ () Int) +(declare-fun Rank_ (Int) Int) +(declare-fun RefArraySet (Int Int Int) Int) +(declare-fun ValueArraySet (Int Int Int) Int) +(declare-fun boolOr (Int Int) Int) +(declare-fun sharingMode_ () Int) +(declare-fun AdditiveMethods.amRep () Int) +(declare-fun subtypes (Int Int) Bool) +(declare-fun System.String.Equals_System.String_System.String_ (Int Int) Int) +(declare-fun anyNeq (Int Int) Int) +(declare-fun IsStaticField (Int) Int) +(declare-fun IsNotNull_ (Int Int) Int) +(declare-fun typeof_ (Int) Int) +(declare-fun OwnedResults () Int) +(declare-fun ArrayCategoryNonNullRef_ () Int) +(declare-fun RefArrayGet (Int Int) Int) +(declare-fun ValueArrayGet (Int Int) Int) +(declare-fun TypeObject (Int) Int) +(declare-fun and_ (Int Int) Int) +(declare-fun OwnedResults.x () Int) +(declare-fun BoxTester (Int Int) Int) +(declare-fun OwnedResults.y () Int) +(declare-fun OwnedResults.Static2_ () Int) +(declare-fun IsValueType_ (Int) Int) +(declare-fun AsRangeField (Int Int) Int) +(declare-fun AdditiveMethods.amPeer () Int) +(declare-fun System.SByte () Int) +(declare-fun BeingConstructed_ () Int) +(declare-fun FieldDependsOnFCO_ (Int Int Int) Int) +(declare-fun NonNullRefArray (Int Int) Int) +(declare-fun RefArray (Int Int) Int) +(declare-fun ArrayCategory_ (Int) Int) +(declare-fun return.value_0 () Int) +(declare-fun AsPureObject_ (Int) Int) +(declare-fun System.String.Equals_System.String_ (Int Int) Int) +(declare-fun System.Int16 () Int) +(declare-fun AsMutable_ (Int) Int) +(declare-fun OwnedResults.Pw_.1 (Int) Int) +(declare-fun System.Char () Int) +(declare-fun System.UInt64 () Int) +(declare-fun StructGet_ (Int Int) Int) +(declare-fun OneClassDown (Int Int) Int) +(declare-fun ArrayIndex (Int Int Int Int) Int) +(declare-fun Box (Int Int) Int) +(declare-fun int_18446744073709551615 () Int) +(declare-fun shr_ (Int Int) Int) +(declare-fun OwnedResults.Pz_.1 (Int) Int) +(declare-fun IsDirectlyModifiableField (Int) Int) +(declare-fun StringLength_ (Int) Int) +(declare-fun allocated_ () Int) +(declare-fun block8806_correct () Int) +(declare-fun BaseClass_ (Int) Int) +(declare-fun ValueArray (Int Int) Int) +(declare-fun Smt.false () Int) +(declare-fun IsImmutable_ (Int) Int) +(declare-fun elements_ () Int) +(declare-fun DeclType (Int) Int) +(declare-fun ReallyLastGeneratedExit_correct () Int) +(assert (distinct allocated_ elements_ inv_ localinv_ exposeVersion_ sharingMode_ SharingMode_Unshared_ SharingMode_LockProtected_ ownerRef_ ownerFrame_ PeerGroupPlaceholder_ ArrayCategoryValue_ ArrayCategoryRef_ ArrayCategoryNonNullRef_ System.Array System.Object System.Type BeingConstructed_ NonNullFieldsAreInitialized_ System.String FirstConsistentOwner_ System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64 System.Char int_m2147483648 int_2147483647 int_4294967295 int_m9223372036854775808 int_9223372036854775807 int_18446744073709551615 UnknownRef_ OwnedResults.x AdditiveMethods.amPeer AdditiveMethods.amRep OwnedResults.y OwnedResults System.Runtime.InteropServices._Type System.Runtime.InteropServices._MemberInfo System.Reflection.IReflect Sub System.Reflection.ICustomAttributeProvider System.Boolean AdditiveMethods T System.Reflection.MemberInfo)) +(assert (= (DeclType exposeVersion_) System.Object)) +(assert (forall ((?c0 Int) (?c1 Int)) (! (=> (not (= ?c0 ?c1)) (not (= (ClassRepr ?c0) (ClassRepr ?c1)))) :pattern ((ClassRepr ?c0) (ClassRepr ?c1)) ))) +(assert (forall ((?T Int)) (not (subtypes (typeof_ (ClassRepr ?T)) System.Object)))) +(assert (forall ((?T Int)) (not (= (ClassRepr ?T) nullObject)))) +(assert (forall ((?T Int) (?h Int)) (! (=> (= (IsHeap ?h) Smt.true) (= (select2 ?h (ClassRepr ?T) ownerFrame_) PeerGroupPlaceholder_)) :pattern ((select2 ?h (ClassRepr ?T) ownerFrame_)) ))) +(assert (not (= (IsDirectlyModifiableField allocated_) Smt.true))) +(assert (= (IsDirectlyModifiableField elements_) Smt.true)) +(assert (not (= (IsDirectlyModifiableField inv_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField localinv_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField ownerRef_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField ownerFrame_) Smt.true))) +(assert (not (= (IsDirectlyModifiableField exposeVersion_) Smt.true))) +(assert (not (= (IsStaticField allocated_) Smt.true))) +(assert (not (= (IsStaticField elements_) Smt.true))) +(assert (not (= (IsStaticField inv_) Smt.true))) +(assert (not (= (IsStaticField localinv_) Smt.true))) +(assert (not (= (IsStaticField exposeVersion_) Smt.true))) +(assert (forall ((?A Int) (?i Int) (?x Int)) (= (ValueArrayGet (ValueArraySet ?A ?i ?x) ?i) ?x))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (ValueArrayGet (ValueArraySet ?A ?i ?x) ?j) (ValueArrayGet ?A ?j))))) +(assert (forall ((?A Int) (?i Int) (?x Int)) (= (RefArrayGet (RefArraySet ?A ?i ?x) ?i) ?x))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (RefArrayGet (RefArraySet ?A ?i ?x) ?j) (RefArrayGet ?A ?j))))) +(assert (forall ((?a Int) (?d Int) (?x Int) (?y Int) (|?x'| Int) (|?y'| Int)) (! (=> (= (ArrayIndex ?a ?d ?x ?y) (ArrayIndex ?a ?d |?x'| |?y'|)) (and (= ?x |?x'|) (= ?y |?y'|))) :pattern ((ArrayIndex ?a ?d ?x ?y) (ArrayIndex ?a ?d |?x'| |?y'|)) ))) +(assert (forall ((?a Int) (?T Int) (?i Int) (?r Int) (?heap Int)) (! (=> (and (= (IsHeap ?heap) Smt.true) (subtypes (typeof_ ?a) (RefArray ?T ?r))) (= (Is_ (RefArrayGet (select2 ?heap ?a elements_) ?i) ?T) Smt.true)) :pattern ((subtypes (typeof_ ?a) (RefArray ?T ?r)) (RefArrayGet (select2 ?heap ?a elements_) ?i)) ))) +(assert (forall ((?a Int) (?T Int) (?i Int) (?r Int) (?heap Int)) (! (=> (and (= (IsHeap ?heap) Smt.true) (subtypes (typeof_ ?a) (NonNullRefArray ?T ?r))) (= (IsNotNull_ (RefArrayGet (select2 ?heap ?a elements_) ?i) ?T) Smt.true)) :pattern ((subtypes (typeof_ ?a) (NonNullRefArray ?T ?r)) (RefArrayGet (select2 ?heap ?a elements_) ?i)) ))) +(assert (forall ((?a Int)) (<= 1 (Rank_ ?a)))) +(assert (forall ((?a Int) (?T Int) (?r Int)) (! (=> (and (not (= ?a nullObject)) (subtypes (typeof_ ?a) (RefArray ?T ?r))) (= (Rank_ ?a) ?r)) :pattern ((subtypes (typeof_ ?a) (RefArray ?T ?r))) ))) +(assert (forall ((?a Int) (?T Int) (?r Int)) (! (=> (and (not (= ?a nullObject)) (subtypes (typeof_ ?a) (NonNullRefArray ?T ?r))) (= (Rank_ ?a) ?r)) :pattern ((subtypes (typeof_ ?a) (NonNullRefArray ?T ?r))) ))) +(assert (forall ((?a Int) (?T Int) (?r Int)) (! (=> (and (not (= ?a nullObject)) (subtypes (typeof_ ?a) (ValueArray ?T ?r))) (= (Rank_ ?a) ?r)) :pattern ((subtypes (typeof_ ?a) (ValueArray ?T ?r))) ))) +(assert (forall ((?a Int)) (! (<= 0 (Length_ ?a)) :pattern ((Length_ ?a)) ))) +(assert (forall ((?a Int) (?i Int)) (<= 0 (DimLength_ ?a ?i)))) +(assert (forall ((?a Int)) (! (=> (= (Rank_ ?a) 1) (= (DimLength_ ?a 0) (Length_ ?a))) :pattern ((DimLength_ ?a 0)) ))) +(assert (forall ((?a Int) (?i Int)) (! (= (LBound_ ?a ?i) 0) :pattern ((LBound_ ?a ?i)) ))) +(assert (forall ((?a Int) (?i Int)) (! (= (UBound_ ?a ?i) (- (DimLength_ ?a ?i) 1)) :pattern ((UBound_ ?a ?i)) ))) +(assert (forall ((?T Int) (?ET Int) (?r Int)) (! (=> (subtypes ?T (ValueArray ?ET ?r)) (= (ArrayCategory_ ?T) ArrayCategoryValue_)) :pattern ((subtypes ?T (ValueArray ?ET ?r))) ))) +(assert (forall ((?T Int) (?ET Int) (?r Int)) (! (=> (subtypes ?T (RefArray ?ET ?r)) (= (ArrayCategory_ ?T) ArrayCategoryRef_)) :pattern ((subtypes ?T (RefArray ?ET ?r))) ))) +(assert (forall ((?T Int) (?ET Int) (?r Int)) (! (=> (subtypes ?T (NonNullRefArray ?ET ?r)) (= (ArrayCategory_ ?T) ArrayCategoryNonNullRef_)) :pattern ((subtypes ?T (NonNullRefArray ?ET ?r))) ))) +(assert (subtypes System.Array System.Object)) +(assert (forall ((?T Int) (?r Int)) (! (subtypes (ValueArray ?T ?r) System.Array) :pattern ((ValueArray ?T ?r)) ))) +(assert (forall ((?T Int) (?r Int)) (! (subtypes (RefArray ?T ?r) System.Array) :pattern ((RefArray ?T ?r)) ))) +(assert (forall ((?T Int) (?r Int)) (! (subtypes (NonNullRefArray ?T ?r) System.Array) :pattern ((NonNullRefArray ?T ?r)) ))) +(assert (forall ((?T Int) (?U Int) (?r Int)) (=> (subtypes ?U ?T) (subtypes (RefArray ?U ?r) (RefArray ?T ?r))))) +(assert (forall ((?T Int) (?U Int) (?r Int)) (=> (subtypes ?U ?T) (subtypes (NonNullRefArray ?U ?r) (NonNullRefArray ?T ?r))))) +(assert (forall ((?A Int) (?r Int)) (= (ElementType_ (ValueArray ?A ?r)) ?A))) +(assert (forall ((?A Int) (?r Int)) (= (ElementType_ (RefArray ?A ?r)) ?A))) +(assert (forall ((?A Int) (?r Int)) (= (ElementType_ (NonNullRefArray ?A ?r)) ?A))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (! (let ((?v_0 (ElementType_ ?T))) (=> (subtypes ?T (RefArray ?A ?r)) (and (= ?T (RefArray ?v_0 ?r)) (subtypes ?v_0 ?A)))) :pattern ((subtypes ?T (RefArray ?A ?r))) ))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (! (let ((?v_0 (ElementType_ ?T))) (=> (subtypes ?T (NonNullRefArray ?A ?r)) (and (= ?T (NonNullRefArray ?v_0 ?r)) (subtypes ?v_0 ?A)))) :pattern ((subtypes ?T (NonNullRefArray ?A ?r))) ))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ValueArray ?A ?r))) (=> (subtypes ?T ?v_0) (= ?T ?v_0))))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ElementType_ ?T))) (=> (subtypes (RefArray ?A ?r) ?T) (or (subtypes System.Array ?T) (and (= ?T (RefArray ?v_0 ?r)) (subtypes ?A ?v_0))))))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ElementType_ ?T))) (=> (subtypes (NonNullRefArray ?A ?r) ?T) (or (subtypes System.Array ?T) (and (= ?T (NonNullRefArray ?v_0 ?r)) (subtypes ?A ?v_0))))))) +(assert (forall ((?A Int) (?r Int) (?T Int)) (let ((?v_0 (ValueArray ?A ?r))) (=> (subtypes ?v_0 ?T) (or (subtypes System.Array ?T) (= ?T ?v_0)))))) +(assert (forall ((?s Int) (?f Int) (?x Int)) (= (StructGet_ (StructSet_ ?s ?f ?x) ?f) ?x))) +(assert (forall ((?s Int) (?f Int) (|?f'| Int) (?x Int)) (=> (not (= ?f |?f'|)) (= (StructGet_ (StructSet_ ?s ?f ?x) |?f'|) (StructGet_ ?s |?f'|))))) +(assert (forall ((?A Int) (?B Int) (?C Int)) (! (=> (subtypes ?C (AsDirectSubClass ?B ?A)) (= (OneClassDown ?C ?A) ?B)) :pattern ((subtypes ?C (AsDirectSubClass ?B ?A))) ))) +(assert (forall ((?T Int)) (=> (= (IsValueType_ ?T) Smt.true) (and (forall ((?U Int)) (=> (subtypes ?T ?U) (= ?T ?U))) (forall ((?U Int)) (=> (subtypes ?U ?T) (= ?T ?U))))))) +(assert (subtypes System.Type System.Object)) +(assert (forall ((?T Int)) (! (= (IsNotNull_ (TypeObject ?T) System.Type) Smt.true) :pattern ((TypeObject ?T)) ))) +(assert (forall ((?T Int)) (! (= (TypeName (TypeObject ?T)) ?T) :pattern ((TypeObject ?T)) ))) +(assert (forall ((?o Int) (?T Int)) (! (= (= (Is_ ?o ?T) Smt.true) (or (= ?o nullObject) (subtypes (typeof_ ?o) ?T))) :pattern ((Is_ ?o ?T)) ))) +(assert (forall ((?o Int) (?T Int)) (! (= (= (IsNotNull_ ?o ?T) Smt.true) (and (not (= ?o nullObject)) (= (Is_ ?o ?T) Smt.true))) :pattern ((IsNotNull_ ?o ?T)) ))) +(assert (forall ((?o Int) (?T Int)) (=> (= (Is_ ?o ?T) Smt.true) (= (As_ ?o ?T) ?o)))) +(assert (forall ((?o Int) (?T Int)) (=> (not (= (Is_ ?o ?T) Smt.true)) (= (As_ ?o ?T) nullObject)))) +(assert (forall ((?h Int) (?o Int)) (! (let ((?v_0 (typeof_ ?o))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (subtypes ?v_0 System.Array)) (and (= (select2 ?h ?o inv_) ?v_0) (= (select2 ?h ?o localinv_) ?v_0)))) :pattern ((select2 ?h ?o inv_)) ))) +(assert (forall ((?h Int) (?o Int) (?f Int)) (! (=> (and (= (IsHeap ?h) Smt.true) (= (select2 ?h ?o allocated_) Smt.true)) (= (IsAllocated ?h (select2 ?h ?o ?f)) Smt.true)) :pattern ((IsAllocated ?h (select2 ?h ?o ?f))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int)) (! (=> (and (= (IsHeap ?h) Smt.true) (= (select2 ?h ?o allocated_) Smt.true)) (= (select2 ?h (select2 ?h ?o ?f) allocated_) Smt.true)) :pattern ((select2 ?h (select2 ?h ?o ?f) allocated_)) ))) +(assert (forall ((?h Int) (?s Int) (?f Int)) (! (=> (= (IsAllocated ?h ?s) Smt.true) (= (IsAllocated ?h (StructGet_ ?s ?f)) Smt.true)) :pattern ((IsAllocated ?h (StructGet_ ?s ?f))) ))) +(assert (forall ((?h Int) (?e Int) (?i Int)) (! (=> (= (IsAllocated ?h ?e) Smt.true) (= (IsAllocated ?h (RefArrayGet ?e ?i)) Smt.true)) :pattern ((IsAllocated ?h (RefArrayGet ?e ?i))) ))) +(assert (forall ((?h Int) (?e Int) (?i Int)) (! (=> (= (IsAllocated ?h ?e) Smt.true) (= (IsAllocated ?h (ValueArrayGet ?e ?i)) Smt.true)) :pattern ((IsAllocated ?h (ValueArrayGet ?e ?i))) ))) +(assert (forall ((?h Int) (?o Int)) (! (=> (= (IsAllocated ?h ?o) Smt.true) (= (select2 ?h ?o allocated_) Smt.true)) :pattern ((select2 ?h ?o allocated_)) ))) +(assert (forall ((?h Int) (?c Int)) (! (=> (= (IsHeap ?h) Smt.true) (= (select2 ?h (ClassRepr ?c) allocated_) Smt.true)) :pattern ((select2 ?h (ClassRepr ?c) allocated_)) ))) +(assert (forall ((?f Int) (?T Int)) (! (=> (= (AsNonNullRefField ?f ?T) ?f) (= (AsRefField ?f ?T) ?f)) :pattern ((AsNonNullRefField ?f ?T)) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (=> (= (IsHeap ?h) Smt.true) (= (Is_ (select2 ?h ?o (AsRefField ?f ?T)) ?T) Smt.true)) :pattern ((select2 ?h ?o (AsRefField ?f ?T))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (or (not (= ?o BeingConstructed_)) (= (= (select2 ?h BeingConstructed_ NonNullFieldsAreInitialized_) Smt.true) true))) (not (= (select2 ?h ?o (AsNonNullRefField ?f ?T)) nullObject))) :pattern ((select2 ?h ?o (AsNonNullRefField ?f ?T))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (=> (= (IsHeap ?h) Smt.true) (InRange (select2 ?h ?o (AsRangeField ?f ?T)) ?T)) :pattern ((select2 ?h ?o (AsRangeField ?f ?T))) ))) +(assert (forall ((?o Int)) (! (not (= (IsMemberlessType_ (typeof_ ?o)) Smt.true)) :pattern ((IsMemberlessType_ (typeof_ ?o))) ))) +(assert (not (= (IsImmutable_ System.Object) Smt.true))) +(assert (forall ((?T Int) (?U Int)) (! (=> (subtypes ?U (AsImmutable_ ?T)) (and (= (IsImmutable_ ?U) Smt.true) (= (AsImmutable_ ?U) ?U))) :pattern ((subtypes ?U (AsImmutable_ ?T))) ))) +(assert (forall ((?T Int) (?U Int)) (! (=> (subtypes ?U (AsMutable_ ?T)) (and (not (= (IsImmutable_ ?U) Smt.true)) (= (AsMutable_ ?U) ?U))) :pattern ((subtypes ?U (AsMutable_ ?T))) ))) +(assert (forall ((?o Int) (?T Int)) (! (=> (and (not (= ?o nullObject)) (not (= ?o BeingConstructed_)) (subtypes (typeof_ ?o) (AsImmutable_ ?T))) (forall ((?h Int)) (! (let ((?v_0 (typeof_ ?o))) (=> (= (IsHeap ?h) Smt.true) (and (= (select2 ?h ?o inv_) ?v_0) (= (select2 ?h ?o localinv_) ?v_0) (= (select2 ?h ?o ownerFrame_) PeerGroupPlaceholder_) (= (AsOwner ?o (select2 ?h ?o ownerRef_)) ?o) (forall ((?t Int)) (! (=> (= (AsOwner ?o (select2 ?h ?t ownerRef_)) ?o) (or (= ?t ?o) (not (= (select2 ?h ?t ownerFrame_) PeerGroupPlaceholder_)))) :pattern ((AsOwner ?o (select2 ?h ?t ownerRef_))) ))))) :pattern ((IsHeap ?h)) ))) :pattern ((subtypes (typeof_ ?o) (AsImmutable_ ?T))) ))) +(assert (forall ((?s Int)) (! (<= 0 (StringLength_ ?s)) :pattern ((StringLength_ ?s)) ))) +(assert (forall ((?h Int) (?o Int) (?f Int) (?T Int)) (! (let ((?v_0 (select2 ?h ?o (AsRepField ?f ?T)))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?v_0 nullObject))) (and (= (select2 ?h ?v_0 ownerRef_) ?o) (= (select2 ?h ?v_0 ownerFrame_) ?T)))) :pattern ((select2 ?h ?o (AsRepField ?f ?T))) ))) +(assert (forall ((?h Int) (?o Int) (?f Int)) (! (let ((?v_0 (select2 ?h ?o (AsPeerField ?f)))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?v_0 nullObject))) (and (= (select2 ?h ?v_0 ownerRef_) (select2 ?h ?o ownerRef_)) (= (select2 ?h ?v_0 ownerFrame_) (select2 ?h ?o ownerFrame_))))) :pattern ((select2 ?h ?o (AsPeerField ?f))) ))) +(assert (forall ((?h Int) (?o Int)) (let ((?v_0 (select2 ?h ?o ownerFrame_)) (?v_1 (select2 ?h ?o ownerRef_)) (?v_2 (typeof_ ?o))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?v_0 PeerGroupPlaceholder_)) (subtypes (select2 ?h ?v_1 inv_) ?v_0) (not (= (select2 ?h ?v_1 localinv_) (BaseClass_ ?v_0)))) (and (= (select2 ?h ?o inv_) ?v_2) (= (select2 ?h ?o localinv_) ?v_2)))))) +(assert (forall ((?o Int) (?f Int) (?h Int)) (! (let ((?v_0 (select2 ?h ?o ownerFrame_)) (?v_1 (select2 ?h ?o ownerRef_))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (= (= (select2 ?h ?o allocated_) Smt.true) true) (not (= ?v_0 PeerGroupPlaceholder_)) (subtypes (select2 ?h ?v_1 inv_) ?v_0) (not (= (select2 ?h ?v_1 localinv_) (BaseClass_ ?v_0)))) (= (select2 ?h ?o ?f) (FieldDependsOnFCO_ ?o ?f (select2 ?h (select2 ?h ?o FirstConsistentOwner_) exposeVersion_))))) :pattern ((select2 ?h (AsPureObject_ ?o) ?f)) ))) +(assert (forall ((?o Int) (?h Int)) (! (let ((?v_0 (select2 ?h ?o ownerFrame_)) (?v_1 (select2 ?h ?o ownerRef_)) (?v_2 (select2 ?h ?o FirstConsistentOwner_))) (let ((?v_3 (select2 ?h ?v_2 ownerFrame_)) (?v_4 (select2 ?h ?v_2 ownerRef_))) (=> (and (= (IsHeap ?h) Smt.true) (not (= ?o nullObject)) (= (= (select2 ?h ?o allocated_) Smt.true) true) (not (= ?v_0 PeerGroupPlaceholder_)) (subtypes (select2 ?h ?v_1 inv_) ?v_0) (not (= (select2 ?h ?v_1 localinv_) (BaseClass_ ?v_0)))) (and (not (= ?v_2 nullObject)) (= (= (select2 ?h ?v_2 allocated_) Smt.true) true) (or (= ?v_3 PeerGroupPlaceholder_) (not (subtypes (select2 ?h ?v_4 inv_) ?v_3)) (= (select2 ?h ?v_4 localinv_) (BaseClass_ ?v_3))))))) :pattern ((select2 ?h ?o FirstConsistentOwner_)) ))) +(assert (forall ((?x Int) (?p Int)) (! (= (Unbox (Box ?x ?p)) ?x) :pattern ((Unbox (Box ?x ?p))) ))) +(assert (forall ((?p Int)) (! (=> (= (IsValueType_ (UnboxedType ?p)) Smt.true) (forall ((?heap Int) (?x Int)) (let ((?v_0 (Box ?x ?p))) (let ((?v_1 (typeof_ ?v_0))) (=> (= (IsHeap ?heap) Smt.true) (and (= (select2 ?heap ?v_0 inv_) ?v_1) (= (select2 ?heap ?v_0 localinv_) ?v_1))))))) :pattern ((IsValueType_ (UnboxedType ?p))) ))) +(assert (forall ((?x Int) (?p Int)) (let ((?v_0 (Box ?x ?p))) (=> (and (subtypes (UnboxedType ?v_0) System.Object) (= ?v_0 ?p)) (= ?x ?p))))) +(assert (forall ((?p Int) (?typ Int)) (! (= (= (UnboxedType ?p) ?typ) (not (= (BoxTester ?p ?typ) nullObject))) :pattern ((BoxTester ?p ?typ)) ))) +(assert (= (IsValueType_ System.SByte) Smt.true)) +(assert (= (IsValueType_ System.Byte) Smt.true)) +(assert (= (IsValueType_ System.Int16) Smt.true)) +(assert (= (IsValueType_ System.UInt16) Smt.true)) +(assert (= (IsValueType_ System.Int32) Smt.true)) +(assert (= (IsValueType_ System.UInt32) Smt.true)) +(assert (= (IsValueType_ System.Int64) Smt.true)) +(assert (= (IsValueType_ System.UInt64) Smt.true)) +(assert (= (IsValueType_ System.Char) Smt.true)) +(assert (< int_m9223372036854775808 int_m2147483648)) +(assert (< int_m2147483648 (- 0 100000))) +(assert (< 100000 int_2147483647)) +(assert (< int_2147483647 int_4294967295)) +(assert (< int_4294967295 int_9223372036854775807)) +(assert (< int_9223372036854775807 int_18446744073709551615)) +(assert (forall ((?i Int)) (= (InRange ?i System.SByte) (and (<= (- 0 128) ?i) (< ?i 128))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Byte) (and (<= 0 ?i) (< ?i 256))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Int16) (and (<= (- 0 32768) ?i) (< ?i 32768))))) +(assert (forall ((?i Int)) (= (InRange ?i System.UInt16) (and (<= 0 ?i) (< ?i 65536))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Int32) (and (<= int_m2147483648 ?i) (<= ?i int_2147483647))))) +(assert (forall ((?i Int)) (= (InRange ?i System.UInt32) (and (<= 0 ?i) (<= ?i int_4294967295))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Int64) (and (<= int_m9223372036854775808 ?i) (<= ?i int_9223372036854775807))))) +(assert (forall ((?i Int)) (= (InRange ?i System.UInt64) (and (<= 0 ?i) (<= ?i int_18446744073709551615))))) +(assert (forall ((?i Int)) (= (InRange ?i System.Char) (and (<= 0 ?i) (< ?i 65536))))) +(assert (forall ((?b Int) (?x Int) (?y Int)) (! (=> (= ?b Smt.true) (= (IfThenElse_ ?b ?x ?y) ?x)) :pattern ((IfThenElse_ ?b ?x ?y)) ))) +(assert (forall ((?b Int) (?x Int) (?y Int)) (! (=> (not (= ?b Smt.true)) (= (IfThenElse_ ?b ?x ?y) ?y)) :pattern ((IfThenElse_ ?b ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (modulo ?x ?y) (- ?x (multiply (divide ?x ?y) ?y))) :pattern ((modulo ?x ?y)) :pattern ((divide ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= 0 ?x) (< 0 ?y)) (and (<= 0 ?v_0) (< ?v_0 ?y)))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= 0 ?x) (< ?y 0)) (and (<= 0 ?v_0) (< ?v_0 (- 0 ?y))))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= ?x 0) (< 0 ?y)) (and (< (- 0 ?y) ?v_0) (<= ?v_0 0)))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (modulo ?x ?y))) (=> (and (<= ?x 0) (< ?y 0)) (and (< ?y ?v_0) (<= ?v_0 0)))) :pattern ((modulo ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (= (modulo (+ ?x ?y) ?y) (modulo ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (= (modulo (+ ?y ?x) ?y) (modulo ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (- ?x ?y))) (=> (and (<= 0 ?v_0) (<= 0 ?y)) (= (modulo ?v_0 ?y) (modulo ?x ?y)))))) +(assert (forall ((?a Int) (?b Int) (?d Int)) (! (=> (and (<= 2 ?d) (= (modulo ?a ?d) (modulo ?b ?d)) (< ?a ?b)) (<= (+ ?a ?d) ?b)) :pattern ((modulo ?a ?d) (modulo ?b ?d)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (and_ ?x ?y))) :pattern ((and_ ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (or_ ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= 0 ?v_0) (<= ?v_0 (+ ?x ?y))))) :pattern ((or_ ?x ?y)) ))) +(assert (forall ((?i Int)) (! (= (shl_ ?i 0) ?i) :pattern ((shl_ ?i 0)) ))) +(assert (forall ((?i Int) (?j Int)) (=> (<= 0 ?j) (= (shl_ ?i (+ ?j 1)) (* (shl_ ?i ?j) 2))))) +(assert (forall ((?i Int)) (! (= (shr_ ?i 0) ?i) :pattern ((shr_ ?i 0)) ))) +(assert (forall ((?i Int) (?j Int)) (=> (<= 0 ?j) (= (shr_ ?i (+ ?j 1)) (divide (shr_ ?i ?j) 2))))) +(assert (forall ((?a Int) (?b Int)) (! (= (= (System.String.Equals_System.String_ ?a ?b) Smt.true) (= (System.String.Equals_System.String_System.String_ ?a ?b) Smt.true)) :pattern ((System.String.Equals_System.String_ ?a ?b)) ))) +(assert (forall ((?a Int) (?b Int)) (! (= (= (System.String.Equals_System.String_System.String_ ?a ?b) Smt.true) (= (System.String.Equals_System.String_System.String_ ?b ?a) Smt.true)) :pattern ((System.String.Equals_System.String_System.String_ ?a ?b)) ))) +(assert (forall ((?a Int) (?b Int)) (! (=> (and (not (= ?a nullObject)) (not (= ?b nullObject)) (= (System.String.Equals_System.String_System.String_ ?a ?b) Smt.true)) (= (System.String.IsInterned_System.String_notnull_ ?a) (System.String.IsInterned_System.String_notnull_ ?b))) :pattern ((System.String.Equals_System.String_System.String_ ?a ?b)) ))) +(assert (not (= (IsStaticField AdditiveMethods.amPeer) Smt.true))) +(assert (= (IsDirectlyModifiableField AdditiveMethods.amPeer) Smt.true)) +(assert (= (AsPeerField AdditiveMethods.amPeer) AdditiveMethods.amPeer)) +(assert (= (DeclType AdditiveMethods.amPeer) AdditiveMethods)) +(assert (= (AsRefField AdditiveMethods.amPeer AdditiveMethods) AdditiveMethods.amPeer)) +(assert (not (= (IsStaticField AdditiveMethods.amRep) Smt.true))) +(assert (= (IsDirectlyModifiableField AdditiveMethods.amRep) Smt.true)) +(assert (= (AsRepField AdditiveMethods.amRep AdditiveMethods) AdditiveMethods.amRep)) +(assert (= (DeclType AdditiveMethods.amRep) AdditiveMethods)) +(assert (= (AsRefField AdditiveMethods.amRep AdditiveMethods) AdditiveMethods.amRep)) +(assert (not (= (IsStaticField OwnedResults.x) Smt.true))) +(assert (= (IsDirectlyModifiableField OwnedResults.x) Smt.true)) +(assert (= (AsRepField OwnedResults.x OwnedResults) OwnedResults.x)) +(assert (= (DeclType OwnedResults.x) OwnedResults)) +(assert (= (AsRefField OwnedResults.x T) OwnedResults.x)) +(assert (not (= (IsStaticField OwnedResults.y) Smt.true))) +(assert (= (IsDirectlyModifiableField OwnedResults.y) Smt.true)) +(assert (= (AsPeerField OwnedResults.y) OwnedResults.y)) +(assert (= (DeclType OwnedResults.y) OwnedResults)) +(assert (= (AsRefField OwnedResults.y T) OwnedResults.y)) +(assert (subtypes AdditiveMethods AdditiveMethods)) +(assert (= (BaseClass_ AdditiveMethods) System.Object)) +(assert (subtypes AdditiveMethods (BaseClass_ AdditiveMethods))) +(assert (= (AsDirectSubClass AdditiveMethods (BaseClass_ AdditiveMethods)) AdditiveMethods)) +(assert (not (= (IsImmutable_ AdditiveMethods) Smt.true))) +(assert (= (AsMutable_ AdditiveMethods) AdditiveMethods)) +(assert (subtypes System.Type System.Type)) +(assert (subtypes System.Reflection.MemberInfo System.Reflection.MemberInfo)) +(assert (= (BaseClass_ System.Reflection.MemberInfo) System.Object)) +(assert (subtypes System.Reflection.MemberInfo (BaseClass_ System.Reflection.MemberInfo))) +(assert (= (AsDirectSubClass System.Reflection.MemberInfo (BaseClass_ System.Reflection.MemberInfo)) System.Reflection.MemberInfo)) +(assert (= (IsImmutable_ System.Reflection.MemberInfo) Smt.true)) +(assert (= (AsImmutable_ System.Reflection.MemberInfo) System.Reflection.MemberInfo)) +(assert (subtypes System.Reflection.ICustomAttributeProvider System.Object)) +(assert (= (IsMemberlessType_ System.Reflection.ICustomAttributeProvider) Smt.true)) +(assert (subtypes System.Reflection.MemberInfo System.Reflection.ICustomAttributeProvider)) +(assert (subtypes System.Runtime.InteropServices._MemberInfo System.Object)) +(assert (= (IsMemberlessType_ System.Runtime.InteropServices._MemberInfo) Smt.true)) +(assert (subtypes System.Reflection.MemberInfo System.Runtime.InteropServices._MemberInfo)) +(assert (= (IsMemberlessType_ System.Reflection.MemberInfo) Smt.true)) +(assert (= (BaseClass_ System.Type) System.Reflection.MemberInfo)) +(assert (subtypes System.Type (BaseClass_ System.Type))) +(assert (= (AsDirectSubClass System.Type (BaseClass_ System.Type)) System.Type)) +(assert (= (IsImmutable_ System.Type) Smt.true)) +(assert (= (AsImmutable_ System.Type) System.Type)) +(assert (subtypes System.Runtime.InteropServices._Type System.Object)) +(assert (= (IsMemberlessType_ System.Runtime.InteropServices._Type) Smt.true)) +(assert (subtypes System.Type System.Runtime.InteropServices._Type)) +(assert (subtypes System.Reflection.IReflect System.Object)) +(assert (= (IsMemberlessType_ System.Reflection.IReflect) Smt.true)) +(assert (subtypes System.Type System.Reflection.IReflect)) +(assert (= (IsMemberlessType_ System.Type) Smt.true)) +(assert (subtypes Sub Sub)) +(assert (= (BaseClass_ Sub) AdditiveMethods)) +(assert (subtypes Sub (BaseClass_ Sub))) +(assert (= (AsDirectSubClass Sub (BaseClass_ Sub)) Sub)) +(assert (not (= (IsImmutable_ Sub) Smt.true))) +(assert (= (AsMutable_ Sub) Sub)) +(assert (subtypes OwnedResults OwnedResults)) +(assert (= (BaseClass_ OwnedResults) System.Object)) +(assert (subtypes OwnedResults (BaseClass_ OwnedResults))) +(assert (= (AsDirectSubClass OwnedResults (BaseClass_ OwnedResults)) OwnedResults)) +(assert (not (= (IsImmutable_ OwnedResults) Smt.true))) +(assert (= (AsMutable_ OwnedResults) OwnedResults)) +(assert (subtypes T T)) +(assert (= (BaseClass_ T) System.Object)) +(assert (subtypes T (BaseClass_ T))) +(assert (= (AsDirectSubClass T (BaseClass_ T)) T)) +(assert (not (= (IsImmutable_ T) Smt.true))) +(assert (= (AsMutable_ T) T)) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (OwnedResults.Mz_ ?Heap_ ?this))) (=> (and (= (IsHeap ?Heap_) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2)))))) (= ?v_0 (select2 ?Heap_ ?this OwnedResults.x))))) :pattern ((OwnedResults.Mz_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (OwnedResults.Pz_ ?Heap_ ?this))) (=> (and (= (IsHeap ?Heap_) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2)))))) (= ?v_0 (select2 ?Heap_ ?this OwnedResults.x))))) :pattern ((OwnedResults.Pz_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (typeof_ ?this))) (=> (and (not (= ?this nullObject)) (subtypes ?v_0 OwnedResults) (= (select2 ?Heap_ ?this inv_) ?v_0) (= (select2 ?Heap_ ?this localinv_) ?v_0) (= (IsHeap ?Heap_) Smt.true) (= (= (select2 ?Heap_ ?this allocated_) Smt.true) true)) (= (OwnedResults.Pz_ ?Heap_ ?this) (OwnedResults.Pz_.1 (select2 ?Heap_ ?this exposeVersion_))))) :pattern ((OwnedResults.Pz_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (OwnedResults.Pw_ ?Heap_ ?this))) (=> (and (= (IsHeap ?Heap_) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2)))))) (= ?v_0 (select2 ?Heap_ ?this OwnedResults.y))))) :pattern ((OwnedResults.Pw_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int)) (! (let ((?v_0 (typeof_ ?this))) (=> (and (not (= ?this nullObject)) (subtypes ?v_0 OwnedResults) (= (select2 ?Heap_ ?this inv_) ?v_0) (= (select2 ?Heap_ ?this localinv_) ?v_0) (= (IsHeap ?Heap_) Smt.true) (= (= (select2 ?Heap_ ?this allocated_) Smt.true) true)) (= (OwnedResults.Pw_ ?Heap_ ?this) (OwnedResults.Pw_.1 (select2 ?Heap_ ?this exposeVersion_))))) :pattern ((OwnedResults.Pw_ ?Heap_ ?this)) ))) +(assert (forall ((?Heap_ Int) (?this Int) (?k_in Int)) (! (let ((?v_0 (OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in))) (=> (and (= (IsHeap ?Heap_) Smt.true) (InRange ?k_in System.Int32) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?this ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?this ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (Is_ ?v_0 T) Smt.true) (or (= ?v_0 nullObject) (forall ((?pc_ Int)) (let ((?v_2 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_2) (= (select2 ?Heap_ ?pc_ localinv_) ?v_2))))))))) :pattern ((OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in)) ))) +(assert (forall ((?Heap_ Int) (?this Int) (?k_in Int)) (! (let ((?v_0 (typeof_ ?this))) (=> (and (not (= ?this nullObject)) (subtypes ?v_0 OwnedResults) (= (select2 ?Heap_ ?this inv_) ?v_0) (= (select2 ?Heap_ ?this localinv_) ?v_0) (= (IsHeap ?Heap_) Smt.true) (= (= (select2 ?Heap_ ?this allocated_) Smt.true) true)) (= (OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in) (OwnedResults.Qz_System.Int32_.1 (select2 ?Heap_ ?this exposeVersion_) ?k_in)))) :pattern ((OwnedResults.Qz_System.Int32_ ?Heap_ ?this ?k_in)) ))) +(assert (forall ((?U_ Int)) (! (=> (subtypes ?U_ System.Boolean) (= ?U_ System.Boolean)) :pattern ((subtypes ?U_ System.Boolean)) ))) +(assert (forall ((?Heap_ Int)) (! (let ((?v_0 (OwnedResults.Static0_ ?Heap_))) (=> (= (IsHeap ?Heap_) Smt.true) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (IsNotNull_ ?v_0 T) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))))) :pattern ((OwnedResults.Static0_ ?Heap_)) ))) +(assert (forall ((?Heap_ Int)) (! (let ((?v_0 (OwnedResults.Static1_ ?Heap_))) (=> (= (IsHeap ?Heap_) Smt.true) (and (= (= (select2 ?Heap_ ?v_0 allocated_) Smt.true) true) (= (IsNotNull_ ?v_0 T) Smt.true) (forall ((?pc_ Int)) (let ((?v_1 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 ?Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 ?Heap_ ?pc_ ownerRef_) (select2 ?Heap_ ?v_0 ownerRef_)) (= (select2 ?Heap_ ?pc_ ownerFrame_) (select2 ?Heap_ ?v_0 ownerFrame_))) (and (= (select2 ?Heap_ ?pc_ inv_) ?v_1) (= (select2 ?Heap_ ?pc_ localinv_) ?v_1)))))))) :pattern ((OwnedResults.Static1_ ?Heap_)) ))) +(assert (=> true (= (IsNotNull_ OwnedResults.Static2_ T) Smt.true))) +(assert (forall ((?A Int) (?i Int) (?v Int)) (= (select1 (store1 ?A ?i ?v) ?i) ?v))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?v Int)) (=> (not (= ?i ?j)) (= (select1 (store1 ?A ?i ?v) ?j) (select1 ?A ?j))))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?v Int)) (= (select2 (store2 ?A ?o ?f ?v) ?o ?f) ?v))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?o ?p)) (= (select2 (store2 ?A ?o ?f ?v) ?p ?g) (select2 ?A ?p ?g))))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?f ?g)) (= (select2 (store2 ?A ?o ?f ?v) ?p ?g) (select2 ?A ?p ?g))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolIff ?x ?y) Smt.true) (= (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolImplies ?x ?y) Smt.true) (=> (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolAnd ?x ?y) Smt.true) (and (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolOr ?x ?y) Smt.true) (or (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int)) (! (= (= (boolNot ?x) Smt.true) (not (= ?x Smt.true))) :pattern ((boolNot ?x)) ))) +(assert (forall ((?x Int) (?y Int)) (= (= (anyEqual ?x ?y) Smt.true) (= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (anyNeq ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((anyNeq ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (= (= (intLess ?x ?y) Smt.true) (< ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intAtMost ?x ?y) Smt.true) (<= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intAtLeast ?x ?y) Smt.true) (>= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intGreater ?x ?y) Smt.true) (> ?x ?y)))) +(assert (distinct Smt.false Smt.true)) +(assert (forall ((?t Int)) (! (subtypes ?t ?t) :pattern ((subtypes ?t ?t)) ))) +(assert (forall ((?t Int) (?u Int) (?v Int)) (! (=> (and (subtypes ?t ?u) (subtypes ?u ?v)) (subtypes ?t ?v)) :pattern ((subtypes ?t ?u) (subtypes ?u ?v)) ))) +(assert (forall ((?t Int) (?u Int)) (! (=> (and (subtypes ?t ?u) (subtypes ?u ?t)) (= ?t ?u)) :pattern ((subtypes ?t ?u) (subtypes ?u ?t)) ))) +(assert (let ((?v_0 (not (= this nullObject))) (?v_1 (forall ((?o_ Int)) (let ((?v_10 (select2 Heap_ ?o_ ownerRef_)) (?v_11 (select2 Heap_ ?o_ ownerFrame_))) (=> (and (not (= ?o_ nullObject)) (= (= (select2 Heap_ ?o_ allocated_) Smt.true) true)) (and (= ?v_10 ?v_10) (= ?v_11 ?v_11)))))) (?v_3 (= return.value_0 nullObject))) (let ((?v_2 (or ?v_3 (and (= (select2 Heap_ return.value_0 ownerRef_) this) (= (select2 Heap_ return.value_0 ownerFrame_) OwnedResults)))) (?v_4 (or ?v_3 (forall ((?pc_ Int)) (let ((?v_12 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 Heap_ ?pc_ ownerRef_) (select2 Heap_ return.value_0 ownerRef_)) (= (select2 Heap_ ?pc_ ownerFrame_) (select2 Heap_ return.value_0 ownerFrame_))) (and (= (select2 Heap_ ?pc_ inv_) ?v_12) (= (select2 Heap_ ?pc_ localinv_) ?v_12))))))) (?v_5 (= ReallyLastGeneratedExit_correct Smt.true)) (?v_6 (= block8840_correct Smt.true)) (?v_7 (= block8823_correct Smt.true)) (?v_8 (= block8806_correct Smt.true)) (?v_9 (= entry_correct Smt.true))) (not (=> (=> (=> true (=> (= (IsHeap Heap_) Smt.true) (=> (= BeingConstructed_ nullObject) (=> (= (AsPureObject_ this) this) (=> (forall ((?pc_ Int)) (let ((?v_13 (typeof_ ?pc_))) (=> (and (not (= ?pc_ nullObject)) (= (= (select2 Heap_ ?pc_ allocated_) Smt.true) true) (= (select2 Heap_ ?pc_ ownerRef_) (select2 Heap_ this ownerRef_)) (= (select2 Heap_ ?pc_ ownerFrame_) (select2 Heap_ this ownerFrame_))) (and (= (select2 Heap_ ?pc_ inv_) ?v_13) (= (select2 Heap_ ?pc_ localinv_) ?v_13))))) (=> true (=> (= (IsNotNull_ this OwnedResults) Smt.true) (=> (= (= (select2 Heap_ this allocated_) Smt.true) true) (=> true (=> (=> (=> true (=> true (=> true (=> (=> (=> true (=> true (and ?v_0 (=> ?v_0 (=> (= return.value_0 (select2 Heap_ this OwnedResults.x)) (=> true (=> (=> (=> true (=> true (=> true (=> (=> (=> true (and ?v_1 (=> ?v_1 (and ?v_2 (=> ?v_2 (and ?v_4 (=> ?v_4 (=> true true)))))))) ?v_5) ?v_5)))) ?v_6) ?v_6))))))) ?v_7) ?v_7)))) ?v_8) ?v_8)))))))))) ?v_9) ?v_9))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/Arrays_Q1-noinfer.smt2 b/test/regress/regress0/quantifiers/Arrays_Q1-noinfer.smt2 new file mode 100644 index 000000000..3398f5f84 --- /dev/null +++ b/test/regress/regress0/quantifiers/Arrays_Q1-noinfer.smt2 @@ -0,0 +1,73 @@ +(set-logic AUFLIA) +(set-info :source | + Boogie/Spec# benchmarks. + This benchmark was translated by Michal Moskal. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun InRange (Int Int) Bool) +(declare-fun o () Int) +(declare-fun q () Int) +(declare-fun int_18446744073709551615 () Int) +(declare-fun Smt.false () Int) +(declare-fun anyEqual (Int Int) Int) +(declare-fun y () Int) +(declare-fun select1 (Int Int) Int) +(declare-fun select2 (Int Int Int) Int) +(declare-fun CONCVARSYM (Int) Int) +(declare-fun divides (Int Int) Int) +(declare-fun intAtMost (Int Int) Int) +(declare-fun subtypes (Int Int) Bool) +(declare-fun store1 (Int Int Int) Int) +(declare-fun store2 (Int Int Int Int) Int) +(declare-fun B_0 () Int) +(declare-fun B_1 () Int) +(declare-fun intAtLeast (Int Int) Int) +(declare-fun int_2147483647 () Int) +(declare-fun boolOr (Int Int) Int) +(declare-fun ReallyLastGeneratedExit_correct () Int) +(declare-fun int_m9223372036854775808 () Int) +(declare-fun Smt.true () Int) +(declare-fun int_4294967295 () Int) +(declare-fun start_correct () Int) +(declare-fun B () Int) +(declare-fun F () Int) +(declare-fun G () Int) +(declare-fun boolAnd (Int Int) Int) +(declare-fun boolNot (Int) Int) +(declare-fun k_0 () Int) +(declare-fun intLess (Int Int) Int) +(declare-fun intGreater (Int Int) Int) +(declare-fun anyNeq (Int Int) Int) +(declare-fun is (Int Int) Int) +(declare-fun int_m2147483648 () Int) +(declare-fun modulo (Int Int) Int) +(declare-fun boolImplies (Int Int) Int) +(declare-fun boolIff (Int Int) Int) +(declare-fun int_9223372036854775807 () Int) +(assert true) +(assert true) +(assert (forall ((?A Int) (?i Int) (?v Int)) (= (select1 (store1 ?A ?i ?v) ?i) ?v))) +(assert (forall ((?A Int) (?i Int) (?j Int) (?v Int)) (=> (not (= ?i ?j)) (= (select1 (store1 ?A ?i ?v) ?j) (select1 ?A ?j))))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?v Int)) (= (select2 (store2 ?A ?o ?f ?v) ?o ?f) ?v))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?o ?p)) (= (select2 (store2 ?A ?o ?f ?v) ?p ?g) (select2 ?A ?p ?g))))) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?f ?g)) (= (select2 (store2 ?A ?o ?f ?v) ?p ?g) (select2 ?A ?p ?g))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolIff ?x ?y) Smt.true) (= (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolImplies ?x ?y) Smt.true) (=> (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolAnd ?x ?y) Smt.true) (and (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (= (= (boolOr ?x ?y) Smt.true) (or (= ?x Smt.true) (= ?y Smt.true))))) +(assert (forall ((?x Int)) (! (= (= (boolNot ?x) Smt.true) (not (= ?x Smt.true))) :pattern ((boolNot ?x)) ))) +(assert (forall ((?x Int) (?y Int)) (= (= (anyEqual ?x ?y) Smt.true) (= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (anyNeq ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((anyNeq ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (= (= (intLess ?x ?y) Smt.true) (< ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intAtMost ?x ?y) Smt.true) (<= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intAtLeast ?x ?y) Smt.true) (>= ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (= (intGreater ?x ?y) Smt.true) (> ?x ?y)))) +(assert (distinct Smt.false Smt.true)) +(assert (forall ((?t Int)) (! (subtypes ?t ?t) :pattern ((subtypes ?t ?t)) ))) +(assert (forall ((?t Int) (?u Int) (?v Int)) (! (=> (and (subtypes ?t ?u) (subtypes ?u ?v)) (subtypes ?t ?v)) :pattern ((subtypes ?t ?u) (subtypes ?u ?v)) ))) +(assert (forall ((?t Int) (?u Int)) (! (=> (and (subtypes ?t ?u) (subtypes ?u ?t)) (= ?t ?u)) :pattern ((subtypes ?t ?u) (subtypes ?u ?t)) ))) +(assert (let ((?v_0 (forall ((?p Int) (?f Int)) (or (= (select2 B_1 ?p ?f) (select2 B ?p ?f)) (and (= ?p o) (= ?f F))))) (?v_1 (= ReallyLastGeneratedExit_correct Smt.true)) (?v_2 (= start_correct Smt.true))) (not (=> (=> (=> true (=> (= k_0 (select2 B q G)) (=> (= B_0 (store2 B o F (+ y (select2 B o F)))) (=> (= B_1 (store2 B_0 q G k_0)) (=> (=> (=> true (and ?v_0 (=> ?v_0 (=> true true)))) ?v_1) ?v_1))))) ?v_2) ?v_2)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/Makefile b/test/regress/regress0/quantifiers/Makefile new file mode 100644 index 000000000..b96f2a283 --- /dev/null +++ b/test/regress/regress0/quantifiers/Makefile @@ -0,0 +1,8 @@ +topdir = ../../../.. +srcdir = test/regress/regress0/quantifiers + +include $(topdir)/Makefile.subdir + +# synonyms for "check" +.PHONY: test +test: check diff --git a/test/regress/regress0/quantifiers/Makefile.am b/test/regress/regress0/quantifiers/Makefile.am new file mode 100644 index 000000000..f6c8bdd63 --- /dev/null +++ b/test/regress/regress0/quantifiers/Makefile.am @@ -0,0 +1,75 @@ +BINARY = cvc4 +if PROOF_REGRESSIONS +TESTS_ENVIRONMENT = LFSC="$(LFSC) $(LFSCARGS)" @srcdir@/../../run_regression $(RUN_REGRESSION_ARGS) --proof @top_builddir@/src/main/$(BINARY) +else +TESTS_ENVIRONMENT = @srcdir@/../../run_regression $(RUN_REGRESSION_ARGS) @top_builddir@/src/main/$(BINARY) +endif + +MAKEFLAGS = -k + +# These are run for all build profiles. +# If a test shouldn't be run in e.g. competition mode, +# put it below in "TESTS +=" +TESTS = \ + bug269.smt2 \ + bug290.smt2 \ + bug291.smt2 \ + ex3.smt2 \ + Arrays_Q1-noinfer.smt2 \ + array-unsat-simp3.smt2 \ + bignum_quant.smt2 \ + bug269.smt2 \ + burns13.smt2 \ + burns4.smt2 \ + ex1.smt2 \ + ex3.smt2 \ + ex6.smt2 \ + ex7.smt2 \ + opisavailable-12.smt2 \ + ricart-agrawala6.smt2 \ + set8.smt2 \ + smtlib384a03.smt2 \ + smtlib46f14a.smt2 \ + smtlibf957ea.smt2 \ + gauss_init_0030.fof.smt2 \ + piVC_5581bd.smt2 \ + symmetric_unsat_7.smt2 \ + set3.smt2 + +# removed because they take more than 20s +# ex1.smt2 \ +# ex6.smt2 \ +# ex7.smt2 \ +# array-unsat-simp3.smt2are +# javafe.ast.ArrayInit.35.smt2 \ +# javafe.ast.StandardPrettyPrint.319.smt2 \ +# javafe.ast.StmtVec.009.smt2 \ +# javafe.ast.WhileStmt.447.smt2 \ +# javafe.tc.CheckCompilationUnit.001.smt2 \ +# AdditiveMethods_AdditiveMethods..ctor.smt2 \ +# AdditiveMethods_OwnedResults.Mz.smt2 \ +# javafe.tc.FlowInsensitiveChecks.682.smt2 \ +# + +EXTRA_DIST = $(TESTS) \ + array-unsat-simp3.smt2.expect \ + ex1.smt2.expect \ + ex7.smt2.expect + +#if CVC4_BUILD_PROFILE_COMPETITION +#else +#TESTS += \ +# error.cvc +#endif +# +# and make sure to distribute it +#EXTRA_DIST += \ +# error.cvc + +# synonyms for "check" in this directory +.PHONY: regress regress0 test +regress regress0 test: check + +# do nothing in this subdir +.PHONY: regress1 regress2 regress3 +regress1 regress2 regress3: diff --git a/test/regress/regress0/quantifiers/array-unsat-simp3.smt2 b/test/regress/regress0/quantifiers/array-unsat-simp3.smt2 new file mode 100644 index 000000000..40e07ada7 --- /dev/null +++ b/test/regress/regress0/quantifiers/array-unsat-simp3.smt2 @@ -0,0 +1,21 @@ +(set-logic AUFLIA) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status unsat) +(declare-sort Index 0) +(declare-sort Element 0) +(declare-sort Array_uf 0) +(declare-fun store_uf (Array_uf Index Element) Array_uf) +(declare-fun select_uf (Array_uf Index) Element) +(declare-fun a1 () Array_uf) +(declare-fun e1 () Element) +(declare-fun e2 () Element) +(declare-fun i1 () Index) +(declare-fun i2 () Index) +(assert (forall ((?a Array_uf) (?i Index) (?e Element)) (= (select_uf (store_uf ?a ?i ?e) ?i) ?e))) +(assert (forall ((?a Array_uf) (?i Index) (?j Index) (?e Element)) (or (= ?i ?j)(= (select_uf (store_uf ?a ?i ?e) ?j) (select_uf ?a ?j))))) +(assert (forall ((?a Array_uf) (?b Array_uf)) (=> (forall ((?i Index)) (= (select_uf ?a ?i) (select_uf ?b ?i))) (= ?a ?b)))) +(assert (not (= i1 i2))) +(assert (not (= (store_uf (store_uf a1 i1 e1) i2 e2) (store_uf (store_uf a1 i2 e2) i1 e1)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/array-unsat-simp3.smt2.expect b/test/regress/regress0/quantifiers/array-unsat-simp3.smt2.expect new file mode 100644 index 000000000..df24647ad --- /dev/null +++ b/test/regress/regress0/quantifiers/array-unsat-simp3.smt2.expect @@ -0,0 +1,2 @@ +% EXPECT: unknown (INCOMPLETE) +% EXIT: 0 diff --git a/test/regress/regress0/quantifiers/bignum_quant.smt2 b/test/regress/regress0/quantifiers/bignum_quant.smt2 new file mode 100644 index 000000000..74b08a2da --- /dev/null +++ b/test/regress/regress0/quantifiers/bignum_quant.smt2 @@ -0,0 +1,12 @@ +(set-logic AUFLIA) +(set-info :source | SMT-COMP'06 organizers |) +(set-info :smt-lib-version 2.0) +(set-info :category "check") +(set-info :status unsat) +(set-info :notes |This benchmark is designed to check if the DP supports bignumbers.|) +(declare-fun f (Int) Int) +(assert (= (f 0) 1)) +(assert (forall ((?x Int)) (=> (> ?x 0) (= (f ?x) (* (- 1000) (f (- ?x 1))))))) +(assert (< (f 20) 0)) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/bug269.smt2 b/test/regress/regress0/quantifiers/bug269.smt2 new file mode 100644 index 000000000..0d5aedbb3 --- /dev/null +++ b/test/regress/regress0/quantifiers/bug269.smt2 @@ -0,0 +1,22 @@ +(set-logic LRA) +(set-info :status unsat) +(declare-fun x4 () Real) +(declare-fun x3 () Real) +(assert (forall ((?lambda Real)) + +(let ((?v_26 (* (- 1) x4))) +(let ((?v_28 (+ ?lambda (* (/ 3 40) x4)))) + +(and +(<= (+ ?lambda (* (/ 1 60) x4)) (/ 400 3)) +(<= (+ (* (- 1) ?lambda) (* (/ (- 1) 60) x4)) (/ (- 731) 6)) +(<= ?v_28 610) +(<= ?v_28 359) +(<= ?v_26 (- 4100)) +(<= ?v_26 (- 4500)) +(<= ?v_26 (- 4910)) +)) + + ))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/bug290.smt2 b/test/regress/regress0/quantifiers/bug290.smt2 new file mode 100644 index 000000000..650d6aab0 --- /dev/null +++ b/test/regress/regress0/quantifiers/bug290.smt2 @@ -0,0 +1,20 @@ +(set-logic AUFLIA) +(set-info :source | Simple list theorem |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status unsat) +(declare-sort List 0) +(declare-sort Elem 0) +(declare-fun cons (Elem List) List) +(declare-fun nil () List) +(declare-fun len (List) Int) +(assert (= (len nil) 0)) +(assert (forall ((?x Elem) (?y List)) (= (len (cons ?x ?y)) (+ (len ?y) 1)))) +(declare-fun append (List List) List) +(assert (forall ((?y List)) (= (append nil ?y) ?y))) +(assert (forall ((?x Elem) (?y1 List) (?y2 List)) (= (append (cons ?x ?y1) ?y2) (cons ?x (append ?y1 ?y2))))) +(declare-fun x () Elem) +(declare-fun y () List) +(assert (not (= (append (cons x nil) y) (cons x y)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/bug291.smt2 b/test/regress/regress0/quantifiers/bug291.smt2 new file mode 100644 index 000000000..dbc230599 --- /dev/null +++ b/test/regress/regress0/quantifiers/bug291.smt2 @@ -0,0 +1,13 @@ +(set-logic AUFLIA) +(set-info :source | + Boogie/Spec# benchmarks. + This benchmark was translated by Michal Moskal. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status sat) +(declare-fun select2 (Int) Int) +(declare-fun store2 (Int) Int) +(assert (forall ((?A Int) (?o Int) (?f Int) (?p Int) (?g Int) (?v Int)) (=> (not (= ?o ?p)) (= (select2 (store2 ?A)) (select2 ?A))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/bug291.smt2.expect b/test/regress/regress0/quantifiers/bug291.smt2.expect new file mode 100644 index 000000000..df24647ad --- /dev/null +++ b/test/regress/regress0/quantifiers/bug291.smt2.expect @@ -0,0 +1,2 @@ +% EXPECT: unknown (INCOMPLETE) +% EXIT: 0 diff --git a/test/regress/regress0/quantifiers/burns13.smt2 b/test/regress/regress0/quantifiers/burns13.smt2 new file mode 100644 index 000000000..ad970a2b2 --- /dev/null +++ b/test/regress/regress0/quantifiers/burns13.smt2 @@ -0,0 +1,18 @@ +(set-logic AUFLIA) +(set-info :source | Burns mutual exclusion protocol. This is a benchmark of the haRVey theorem prover. It was translated to SMT-LIB by Leonardo de Moura |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun s_0 (Int) Bool) +(declare-fun s_1 (Int) Bool) +(declare-fun s_2 (Int) Bool) +(declare-fun s_3 (Int) Bool) +(declare-fun s_4 (Int) Bool) +(declare-fun s_5 (Int) Bool) +(declare-fun s (Int Int) Bool) +(declare-fun flag (Int) Bool) +(declare-fun p () Int) +(declare-fun q () Int) +(assert (not (=> (and (forall ((?p Int)) (=> (not (flag ?p)) (or (s_0 ?p) (s_1 ?p) (s_2 ?p)))) (forall ((?p Int)) (forall ((?q Int)) (=> (s_2 ?p) (not (s ?p ?q))))) (forall ((?p Int)) (forall ((?q Int)) (=> (and (< ?q ?p) (flag ?q) (or (s_5 ?p) (s_4 ?p) (and (s_3 ?p) (s ?p ?q)))) (and (not (s_5 ?q)) (not (and (s_4 ?q) (s ?q ?p))))))) (forall ((?p Int)) (=> (s_0 ?p) (not (or (s_1 ?p) (s_2 ?p) (s_3 ?p) (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_1 ?p) (not (or (s_2 ?p) (s_3 ?p) (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_2 ?p) (not (or (s_3 ?p) (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_3 ?p) (not (or (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_4 ?p) (not (s_5 ?p)))) (forall ((?r Int)) (let ((?v_0 (not (= ?r p)))) (=> (s_0 ?r) (not (or (s_1 ?r) (s_2 ?r) (s_3 ?r) (=> ?v_0 (and ?v_0 (=> ?v_0 (s_4 ?r)))) (s_5 ?r)))))) (forall ((?r Int)) (let ((?v_1 (not (= ?r p)))) (=> (s_1 ?r) (not (or (s_2 ?r) (s_3 ?r) (=> ?v_1 (and ?v_1 (=> ?v_1 (s_4 ?r)))) (s_5 ?r)))))) (forall ((?r Int)) (let ((?v_2 (not (= ?r p)))) (=> (s_2 ?r) (not (or (s_3 ?r) (=> ?v_2 (and ?v_2 (=> ?v_2 (s_4 ?r)))) (s_5 ?r)))))) (forall ((?r Int)) (let ((?v_3 (not (= ?r p)))) (=> (s_3 ?r) (not (or (=> ?v_3 (and ?v_3 (=> ?v_3 (s_4 ?r)))) (s_5 ?r)))))) (forall ((?r Int)) (let ((?v_4 (not (= ?r p)))) (=> (=> ?v_4 (and ?v_4 (=> ?v_4 (s_4 ?r)))) (not (s_5 ?r))))) (s_4 p) (not (s p q)) (< p q) (not (flag q))) (and (forall ((?t Int)) (=> (not (flag ?t)) (or (s_0 ?t) (s_1 ?t) (s_2 ?t)))) (forall ((?t Int)) (forall ((?r Int)) (=> (s_2 ?t) (not (=> (not (and (= ?r q) (= ?t p))) (s ?t ?r)))))) (forall ((?t Int)) (forall ((?r Int)) (let ((?v_6 (= ?t p))) (let ((?v_5 (not ?v_6)) (?v_8 (= ?r p))) (let ((?v_7 (not ?v_8))) (=> (and (< ?r ?t) (flag ?r) (or (s_5 ?t) (=> ?v_5 (and ?v_5 (=> ?v_5 (s_4 ?t)))) (and (s_3 ?t) (=> (not (and (= ?r q) ?v_6)) (s ?t ?r))))) (and (not (s_5 ?r)) (not (and (=> ?v_7 (and ?v_7 (=> ?v_7 (s_4 ?r)))) (=> (not (and (= ?t q) ?v_8)) (s ?r ?t))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/burns4.smt2 b/test/regress/regress0/quantifiers/burns4.smt2 new file mode 100644 index 000000000..886d6f5c8 --- /dev/null +++ b/test/regress/regress0/quantifiers/burns4.smt2 @@ -0,0 +1,18 @@ +(set-logic AUFLIA) +(set-info :source | Burns mutual exclusion protocol. This is a benchmark of the haRVey theorem prover. It was translated to SMT-LIB by Leonardo de Moura |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun s_0 (Int) Bool) +(declare-fun s_1 (Int) Bool) +(declare-fun s_2 (Int) Bool) +(declare-fun s_3 (Int) Bool) +(declare-fun s_4 (Int) Bool) +(declare-fun s_5 (Int) Bool) +(declare-fun s (Int Int) Bool) +(declare-fun flag (Int) Bool) +(declare-fun p () Int) +(declare-fun q () Int) +(assert (not (=> (and (forall ((?p Int)) (=> (not (flag ?p)) (or (s_0 ?p) (s_1 ?p) (s_2 ?p)))) (forall ((?p Int)) (forall ((?q Int)) (=> (s_2 ?p) (not (s ?p ?q))))) (forall ((?p Int)) (forall ((?q Int)) (=> (and (< ?q ?p) (flag ?q) (or (s_5 ?p) (s_4 ?p) (and (s_3 ?p) (s ?p ?q)))) (and (not (s_5 ?q)) (not (and (s_4 ?q) (s ?q ?p))))))) (forall ((?p Int)) (=> (s_0 ?p) (not (or (s_1 ?p) (s_2 ?p) (s_3 ?p) (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_1 ?p) (not (or (s_2 ?p) (s_3 ?p) (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_2 ?p) (not (or (s_3 ?p) (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_3 ?p) (not (or (s_4 ?p) (s_5 ?p))))) (forall ((?p Int)) (=> (s_4 ?p) (not (s_5 ?p))))) (forall ((?p Int)) (forall ((?q Int)) (=> (not (= ?p ?q)) (or (not (s_5 ?p)) (not (s_5 ?q))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/ex1.smt2 b/test/regress/regress0/quantifiers/ex1.smt2 new file mode 100644 index 000000000..a8f4ff2b9 --- /dev/null +++ b/test/regress/regress0/quantifiers/ex1.smt2 @@ -0,0 +1,12 @@ +(set-logic AUFLIRA) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status sat) +(declare-sort U 0) +(declare-fun a () U) +(declare-fun b () U) +(declare-fun f (U) U) +(declare-fun p () Bool) +(assert (and (= a b) (forall ((x U)) (=> (and (= (f x) a) (not (= (f x) b))) p)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/ex1.smt2.expect b/test/regress/regress0/quantifiers/ex1.smt2.expect new file mode 100644 index 000000000..df24647ad --- /dev/null +++ b/test/regress/regress0/quantifiers/ex1.smt2.expect @@ -0,0 +1,2 @@ +% EXPECT: unknown (INCOMPLETE) +% EXIT: 0 diff --git a/test/regress/regress0/quantifiers/ex3.smt2 b/test/regress/regress0/quantifiers/ex3.smt2 new file mode 100644 index 000000000..fd887b4bc --- /dev/null +++ b/test/regress/regress0/quantifiers/ex3.smt2 @@ -0,0 +1,10 @@ +(set-logic AUFLIRA) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-sort U 0) +(declare-fun a () U) +(declare-fun f (U) U) +(assert (and (not (= (f (f a)) a)) (forall ((x U)) (= (f x) x)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/ex6.smt2 b/test/regress/regress0/quantifiers/ex6.smt2 new file mode 100644 index 000000000..7285e1c4f --- /dev/null +++ b/test/regress/regress0/quantifiers/ex6.smt2 @@ -0,0 +1,11 @@ +(set-logic AUFLIRA) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-sort U 0) +(declare-fun a () U) +(declare-fun S (U) U) +(declare-fun G (U U) Bool) +(assert (and (forall ((x U)) (G (S x) x)) (forall ((x U) (y U) (z U)) (=> (and (G x y) (G y z)) (G x z))) (not (G (S (S a)) a)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/ex7.smt2 b/test/regress/regress0/quantifiers/ex7.smt2 new file mode 100644 index 000000000..0cac5ff54 --- /dev/null +++ b/test/regress/regress0/quantifiers/ex7.smt2 @@ -0,0 +1,12 @@ +(set-logic AUFLIRA) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status sat) +(declare-sort U 0) +(declare-fun a () U) +(declare-fun b () U) +(declare-fun c () U) +(declare-fun f (U) U) +(assert (and (= a b) (forall ((x U)) (=> (or (= (f x) c) (= x a)) (= x b))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/ex7.smt2.expect b/test/regress/regress0/quantifiers/ex7.smt2.expect new file mode 100644 index 000000000..df24647ad --- /dev/null +++ b/test/regress/regress0/quantifiers/ex7.smt2.expect @@ -0,0 +1,2 @@ +% EXPECT: unknown (INCOMPLETE) +% EXIT: 0 diff --git a/test/regress/regress0/quantifiers/gauss_init_0030.fof.smt2 b/test/regress/regress0/quantifiers/gauss_init_0030.fof.smt2 new file mode 100644 index 000000000..e9f0490a6 --- /dev/null +++ b/test/regress/regress0/quantifiers/gauss_init_0030.fof.smt2 @@ -0,0 +1,61 @@ +(set-logic AUFLIRA) +(set-info :source | +NASA benchmarks from "Using Automated Theorem Provers to Certify Auto-generated +Aerospace Software", IJCAR 2004. Translated from TPTP format by Yeting Ge and +Clark Barrett + +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun def () Real) +(declare-fun init () Real) +(declare-fun loopcounter () Int) +(declare-fun pv1403 () Real) +(declare-fun s_best7 () Int) +(declare-fun s_best7_init () Real) +(declare-fun s_sworst7 () Int) +(declare-fun s_sworst7_init () Real) +(declare-fun s_values7_init () (Array Int Real)) +(declare-fun s_worst7 () Int) +(declare-fun s_worst7_init () Real) +(declare-fun simplex7_init () (Array Int (Array Int Real))) +(declare-fun tptp_float_0_001 () Real) +(declare-fun use () Real) +(declare-fun uniform_int_rnd (Int Int) Int) +(declare-fun abs_ (Real) Real) +(declare-fun log (Real) Real) +(declare-fun exp (Real) Real) +(declare-fun cos (Real) Real) +(declare-fun sin (Real) Real) +(declare-fun sqrt (Real) Real) +(declare-fun divide (Real Real) Real) +(declare-fun cond (Int Real Real) Real) +(declare-fun tptp_term_equal (Real Real) Int) +(declare-fun tptp_term_equals (Real Real) Int) +(declare-fun tptp_term_and (Real Real) Int) +(declare-fun sum (Int Int Real) Real) +(declare-fun dim (Int Int) Int) +(declare-fun trans ((Array Int (Array Int Real))) (Array Int (Array Int Real))) +(declare-fun inv ((Array Int (Array Int Real))) (Array Int (Array Int Real))) +(declare-fun tptp_mmul ((Array Int (Array Int Real)) (Array Int (Array Int Real))) (Array Int (Array Int Real))) +(declare-fun tptp_madd ((Array Int (Array Int Real)) (Array Int (Array Int Real))) (Array Int (Array Int Real))) +(declare-fun tptp_msub ((Array Int (Array Int Real)) (Array Int (Array Int Real))) (Array Int (Array Int Real))) +(declare-fun tptp_const_array1 (Int Real) (Array Int Real)) +(declare-fun tptp_const_array2 (Int Int Real) (Array Int (Array Int Real))) +(assert (forall ((?X_0 Int) (?C_1 Int)) (=> (>= ?X_0 0) (<= (uniform_int_rnd ?C_1 ?X_0) ?X_0)))) +(assert (forall ((?X_2 Int) (?C_3 Int)) (=> (>= ?X_2 0) (>= (uniform_int_rnd ?C_3 ?X_2) 0)))) +(assert (forall ((?I_4 Int) (?L_5 Int) (?U_6 Int) (?Val_7 Real)) (=> (and (<= ?L_5 ?I_4) (<= ?I_4 ?U_6)) (= (select (tptp_const_array1 (dim ?L_5 ?U_6) ?Val_7) ?I_4) ?Val_7)))) +(assert (forall ((?I_8 Int) (?L1_9 Int) (?U1_10 Int) (?J_11 Int) (?L2_12 Int) (?U2_13 Int) (?Val_14 Real)) (=> (and (and (and (<= ?L1_9 ?I_8) (<= ?I_8 ?U1_10)) (<= ?L2_12 ?J_11)) (<= ?J_11 ?U2_13)) (= (select (select (tptp_const_array2 (dim ?L1_9 ?U1_10) (dim ?L2_12 ?U2_13) ?Val_14) ?I_8) ?J_11) ?Val_14)))) +(assert (forall ((?I0_15 Int) (?J0_16 Int) (?A_17 (Array Int (Array Int Real))) (?B_18 (Array Int (Array Int Real))) (?N_19 Int)) (let ((?v_0 (tptp_mmul ?A_17 (tptp_mmul ?B_18 (trans ?A_17))))) (=> (and (and (and (and (>= ?I0_15 0) (<= ?I0_15 ?N_19)) (>= ?J0_16 0)) (<= ?J0_16 ?N_19)) (= (select (select ?B_18 ?I0_15) ?J0_16) (select (select ?B_18 ?J0_16) ?I0_15))) (= (select (select ?v_0 ?I0_15) ?J0_16) (select (select ?v_0 ?J0_16) ?I0_15)))))) +(assert (forall ((?I0_20 Int) (?J0_21 Int) (?I_22 Int) (?J_23 Int) (?A_24 (Array Int (Array Int Real))) (?B_25 (Array Int (Array Int Real))) (?N_26 Int) (?M_27 Int)) (let ((?v_0 (tptp_mmul ?A_24 (tptp_mmul ?B_25 (trans ?A_24))))) (=> (and (and (and (and (and (and (and (and (>= ?I0_20 0) (<= ?I0_20 ?N_26)) (>= ?J0_21 0)) (<= ?J0_21 ?N_26)) (>= ?I_22 0)) (<= ?I_22 ?M_27)) (>= ?J_23 0)) (<= ?J_23 ?M_27)) (= (select (select ?B_25 ?I_22) ?J_23) (select (select ?B_25 ?J_23) ?I_22))) (= (select (select ?v_0 ?I0_20) ?J0_21) (select (select ?v_0 ?J0_21) ?I0_20)))))) +(assert (forall ((?I_28 Int) (?J_29 Int) (?A_30 (Array Int (Array Int Real))) (?B_31 (Array Int (Array Int Real))) (?N_32 Int)) (let ((?v_0 (tptp_madd ?A_30 ?B_31))) (=> (and (and (and (and (and (>= ?I_28 0) (<= ?I_28 ?N_32)) (>= ?J_29 0)) (<= ?J_29 ?N_32)) (= (select (select ?A_30 ?I_28) ?J_29) (select (select ?A_30 ?J_29) ?I_28))) (= (select (select ?B_31 ?I_28) ?J_29) (select (select ?B_31 ?J_29) ?I_28))) (= (select (select ?v_0 ?I_28) ?J_29) (select (select ?v_0 ?J_29) ?I_28)))))) +(assert (forall ((?I_33 Int) (?J_34 Int) (?A_35 (Array Int (Array Int Real))) (?B_36 (Array Int (Array Int Real))) (?N_37 Int)) (let ((?v_0 (tptp_msub ?A_35 ?B_36))) (=> (and (and (and (and (and (>= ?I_33 0) (<= ?I_33 ?N_37)) (>= ?J_34 0)) (<= ?J_34 ?N_37)) (= (select (select ?A_35 ?I_33) ?J_34) (select (select ?A_35 ?J_34) ?I_33))) (= (select (select ?B_36 ?I_33) ?J_34) (select (select ?B_36 ?J_34) ?I_33))) (= (select (select ?v_0 ?I_33) ?J_34) (select (select ?v_0 ?J_34) ?I_33)))))) +(assert (forall ((?I_38 Int) (?J_39 Int) (?A_40 (Array Int (Array Int Real))) (?N_41 Int)) (let ((?v_0 (trans ?A_40))) (=> (and (and (and (and (>= ?I_38 0) (<= ?I_38 ?N_41)) (>= ?J_39 0)) (<= ?J_39 ?N_41)) (= (select (select ?A_40 ?I_38) ?J_39) (select (select ?A_40 ?J_39) ?I_38))) (= (select (select ?v_0 ?I_38) ?J_39) (select (select ?v_0 ?J_39) ?I_38)))))) +(assert (forall ((?I_42 Int) (?J_43 Int) (?A_44 (Array Int (Array Int Real))) (?N_45 Int)) (let ((?v_0 (inv ?A_44))) (=> (and (and (and (and (>= ?I_42 0) (<= ?I_42 ?N_45)) (>= ?J_43 0)) (<= ?J_43 ?N_45)) (= (select (select ?A_44 ?I_42) ?J_43) (select (select ?A_44 ?J_43) ?I_42))) (= (select (select ?v_0 ?I_42) ?J_43) (select (select ?v_0 ?J_43) ?I_42)))))) +(assert (forall ((?I0_46 Int) (?J0_47 Int) (?I_48 Int) (?J_49 Int) (?A_50 (Array Int (Array Int Real))) (?B_51 (Array Int (Array Int Real))) (?C_52 (Array Int (Array Int Real))) (?D_53 (Array Int (Array Int Real))) (?E_54 (Array Int (Array Int Real))) (?F_55 (Array Int (Array Int Real))) (?N_56 Int) (?M_57 Int)) (let ((?v_0 (tptp_madd ?A_50 (tptp_mmul ?B_51 (tptp_mmul (tptp_madd (tptp_mmul ?C_52 (tptp_mmul ?D_53 (trans ?C_52))) (tptp_mmul ?E_54 (tptp_mmul ?F_55 (trans ?E_54)))) (trans ?B_51)))))) (=> (and (and (and (and (and (and (and (and (and (and (>= ?I0_46 0) (<= ?I0_46 ?N_56)) (>= ?J0_47 0)) (<= ?J0_47 ?N_56)) (>= ?I_48 0)) (<= ?I_48 ?M_57)) (>= ?J_49 0)) (<= ?J_49 ?M_57)) (= (select (select ?D_53 ?I_48) ?J_49) (select (select ?D_53 ?J_49) ?I_48))) (= (select (select ?A_50 ?I0_46) ?J0_47) (select (select ?A_50 ?J0_47) ?I0_46))) (= (select (select ?F_55 ?I0_46) ?J0_47) (select (select ?F_55 ?J0_47) ?I0_46))) (= (select (select ?v_0 ?I0_46) ?J0_47) (select (select ?v_0 ?J0_47) ?I0_46)))))) +(assert (forall ((?Body_58 Real)) (= (sum 0 (- 1) ?Body_58) 0.0))) +(assert (not (= def use))) +(assert (let ((?v_0 (not (<= tptp_float_0_001 pv1403))) (?v_1 (= s_best7_init init)) (?v_3 (= s_sworst7_init init)) (?v_4 (= s_worst7_init init)) (?v_5 (>= s_best7 0)) (?v_6 (>= s_sworst7 0)) (?v_7 (>= s_worst7 0)) (?v_8 (<= s_best7 3)) (?v_9 (<= s_sworst7 3)) (?v_10 (<= s_worst7 3)) (?v_2 (> loopcounter 0))) (not (=> (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and ?v_0 (forall ((?A_59 Int)) (=> (and (>= ?A_59 0) (<= ?A_59 2)) (forall ((?B_60 Int)) (=> (and (>= ?B_60 0) (<= ?B_60 3)) (= (select (select simplex7_init ?B_60) ?A_59) init)))))) (forall ((?C_61 Int)) (=> (and (>= ?C_61 0) (<= ?C_61 3)) (= (select s_values7_init ?C_61) init)))) (=> ?v_0 ?v_1)) (=> ?v_0 ?v_3)) (=> ?v_0 ?v_4)) (=> ?v_0 ?v_5)) (=> ?v_0 ?v_6)) (=> ?v_0 ?v_7)) (=> ?v_0 ?v_8)) (=> ?v_0 ?v_9)) (=> ?v_0 ?v_10)) (=> ?v_2 ?v_1)) (=> ?v_2 ?v_3)) (=> ?v_2 ?v_4)) (=> ?v_2 (= (select s_values7_init s_best7) init))) (=> ?v_2 (= (select s_values7_init s_sworst7) init))) (=> ?v_2 (= (select s_values7_init s_worst7) init))) (=> ?v_2 ?v_5)) (=> ?v_2 ?v_6)) (=> ?v_2 ?v_7)) (=> ?v_2 ?v_8)) (=> ?v_2 ?v_9)) (=> ?v_2 ?v_10)) (= (select (select simplex7_init s_best7) 0) init))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/javafe.ast.ArrayInit.35.smt2 b/test/regress/regress0/quantifiers/javafe.ast.ArrayInit.35.smt2 new file mode 100644 index 000000000..811796bbf --- /dev/null +++ b/test/regress/regress0/quantifiers/javafe.ast.ArrayInit.35.smt2 @@ -0,0 +1,746 @@ +(set-logic AUFLIA) +(set-info :source | Simplify Theorem Prover Benchmark Suite |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun true_term () Int) +(declare-fun false_term () Int) +(assert (= true_term 1)) +(assert (= false_term 0)) +(declare-fun S_select (Int Int) Int) +(declare-fun S_store (Int Int Int) Int) +(assert (forall ((?m Int) (?i Int) (?x Int)) (= (S_select (S_store ?m ?i ?x) ?i) ?x))) +(assert (forall ((?m Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (S_select (S_store ?m ?i ?x) ?j) (S_select ?m ?j))))) +(declare-fun PO_LT (Int Int) Int) +(assert (forall ((?t Int)) (= (PO_LT ?t ?t) true_term))) +(declare-fun T_java_lang_Object () Int) +(assert (= (PO_LT T_java_lang_Object T_java_lang_Object) true_term)) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t2) true_term)) (= (PO_LT ?t0 ?t2) true_term)))) +(assert (forall ((?t0 Int) (?t1 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t0) true_term)) (= ?t0 ?t1)))) +(declare-fun T_boolean () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_boolean) true_term) (= ?t T_boolean)))) +(declare-fun T_char () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_char) true_term) (= ?t T_char)))) +(declare-fun T_byte () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_byte) true_term) (= ?t T_byte)))) +(declare-fun T_short () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_short) true_term) (= ?t T_short)))) +(declare-fun T_int () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_int) true_term) (= ?t T_int)))) +(declare-fun T_long () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_long) true_term) (= ?t T_long)))) +(declare-fun T_float () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_float) true_term) (= ?t T_float)))) +(declare-fun T_double () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_double) true_term) (= ?t T_double)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_boolean ?t) true_term) (= ?t T_boolean)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_char ?t) true_term) (= ?t T_char)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_byte ?t) true_term) (= ?t T_byte)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_short ?t) true_term) (= ?t T_short)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_int ?t) true_term) (= ?t T_int)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_long ?t) true_term) (= ?t T_long)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_float ?t) true_term) (= ?t T_float)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_double ?t) true_term) (= ?t T_double)))) +(declare-fun asChild (Int Int) Int) +(declare-fun classDown (Int Int) Int) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (let ((?v_0 (asChild ?t1 ?t2))) (=> (= (PO_LT ?t0 ?v_0) true_term) (= (classDown ?t2 ?t0) ?v_0))))) +(declare-fun T_java_lang_Cloneable () Int) +(assert (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term)) +(declare-fun array (Int) Int) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) T_java_lang_Cloneable) true_term))) +(declare-fun elemtype (Int) Int) +(assert (forall ((?t Int)) (= (elemtype (array ?t)) ?t))) +(assert (forall ((?t0 Int) (?t1 Int)) (let ((?v_0 (elemtype ?t0))) (= (= (PO_LT ?t0 (array ?t1)) true_term) (and (= ?t0 (array ?v_0)) (= (PO_LT ?v_0 ?t1) true_term)))))) +(declare-fun is (Int Int) Int) +(declare-fun cast (Int Int) Int) +(assert (forall ((?x Int) (?t Int)) (= (is (cast ?x ?t) ?t) true_term))) +(assert (forall ((?x Int) (?t Int)) (=> (= (is ?x ?t) true_term) (= (cast ?x ?t) ?x)))) +(assert true) +(assert (forall ((?x Int)) (= (= (is ?x T_char) true_term) (and (<= 0 ?x) (<= ?x 65535))))) +(assert (forall ((?x Int)) (= (= (is ?x T_byte) true_term) (and (<= (- 128) ?x) (<= ?x 127))))) +(assert (forall ((?x Int)) (= (= (is ?x T_short) true_term) (and (<= (- 32768) ?x) (<= ?x 32767))))) +(declare-fun intFirst () Int) +(declare-fun intLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_int) true_term) (and (<= intFirst ?x) (<= ?x intLast))))) +(declare-fun longFirst () Int) +(declare-fun longLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_long) true_term) (and (<= longFirst ?x) (<= ?x longLast))))) +(assert (< longFirst intFirst)) +(assert (< intFirst (- 1000000))) +(assert (< 1000000 intLast)) +(assert (< intLast longLast)) +(declare-fun null () Int) +(declare-fun typeof (Int) Int) +(assert (forall ((?x Int) (?t Int)) (=> (= (PO_LT ?t T_java_lang_Object) true_term) (= (= (is ?x ?t) true_term) (or (= ?x null) (= (PO_LT (typeof ?x) ?t) true_term)))))) +(declare-fun asField (Int Int) Int) +(assert (forall ((?f Int) (?t Int) (?x Int)) (= (is (S_select (asField ?f ?t) ?x) ?t) true_term))) +(declare-fun asElems (Int) Int) +(assert (forall ((?e Int) (?a Int) (?i Int)) (= (is (S_select (S_select (asElems ?e) ?a) ?i) (elemtype (typeof ?a))) true_term))) +(declare-fun vAllocTime (Int) Int) +(declare-fun isAllocated (Int Int) Int) +(assert (forall ((?x Int) (?a0 Int)) (= (= (isAllocated ?x ?a0) true_term) (< (vAllocTime ?x) ?a0)))) +(declare-fun fClosedTime (Int) Int) +(assert (forall ((?x Int) (?f Int) (?a0 Int)) (=> (and (< (fClosedTime ?f) ?a0) (= (isAllocated ?x ?a0) true_term)) (= (isAllocated (S_select ?f ?x) ?a0) true_term)))) +(declare-fun eClosedTime (Int) Int) +(assert (forall ((?a Int) (?e Int) (?i Int) (?a0 Int)) (=> (and (< (eClosedTime ?e) ?a0) (= (isAllocated ?a ?a0) true_term)) (= (isAllocated (S_select (S_select ?e ?a) ?i) ?a0) true_term)))) +(declare-fun asLockSet (Int) Int) +(declare-fun max (Int) Int) +(assert (forall ((?S Int)) (let ((?v_0 (asLockSet ?S))) (= (S_select ?v_0 (max ?v_0)) true_term)))) +(assert (forall ((?S Int)) (= (S_select (asLockSet ?S) null) true_term))) +(declare-fun lockLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun lockLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLT ?x ?y) true_term) (< ?x ?y)))) +(assert (forall ((?S Int) (?mu Int)) (let ((?v_0 (asLockSet ?S))) (=> (= (S_select ?v_0 ?mu) true_term) (= (lockLE ?mu (max ?v_0)) true_term))))) +(assert (forall ((?x Int)) (=> (= (PO_LT (typeof ?x) T_java_lang_Object) true_term) (= (lockLE null ?x) true_term)))) +(declare-fun arrayLength (Int) Int) +(assert (forall ((?a Int)) (let ((?v_0 (arrayLength ?a))) (and (<= 0 ?v_0) (= (is ?v_0 T_int) true_term))))) +(declare-fun arrayFresh (Int Int Int Int Int Int Int) Int) +(declare-fun arrayShapeMore (Int Int) Int) +(declare-fun arrayParent (Int) Int) +(declare-fun arrayPosition (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?s Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (let ((?v_0 (S_select (S_select ?e ?a) ?i))) (and (= (arrayFresh ?v_0 ?a0 ?b0 ?e ?s (elemtype ?T) ?v) true_term) (= (arrayParent ?v_0) ?a) (= (arrayPosition ?v_0) ?i)))))))) +(declare-fun arrayShapeOne (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (= (S_select (S_select ?e ?a) ?i) ?v)))))) +(declare-fun arrayType () Int) +(assert (= arrayType (asChild arrayType T_java_lang_Object))) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) arrayType) true_term))) +(declare-fun isNewArray (Int) Int) +(assert (forall ((?s Int)) (=> (= true_term (isNewArray ?s)) (= (PO_LT (typeof ?s) arrayType) true_term)))) +(declare-fun boolAnd (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolAnd ?a ?b) true_term) (and (= ?a true_term) (= ?b true_term))))) +(declare-fun boolEq (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolEq ?a ?b) true_term) (= (= ?a true_term) (= ?b true_term))))) +(declare-fun boolImplies (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolImplies ?a ?b) true_term) (=> (= ?a true_term) (= ?b true_term))))) +(declare-fun boolNE (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolNE ?a ?b) true_term) (not (= (= ?a true_term) (= ?b true_term)))))) +(declare-fun boolNot (Int) Int) +(assert (forall ((?a Int)) (= (= (boolNot ?a) true_term) (not (= ?a true_term))))) +(declare-fun boolOr (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolOr ?a ?b) true_term) (or (= ?a true_term) (= ?b true_term))))) +(declare-fun integralEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun stringCat (Int Int) Int) +(declare-fun T_java_lang_String () Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (stringCat ?x ?y))) (and (not (= ?v_0 null)) (= (PO_LT (typeof ?v_0) T_java_lang_String) true_term))))) +(declare-fun integralGE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGE ?x ?y) true_term) (>= ?x ?y)))) +(declare-fun integralGT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGT ?x ?y) true_term) (> ?x ?y)))) +(declare-fun integralLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun integralLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLT ?x ?y) true_term) (< ?x ?y)))) +(declare-fun integralNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun refEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun refNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun nonnullelements (Int Int) Int) +(assert (forall ((?x Int) (?e Int)) (= (= (nonnullelements ?x ?e) true_term) (and (not (= ?x null)) (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i (arrayLength ?x))) (not (= (S_select (S_select ?e ?x) ?i) null)))))))) +(declare-fun classLiteral (Int) Int) +(declare-fun T_java_lang_Class () Int) +(declare-fun alloc () Int) +(assert (forall ((?t Int)) (let ((?v_0 (classLiteral ?t))) (and (not (= ?v_0 null)) (= (is ?v_0 T_java_lang_Class) true_term) (= (isAllocated ?v_0 alloc) true_term))))) +(declare-fun integralAnd (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralAnd ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?x) (<= (integralAnd ?x ?y) ?x)))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?y) (<= (integralAnd ?x ?y) ?y)))) +(declare-fun integralOr (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (integralOr ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= ?x ?v_0) (<= ?y ?v_0)))))) +(declare-fun integralXor (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralXor ?x ?y))))) +(declare-fun intShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 31)) (<= 1 (intShiftL 1 ?n))))) +(declare-fun longShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 63)) (<= 1 (longShiftL 1 ?n))))) +(assert true) +(declare-fun T_javafe_ast_ConstructorInvocation () Int) +(declare-fun T_javafe_ast_Stmt () Int) +(declare-fun T_javafe_ast_VariableAccess () Int) +(declare-fun T_javafe_ast_Expr () Int) +(declare-fun T_javafe_ast_ImportDecl () Int) +(declare-fun T_javafe_ast_ASTNode () Int) +(declare-fun T_javafe_ast_TryCatchStmt () Int) +(declare-fun T_javafe_ast_OperatorTags () Int) +(declare-fun T_javafe_ast_GeneratedTags () Int) +(declare-fun T_javafe_ast_TagConstants () Int) +(declare-fun T_javafe_tc_FieldDeclVec () Int) +(declare-fun T_javafe_ast_BlockStmt () Int) +(declare-fun T_javafe_ast_GenericBlockStmt () Int) +(declare-fun T_javafe_ast_RoutineDecl () Int) +(declare-fun T_javafe_ast_TypeDeclElem () Int) +(declare-fun T_javafe_ast_VarInit () Int) +(declare-fun T_javafe_ast_ParenExpr () Int) +(declare-fun T_javafe_ast_Type () Int) +(declare-fun T_javafe_ast_EvalStmt () Int) +(declare-fun T_javafe_ast_TypeObjectDesignator () Int) +(declare-fun T_javafe_ast_ObjectDesignator () Int) +(declare-fun T_java_lang_RuntimeException () Int) +(declare-fun T_java_lang_Exception () Int) +(declare-fun T_javafe_ast_IfStmt () Int) +(declare-fun T_javafe_ast_ArrayInit () Int) +(declare-fun T_java_lang_Throwable () Int) +(declare-fun T_java_util_Map () Int) +(declare-fun T_java_util_EscjavaKeyValue () Int) +(declare-fun T_java_lang_Long () Int) +(declare-fun T_java_lang_Number () Int) +(declare-fun T_java_lang_Comparable () Int) +(declare-fun T_javafe_ast_CondExpr () Int) +(declare-fun T_javafe_util_Location () Int) +(declare-fun T_javafe_tc_MethodDeclVec () Int) +(declare-fun T_javafe_ast_VarDeclStmt () Int) +(declare-fun T_javafe_ast_MethodDecl () Int) +(declare-fun T_javafe_ast_TypeName () Int) +(declare-fun T_javafe_ast_LiteralExpr () Int) +(declare-fun T_java_io_Serializable () Int) +(declare-fun T_javafe_ast_ThrowStmt () Int) +(declare-fun T_java_lang_Boolean () Int) +(declare-fun T_javafe_ast_SkipStmt () Int) +(declare-fun T_javafe_ast_LocalVarDecl () Int) +(declare-fun T_javafe_ast_GenericVarDecl () Int) +(declare-fun T_javafe_ast_CastExpr () Int) +(declare-fun T_javafe_ast_WhileStmt () Int) +(declare-fun T_javafe_ast_TypeDecl () Int) +(declare-fun T_javafe_ast_MethodInvocation () Int) +(declare-fun T_javafe_ast_Identifier () Int) +(declare-fun T_javafe_ast_NewInstanceExpr () Int) +(declare-fun T_java_util_Hashtable () Int) +(declare-fun T_java_util_Dictionary () Int) +(declare-fun T_javafe_tc_Env () Int) +(declare-fun T_javafe_ast_SingleTypeImportDecl () Int) +(declare-fun T_javafe_ast_Name () Int) +(declare-fun T_javafe_ast_CompilationUnit () Int) +(declare-fun T_javafe_ast_BreakStmt () Int) +(declare-fun T_javafe_ast_BranchStmt () Int) +(declare-fun T_javafe_ast_VisitorArgResult () Int) +(declare-fun T_javafe_ast_AmbiguousVariableAccess () Int) +(declare-fun T_javafe_ast_FormalParaDecl () Int) +(declare-fun T_javafe_ast_TryFinallyStmt () Int) +(declare-fun T_javafe_ast_SuperObjectDesignator () Int) +(declare-fun T_javafe_ast_UnaryExpr () Int) +(declare-fun T_javafe_ast_InterfaceDecl () Int) +(declare-fun T_javafe_ast_SynchronizeStmt () Int) +(declare-fun T_java_lang_IndexOutOfBoundsException () Int) +(declare-fun T_javafe_ast_LabelStmt () Int) +(declare-fun T_javafe_ast_CompoundName () Int) +(declare-fun T_javafe_ast_CatchClause () Int) +(declare-fun T_javafe_ast_FieldAccess () Int) +(declare-fun T_javafe_ast_IdentifierVec () Int) +(declare-fun T_java_lang_Integer () Int) +(declare-fun T_javafe_ast_ExprVec () Int) +(declare-fun T_javafe_tc_TagConstants () Int) +(declare-fun T_javafe_parser_TagConstants () Int) +(declare-fun T_javafe_ast_ConstructorDecl () Int) +(declare-fun T_javafe_ast_SwitchStmt () Int) +(declare-fun T_java_lang_Double () Int) +(declare-fun T_javafe_ast_PrimitiveType () Int) +(declare-fun T_javafe_ast_ReturnStmt () Int) +(declare-fun T_java_lang_Float () Int) +(declare-fun T_javafe_ast_ThisExpr () Int) +(declare-fun T_javafe_ast_ExprObjectDesignator () Int) +(declare-fun T_javafe_ast_ForStmt () Int) +(declare-fun T_javafe_ast_InstanceOfExpr () Int) +(declare-fun T_javafe_ast_OnDemandImportDecl () Int) +(declare-fun T_javafe_ast_ClassDeclStmt () Int) +(declare-fun T_javafe_tc_TypeSig () Int) +(declare-fun T_javafe_ast_InitBlock () Int) +(declare-fun T_javafe_ast_ArrayRefExpr () Int) +(declare-fun T_javafe_ast_ArrayType () Int) +(declare-fun T_javafe_ast_ASTDecoration () Int) +(declare-fun T_javafe_ast_VarInitVec () Int) +(declare-fun T_javafe_ast_Visitor () Int) +(declare-fun T_javafe_ast_SwitchLabel () Int) +(declare-fun T_javafe_ast_FieldDecl () Int) +(declare-fun T_javafe_ast_BinaryExpr () Int) +(declare-fun T_javafe_ast_ClassDecl () Int) +(declare-fun T_javafe_ast_ClassLiteral () Int) +(declare-fun T_javafe_ast_DoStmt () Int) +(declare-fun T_javafe_ast_NewArrayExpr () Int) +(declare-fun T_javafe_ast_AmbiguousMethodInvocation () Int) +(declare-fun T_javafe_ast_ContinueStmt () Int) +(declare-fun T_javafe_ast_SimpleName () Int) +(declare-fun DIST_ZERO_1 () Int) +(declare-fun T__TYPE () Int) +(declare-fun TRYCATCHSTMT_19_43_7 () Int) +(declare-fun UNARYSUB_18_55_26 () Int) +(declare-fun TYPEDECLELEMPRAGMA_29_27_26 () Int) +(declare-fun SHORTTYPE_17_36_26 () Int) +(declare-fun WHILESTMT_19_29_7 () Int) +(declare-fun STAR_18_37_26 () Int) +(declare-fun VARIABLEACCESS_19_56_7 () Int) +(declare-fun SINGLETYPEIMPORTDECL_19_15_7 () Int) +(declare-fun BITAND_18_23_26 () Int) +(declare-fun TRYFINALLYSTMT_19_42_7 () Int) +(declare-fun UNARYADD_18_54_26 () Int) +(declare-fun BYTETYPE_17_35_26 () Int) +(declare-fun CLASSDECLSTMT_19_28_7 () Int) +(declare-fun MOD_18_36_26 () Int) +(declare-fun STMTPRAGMA_29_26_26 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_19_55_7 () Int) +(declare-fun COMPILATIONUNIT_19_14_7 () Int) +(declare-fun BITXOR_18_22_26 () Int) +(declare-fun SWITCHLABEL_19_41_7 () Int) +(declare-fun ASGBITXOR_18_51_26 () Int) +(declare-fun punctuationStrings_29_134_22 () Int) +(declare-fun NULLTYPE_17_34_26 () Int) +(declare-fun VARDECLSTMT_19_27_7 () Int) +(declare-fun DIV_18_35_26 () Int) +(declare-fun otherStrings_29_193_30 () Int) +(declare-fun PARENEXPR_19_54_7 () Int) +(declare-fun BITOR_18_21_26 () Int) +(declare-fun MODIFIERPRAGMA_29_25_26 () Int) +(declare-fun noTokens_29_212_27 () Int) +(declare-fun SKIPSTMT_19_40_7 () Int) +(declare-fun ASGBITOR_18_50_26 () Int) +(declare-fun COMPOUNDNAME_19_67_7 () Int) +(declare-fun VOIDTYPE_17_33_26 () Int) +(declare-fun SWITCHSTMT_19_26_7 () Int) +(declare-fun SUB_18_34_26 () Int) +(declare-fun CASTEXPR_19_53_7 () Int) +(declare-fun TYPESIG_28_6_28 () Int) +(declare-fun FORSTMT_19_39_7 () Int) +(declare-fun LEXICALPRAGMA_29_24_26 () Int) +(declare-fun ASGBITAND_18_49_26 () Int) +(declare-fun SIMPLENAME_19_66_7 () Int) +(declare-fun DOUBLETYPE_17_32_26 () Int) +(declare-fun BLOCKSTMT_19_25_7 () Int) +(declare-fun ADD_18_33_26 () Int) +(declare-fun FIRST_KEYWORD_29_51_26 () Int) +(declare-fun INSTANCEOFEXPR_19_52_7 () Int) +(declare-fun AND_18_20_26 () Int) +(declare-fun IFSTMT_19_38_7 () Int) +(declare-fun LAST_KEYWORD_29_103_26 () Int) +(declare-fun ASGURSHIFT_18_48_26 () Int) +(declare-fun ARRAYTYPE_19_65_7 () Int) +(declare-fun FORMALPARADECL_19_24_7 () Int) +(declare-fun FLOATTYPE_17_31_26 () Int) +(declare-fun URSHIFT_18_32_26 () Int) +(declare-fun CONDEXPR_19_51_7 () Int) +(declare-fun OR_18_19_26 () Int) +(declare-fun LABELSTMT_19_37_7 () Int) +(declare-fun NULLLIT_17_45_26 () Int) +(declare-fun ASGRSHIFT_18_47_26 () Int) +(declare-fun NULL_29_82_26 () Int) +(declare-fun TYPENAME_19_64_7 () Int) +(declare-fun CHARTYPE_17_30_26 () Int) +(declare-fun FIELDDECL_19_23_7 () Int) +(declare-fun RSHIFT_18_31_26 () Int) +(declare-fun NEWARRAYEXPR_19_50_7 () Int) +(declare-fun CONTINUESTMT_19_36_7 () Int) +(declare-fun STRINGLIT_17_44_26 () Int) +(declare-fun ASGLSHIFT_18_46_26 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_19_63_7 () Int) +(declare-fun LONGTYPE_17_29_26 () Int) +(declare-fun LOCALVARDECL_19_22_7 () Int) +(declare-fun LSHIFT_18_30_26 () Int) +(declare-fun NEWINSTANCEEXPR_19_49_7 () Int) +(declare-fun POSTFIXDEC_18_63_26 () Int) +(declare-fun BREAKSTMT_19_35_7 () Int) +(declare-fun DOUBLELIT_17_43_26 () Int) +(declare-fun ASGSUB_18_45_26 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_19_62_7 () Int) +(declare-fun INTTYPE_17_28_26 () Int) +(declare-fun INITBLOCK_19_21_7 () Int) +(declare-fun LT_18_29_26 () Int) +(declare-fun ARRAYREFEXPR_19_48_7 () Int) +(declare-fun POSTFIXINC_18_62_26 () Int) +(declare-fun THROWSTMT_19_34_7 () Int) +(declare-fun FLOATLIT_17_42_26 () Int) +(declare-fun ASGADD_18_44_26 () Int) +(declare-fun EXPROBJECTDESIGNATOR_19_61_7 () Int) +(declare-fun otherCodes_29_202_27 () Int) +(declare-fun BOOLEANTYPE_17_27_26 () Int) +(declare-fun METHODDECL_19_20_7 () Int) +(declare-fun LE_18_28_26 () Int) +(declare-fun THISEXPR_19_47_7 () Int) +(declare-fun DEC_18_59_26 () Int) +(declare-fun CHARLIT_17_41_26 () Int) +(declare-fun RETURNSTMT_19_33_7 () Int) +(declare-fun punctuationCodes_29_164_19 () Int) +(declare-fun ASGREM_18_43_26 () Int) +(declare-fun CLASSLITERAL_19_60_7 () Int) +(declare-fun IDENT_17_25_26 () Int) +(declare-fun CONSTRUCTORDECL_19_19_7 () Int) +(declare-fun GT_18_27_26 () Int) +(declare-fun ARRAYINIT_19_46_7 () Int) +(declare-fun INC_18_58_26 () Int) +(declare-fun LONGLIT_17_40_26 () Int) +(declare-fun EVALSTMT_19_32_7 () Int) +(declare-fun ASGDIV_18_42_26 () Int) +(declare-fun METHODINVOCATION_19_59_7 () Int) +(declare-fun INTERFACEDECL_19_18_7 () Int) +(declare-fun GE_18_26_26 () Int) +(declare-fun CATCHCLAUSE_19_45_7 () Int) +(declare-fun BITNOT_18_57_26 () Int) +(declare-fun keywordStrings_29_181_30 () Int) +(declare-fun NULL_13_60_26 () Int) +(declare-fun SYNCHRONIZESTMT_19_31_7 () Int) +(declare-fun INTLIT_17_39_26 () Int) +(declare-fun ASGMUL_18_41_26 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_19_58_7 () Int) +(declare-fun CLASSDECL_19_17_7 () Int) +(declare-fun EQ_18_25_26 () Int) +(declare-fun TYPEMODIFIERPRAGMA_29_28_26 () Int) +(declare-fun CONSTRUCTORINVOCATION_19_44_7 () Int) +(declare-fun NOT_18_56_26 () Int) +(declare-fun BOOLEANLIT_17_38_26 () Int) +(declare-fun DOSTMT_19_30_7 () Int) +(declare-fun ASSIGN_18_40_26 () Int) +(declare-fun FIELDACCESS_19_57_7 () Int) +(declare-fun ONDEMANDIMPORTDECL_19_16_7 () Int) +(declare-fun NE_18_24_26 () Int) +(assert (let ((?v_0 (array T_java_lang_String)) (?v_1 (array T_int))) (and (= (PO_LT T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ConstructorInvocation (asChild T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_VariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_VariableAccess (asChild T_javafe_ast_VariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ImportDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ImportDecl (asChild T_javafe_ast_ImportDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryCatchStmt (asChild T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_OperatorTags T_java_lang_Object) true_term) (= T_javafe_ast_OperatorTags (asChild T_javafe_ast_OperatorTags T_java_lang_Object)) (= (PO_LT T_javafe_ast_OperatorTags T_javafe_ast_GeneratedTags) true_term) (= (PO_LT T_javafe_ast_TagConstants T_javafe_ast_OperatorTags) true_term) (= T_javafe_ast_TagConstants (asChild T_javafe_ast_TagConstants T_javafe_ast_OperatorTags)) (= (PO_LT T_javafe_tc_FieldDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_FieldDeclVec (asChild T_javafe_tc_FieldDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_BlockStmt (asChild T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_RoutineDecl (asChild T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_Stmt T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Stmt (asChild T_javafe_ast_Stmt T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_Expr T_javafe_ast_VarInit) true_term) (= T_javafe_ast_Expr (asChild T_javafe_ast_Expr T_javafe_ast_VarInit)) (= (PO_LT T_javafe_ast_TypeDeclElem T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_ParenExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ParenExpr (asChild T_javafe_ast_ParenExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_Type T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Type (asChild T_javafe_ast_Type T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_EvalStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_EvalStmt (asChild T_javafe_ast_EvalStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_TypeObjectDesignator (asChild T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_java_lang_RuntimeException T_java_lang_Exception) true_term) (= T_java_lang_RuntimeException (asChild T_java_lang_RuntimeException T_java_lang_Exception)) (= (PO_LT T_javafe_ast_GeneratedTags T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_IfStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_IfStmt (asChild T_javafe_ast_IfStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ArrayInit T_javafe_ast_VarInit) true_term) (= T_javafe_ast_ArrayInit (asChild T_javafe_ast_ArrayInit T_javafe_ast_VarInit)) (= (PO_LT T_java_lang_Exception T_java_lang_Throwable) true_term) (= T_java_lang_Exception (asChild T_java_lang_Exception T_java_lang_Throwable)) (= (PO_LT T_java_util_Map T_java_lang_Object) true_term) (= (PO_LT T_java_util_Map T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_java_lang_Long T_java_lang_Number) true_term) (= T_java_lang_Long (asChild T_java_lang_Long T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Long) true_term) (= ?t T_java_lang_Long))) (= (PO_LT T_java_lang_Long T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_CondExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CondExpr (asChild T_javafe_ast_CondExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_util_Location T_java_lang_Object) true_term) (= T_javafe_util_Location (asChild T_javafe_util_Location T_java_lang_Object)) (= (PO_LT T_javafe_tc_MethodDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_MethodDeclVec (asChild T_javafe_tc_MethodDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_VarDeclStmt (asChild T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_MethodDecl (asChild T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_javafe_ast_TypeName T_javafe_ast_Type) true_term) (= T_javafe_ast_TypeName (asChild T_javafe_ast_TypeName T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_LiteralExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_LiteralExpr (asChild T_javafe_ast_LiteralExpr T_javafe_ast_Expr)) (= (PO_LT T_java_lang_Throwable T_java_lang_Object) true_term) (= T_java_lang_Throwable (asChild T_java_lang_Throwable T_java_lang_Object)) (= (PO_LT T_java_lang_Throwable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_ThrowStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ThrowStmt (asChild T_javafe_ast_ThrowStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_lang_Boolean T_java_lang_Object) true_term) (= T_java_lang_Boolean (asChild T_java_lang_Boolean T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Boolean) true_term) (= ?t T_java_lang_Boolean))) (= (PO_LT T_java_lang_Boolean T_java_io_Serializable) true_term) (= (PO_LT T_java_io_Serializable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_SkipStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SkipStmt (asChild T_javafe_ast_SkipStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_lang_Comparable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_LocalVarDecl (asChild T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ObjectDesignator (asChild T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_CastExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CastExpr (asChild T_javafe_ast_CastExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_WhileStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_WhileStmt (asChild T_javafe_ast_WhileStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeDecl (asChild T_javafe_ast_TypeDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_MethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_MethodInvocation (asChild T_javafe_ast_MethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_Identifier T_java_lang_Object) true_term) (= T_javafe_ast_Identifier (asChild T_javafe_ast_Identifier T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_javafe_ast_Identifier) true_term) (= ?t T_javafe_ast_Identifier))) (= (PO_LT T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewInstanceExpr (asChild T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr)) (= (PO_LT T_java_util_Hashtable T_java_util_Dictionary) true_term) (= T_java_util_Hashtable (asChild T_java_util_Hashtable T_java_util_Dictionary)) (= (PO_LT T_java_util_Hashtable T_java_util_Map) true_term) (= (PO_LT T_java_util_Hashtable T_java_lang_Cloneable) true_term) (= (PO_LT T_java_util_Hashtable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_tc_Env T_java_lang_Object) true_term) (= T_javafe_tc_Env (asChild T_javafe_tc_Env T_java_lang_Object)) (= (PO_LT T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_SingleTypeImportDecl (asChild T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_javafe_ast_Name T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Name (asChild T_javafe_ast_Name T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CompilationUnit (asChild T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_BreakStmt (asChild T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_java_lang_Number T_java_lang_Object) true_term) (= T_java_lang_Number (asChild T_java_lang_Number T_java_lang_Object)) (= (PO_LT T_java_lang_Number T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_VisitorArgResult T_java_lang_Object) true_term) (= T_javafe_ast_VisitorArgResult (asChild T_javafe_ast_VisitorArgResult T_java_lang_Object)) (= (PO_LT T_java_util_EscjavaKeyValue T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_GenericBlockStmt (asChild T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousVariableAccess (asChild T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FormalParaDecl (asChild T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryFinallyStmt (asChild T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_SuperObjectDesignator (asChild T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_UnaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_UnaryExpr (asChild T_javafe_ast_UnaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_InterfaceDecl (asChild T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SynchronizeStmt (asChild T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_lang_IndexOutOfBoundsException T_java_lang_RuntimeException) true_term) (= T_java_lang_IndexOutOfBoundsException (asChild T_java_lang_IndexOutOfBoundsException T_java_lang_RuntimeException)) (= (PO_LT T_javafe_ast_LabelStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_LabelStmt (asChild T_javafe_ast_LabelStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_CompoundName T_javafe_ast_Name) true_term) (= T_javafe_ast_CompoundName (asChild T_javafe_ast_CompoundName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_CatchClause T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CatchClause (asChild T_javafe_ast_CatchClause T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_FieldAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_FieldAccess (asChild T_javafe_ast_FieldAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_IdentifierVec T_java_lang_Object) true_term) (= T_javafe_ast_IdentifierVec (asChild T_javafe_ast_IdentifierVec T_java_lang_Object)) (= (PO_LT T_java_lang_Integer T_java_lang_Number) true_term) (= T_java_lang_Integer (asChild T_java_lang_Integer T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Integer) true_term) (= ?t T_java_lang_Integer))) (= (PO_LT T_java_lang_Integer T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_ExprVec T_java_lang_Object) true_term) (= T_javafe_ast_ExprVec (asChild T_javafe_ast_ExprVec T_java_lang_Object)) (= (PO_LT T_javafe_tc_TagConstants T_javafe_parser_TagConstants) true_term) (= T_javafe_tc_TagConstants (asChild T_javafe_tc_TagConstants T_javafe_parser_TagConstants)) (= (PO_LT T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_ConstructorDecl (asChild T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_SwitchStmt (asChild T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_parser_TagConstants T_javafe_ast_TagConstants) true_term) (= T_javafe_parser_TagConstants (asChild T_javafe_parser_TagConstants T_javafe_ast_TagConstants)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Object) true_term) (= T_javafe_ast_ASTNode (asChild T_javafe_ast_ASTNode T_java_lang_Object)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Cloneable) true_term) (= (PO_LT T_java_lang_Double T_java_lang_Number) true_term) (= T_java_lang_Double (asChild T_java_lang_Double T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Double) true_term) (= ?t T_java_lang_Double))) (= (PO_LT T_java_lang_Double T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_PrimitiveType T_javafe_ast_Type) true_term) (= T_javafe_ast_PrimitiveType (asChild T_javafe_ast_PrimitiveType T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_ReturnStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ReturnStmt (asChild T_javafe_ast_ReturnStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_lang_Float T_java_lang_Number) true_term) (= T_java_lang_Float (asChild T_java_lang_Float T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Float) true_term) (= ?t T_java_lang_Float))) (= (PO_LT T_java_lang_Float T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_ThisExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ThisExpr (asChild T_javafe_ast_ThisExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_VarInit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_VarInit (asChild T_javafe_ast_VarInit T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_ExprObjectDesignator (asChild T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_java_util_Dictionary T_java_lang_Object) true_term) (= T_java_util_Dictionary (asChild T_java_util_Dictionary T_java_lang_Object)) (= (PO_LT T_java_util_Dictionary T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_javafe_ast_ForStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ForStmt (asChild T_javafe_ast_ForStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_InstanceOfExpr (asChild T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_GenericVarDecl (asChild T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_OnDemandImportDecl (asChild T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ClassDeclStmt (asChild T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_tc_TypeSig T_javafe_ast_Type) true_term) (= T_javafe_tc_TypeSig (asChild T_javafe_tc_TypeSig T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_InitBlock (asChild T_javafe_ast_InitBlock T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ArrayRefExpr (asChild T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ArrayType T_javafe_ast_Type) true_term) (= T_javafe_ast_ArrayType (asChild T_javafe_ast_ArrayType T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_BranchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_BranchStmt (asChild T_javafe_ast_BranchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ASTDecoration T_java_lang_Object) true_term) (= T_javafe_ast_ASTDecoration (asChild T_javafe_ast_ASTDecoration T_java_lang_Object)) (= (PO_LT T_javafe_ast_VarInitVec T_java_lang_Object) true_term) (= T_javafe_ast_VarInitVec (asChild T_javafe_ast_VarInitVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_Visitor T_java_lang_Object) true_term) (= T_javafe_ast_Visitor (asChild T_javafe_ast_Visitor T_java_lang_Object)) (= (PO_LT T_javafe_ast_SwitchLabel T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SwitchLabel (asChild T_javafe_ast_SwitchLabel T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FieldDecl (asChild T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_BinaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_BinaryExpr (asChild T_javafe_ast_BinaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_ClassDecl (asChild T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_ClassLiteral T_javafe_ast_Expr) true_term) (= T_javafe_ast_ClassLiteral (asChild T_javafe_ast_ClassLiteral T_javafe_ast_Expr)) (= (PO_LT T_java_lang_String T_java_lang_Object) true_term) (= T_java_lang_String (asChild T_java_lang_String T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_String) true_term) (= ?t T_java_lang_String))) (= (PO_LT T_java_lang_String T_java_io_Serializable) true_term) (= (PO_LT T_java_lang_String T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_DoStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_DoStmt (asChild T_javafe_ast_DoStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_NewArrayExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewArrayExpr (asChild T_javafe_ast_NewArrayExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousMethodInvocation (asChild T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_ContinueStmt (asChild T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_javafe_ast_SimpleName T_javafe_ast_Name) true_term) (= T_javafe_ast_SimpleName (asChild T_javafe_ast_SimpleName T_javafe_ast_Name)) (and (= arrayType (+ DIST_ZERO_1 0)) (= T_boolean (+ DIST_ZERO_1 1)) (= T_char (+ DIST_ZERO_1 2)) (= T_byte (+ DIST_ZERO_1 3)) (= T_short (+ DIST_ZERO_1 4)) (= T_int (+ DIST_ZERO_1 5)) (= T_long (+ DIST_ZERO_1 6)) (= T_float (+ DIST_ZERO_1 7)) (= T_double (+ DIST_ZERO_1 8)) (= T__TYPE (+ DIST_ZERO_1 9)) (= T_javafe_ast_ConstructorInvocation (+ DIST_ZERO_1 10)) (= T_javafe_ast_VariableAccess (+ DIST_ZERO_1 11)) (= T_javafe_ast_ImportDecl (+ DIST_ZERO_1 12)) (= T_javafe_ast_TryCatchStmt (+ DIST_ZERO_1 13)) (= T_javafe_ast_OperatorTags (+ DIST_ZERO_1 14)) (= T_javafe_ast_TagConstants (+ DIST_ZERO_1 15)) (= T_javafe_tc_FieldDeclVec (+ DIST_ZERO_1 16)) (= T_javafe_ast_BlockStmt (+ DIST_ZERO_1 17)) (= T_javafe_ast_RoutineDecl (+ DIST_ZERO_1 18)) (= T_javafe_ast_Stmt (+ DIST_ZERO_1 19)) (= T_javafe_ast_Expr (+ DIST_ZERO_1 20)) (= T_javafe_ast_TypeDeclElem (+ DIST_ZERO_1 21)) (= T_javafe_ast_ParenExpr (+ DIST_ZERO_1 22)) (= T_javafe_ast_Type (+ DIST_ZERO_1 23)) (= T_javafe_ast_EvalStmt (+ DIST_ZERO_1 24)) (= T_javafe_ast_TypeObjectDesignator (+ DIST_ZERO_1 25)) (= T_java_lang_RuntimeException (+ DIST_ZERO_1 26)) (= T_javafe_ast_GeneratedTags (+ DIST_ZERO_1 27)) (= T_javafe_ast_IfStmt (+ DIST_ZERO_1 28)) (= T_javafe_ast_ArrayInit (+ DIST_ZERO_1 29)) (= T_java_lang_Exception (+ DIST_ZERO_1 30)) (= T_java_util_Map (+ DIST_ZERO_1 31)) (= T_java_lang_Long (+ DIST_ZERO_1 32)) (= T_javafe_ast_CondExpr (+ DIST_ZERO_1 33)) (= T_javafe_util_Location (+ DIST_ZERO_1 34)) (= T_javafe_tc_MethodDeclVec (+ DIST_ZERO_1 35)) (= T_javafe_ast_VarDeclStmt (+ DIST_ZERO_1 36)) (= T_javafe_ast_MethodDecl (+ DIST_ZERO_1 37)) (= T_javafe_ast_TypeName (+ DIST_ZERO_1 38)) (= T_javafe_ast_LiteralExpr (+ DIST_ZERO_1 39)) (= T_java_lang_Throwable (+ DIST_ZERO_1 40)) (= T_javafe_ast_ThrowStmt (+ DIST_ZERO_1 41)) (= T_java_lang_Boolean (+ DIST_ZERO_1 42)) (= T_java_io_Serializable (+ DIST_ZERO_1 43)) (= T_javafe_ast_SkipStmt (+ DIST_ZERO_1 44)) (= T_java_lang_Comparable (+ DIST_ZERO_1 45)) (= T_javafe_ast_LocalVarDecl (+ DIST_ZERO_1 46)) (= T_javafe_ast_ObjectDesignator (+ DIST_ZERO_1 47)) (= T_javafe_ast_CastExpr (+ DIST_ZERO_1 48)) (= T_javafe_ast_WhileStmt (+ DIST_ZERO_1 49)) (= T_javafe_ast_TypeDecl (+ DIST_ZERO_1 50)) (= T_javafe_ast_MethodInvocation (+ DIST_ZERO_1 51)) (= T_java_lang_Cloneable (+ DIST_ZERO_1 52)) (= T_javafe_ast_Identifier (+ DIST_ZERO_1 53)) (= T_javafe_ast_NewInstanceExpr (+ DIST_ZERO_1 54)) (= T_java_lang_Object (+ DIST_ZERO_1 55)) (= T_java_util_Hashtable (+ DIST_ZERO_1 56)) (= T_javafe_tc_Env (+ DIST_ZERO_1 57)) (= T_javafe_ast_SingleTypeImportDecl (+ DIST_ZERO_1 58)) (= T_javafe_ast_Name (+ DIST_ZERO_1 59)) (= T_javafe_ast_CompilationUnit (+ DIST_ZERO_1 60)) (= T_javafe_ast_BreakStmt (+ DIST_ZERO_1 61)) (= T_java_lang_Number (+ DIST_ZERO_1 62)) (= T_javafe_ast_VisitorArgResult (+ DIST_ZERO_1 63)) (= T_java_util_EscjavaKeyValue (+ DIST_ZERO_1 64)) (= T_javafe_ast_GenericBlockStmt (+ DIST_ZERO_1 65)) (= T_javafe_ast_AmbiguousVariableAccess (+ DIST_ZERO_1 66)) (= T_javafe_ast_FormalParaDecl (+ DIST_ZERO_1 67)) (= T_javafe_ast_TryFinallyStmt (+ DIST_ZERO_1 68)) (= T_javafe_ast_SuperObjectDesignator (+ DIST_ZERO_1 69)) (= T_javafe_ast_UnaryExpr (+ DIST_ZERO_1 70)) (= T_javafe_ast_InterfaceDecl (+ DIST_ZERO_1 71)) (= T_javafe_ast_SynchronizeStmt (+ DIST_ZERO_1 72)) (= T_java_lang_IndexOutOfBoundsException (+ DIST_ZERO_1 73)) (= T_javafe_ast_LabelStmt (+ DIST_ZERO_1 74)) (= T_javafe_ast_CompoundName (+ DIST_ZERO_1 75)) (= T_javafe_ast_CatchClause (+ DIST_ZERO_1 76)) (= T_javafe_ast_FieldAccess (+ DIST_ZERO_1 77)) (= T_javafe_ast_IdentifierVec (+ DIST_ZERO_1 78)) (= T_java_lang_Integer (+ DIST_ZERO_1 79)) (= T_javafe_ast_ExprVec (+ DIST_ZERO_1 80)) (= T_javafe_tc_TagConstants (+ DIST_ZERO_1 81)) (= T_javafe_ast_ConstructorDecl (+ DIST_ZERO_1 82)) (= T_javafe_ast_SwitchStmt (+ DIST_ZERO_1 83)) (= T_javafe_parser_TagConstants (+ DIST_ZERO_1 84)) (= T_javafe_ast_ASTNode (+ DIST_ZERO_1 85)) (= T_java_lang_Double (+ DIST_ZERO_1 86)) (= T_javafe_ast_PrimitiveType (+ DIST_ZERO_1 87)) (= T_javafe_ast_ReturnStmt (+ DIST_ZERO_1 88)) (= T_java_lang_Float (+ DIST_ZERO_1 89)) (= T_javafe_ast_ThisExpr (+ DIST_ZERO_1 90)) (= T_javafe_ast_VarInit (+ DIST_ZERO_1 91)) (= T_javafe_ast_ExprObjectDesignator (+ DIST_ZERO_1 92)) (= T_java_util_Dictionary (+ DIST_ZERO_1 93)) (= T_javafe_ast_ForStmt (+ DIST_ZERO_1 94)) (= T_javafe_ast_InstanceOfExpr (+ DIST_ZERO_1 95)) (= T_javafe_ast_GenericVarDecl (+ DIST_ZERO_1 96)) (= T_javafe_ast_OnDemandImportDecl (+ DIST_ZERO_1 97)) (= T_javafe_ast_ClassDeclStmt (+ DIST_ZERO_1 98)) (= T_javafe_tc_TypeSig (+ DIST_ZERO_1 99)) (= T_javafe_ast_InitBlock (+ DIST_ZERO_1 100)) (= T_javafe_ast_ArrayRefExpr (+ DIST_ZERO_1 101)) (= T_javafe_ast_ArrayType (+ DIST_ZERO_1 102)) (= T_javafe_ast_BranchStmt (+ DIST_ZERO_1 103)) (= T_javafe_ast_ASTDecoration (+ DIST_ZERO_1 104)) (= T_javafe_ast_VarInitVec (+ DIST_ZERO_1 105)) (= T_javafe_ast_Visitor (+ DIST_ZERO_1 106)) (= T_javafe_ast_SwitchLabel (+ DIST_ZERO_1 107)) (= T_javafe_ast_FieldDecl (+ DIST_ZERO_1 108)) (= T_javafe_ast_BinaryExpr (+ DIST_ZERO_1 109)) (= T_javafe_ast_ClassDecl (+ DIST_ZERO_1 110)) (= T_javafe_ast_ClassLiteral (+ DIST_ZERO_1 111)) (= T_java_lang_String (+ DIST_ZERO_1 112)) (= T_javafe_ast_DoStmt (+ DIST_ZERO_1 113)) (= T_javafe_ast_NewArrayExpr (+ DIST_ZERO_1 114)) (= T_javafe_ast_AmbiguousMethodInvocation (+ DIST_ZERO_1 115)) (= T_javafe_ast_ContinueStmt (+ DIST_ZERO_1 116)) (= T_javafe_ast_SimpleName (+ DIST_ZERO_1 117))) (= true_term (is TRYCATCHSTMT_19_43_7 T_int)) (= TRYCATCHSTMT_19_43_7 29) (= true_term (is UNARYSUB_18_55_26 T_int)) (= UNARYSUB_18_55_26 86) (= true_term (is TYPEDECLELEMPRAGMA_29_27_26 T_int)) (= TYPEDECLELEMPRAGMA_29_27_26 117) (= true_term (is SHORTTYPE_17_36_26 T_int)) (= SHORTTYPE_17_36_26 103) (= true_term (is WHILESTMT_19_29_7 T_int)) (= WHILESTMT_19_29_7 15) (= true_term (is STAR_18_37_26 T_int)) (= STAR_18_37_26 72) (= true_term (is VARIABLEACCESS_19_56_7 T_int)) (= VARIABLEACCESS_19_56_7 42) (= true_term (is SINGLETYPEIMPORTDECL_19_15_7 T_int)) (= SINGLETYPEIMPORTDECL_19_15_7 1) (= true_term (is BITAND_18_23_26 T_int)) (= BITAND_18_23_26 58) (= true_term (is TRYFINALLYSTMT_19_42_7 T_int)) (= TRYFINALLYSTMT_19_42_7 28) (= true_term (is UNARYADD_18_54_26 T_int)) (= UNARYADD_18_54_26 85) (= true_term (is BYTETYPE_17_35_26 T_int)) (= BYTETYPE_17_35_26 102) (= true_term (is CLASSDECLSTMT_19_28_7 T_int)) (= CLASSDECLSTMT_19_28_7 14) (= true_term (is MOD_18_36_26 T_int)) (= MOD_18_36_26 71) (= true_term (is STMTPRAGMA_29_26_26 T_int)) (= STMTPRAGMA_29_26_26 116) (= true_term (is AMBIGUOUSVARIABLEACCESS_19_55_7 T_int)) (= AMBIGUOUSVARIABLEACCESS_19_55_7 41) (= true_term (is COMPILATIONUNIT_19_14_7 T_int)) (= COMPILATIONUNIT_19_14_7 0) (= true_term (is BITXOR_18_22_26 T_int)) (= BITXOR_18_22_26 57) (= true_term (is SWITCHLABEL_19_41_7 T_int)) (= SWITCHLABEL_19_41_7 27) (= true_term (is ASGBITXOR_18_51_26 T_int)) (= ASGBITXOR_18_51_26 84) (= true_term (is punctuationStrings_29_134_22 ?v_0)) (not (= punctuationStrings_29_134_22 null)) (= (typeof punctuationStrings_29_134_22) ?v_0) (= (arrayLength punctuationStrings_29_134_22) 48) (= true_term (is NULLTYPE_17_34_26 T_int)) (= NULLTYPE_17_34_26 101) (= true_term (is VARDECLSTMT_19_27_7 T_int)) (= VARDECLSTMT_19_27_7 13) (= true_term (is DIV_18_35_26 T_int)) (= DIV_18_35_26 70) (= true_term (is otherStrings_29_193_30 ?v_0)) (not (= otherStrings_29_193_30 null)) (= (typeof otherStrings_29_193_30) ?v_0) (= (arrayLength otherStrings_29_193_30) 15) (= true_term (is PARENEXPR_19_54_7 T_int)) (= PARENEXPR_19_54_7 40) (= true_term (is BITOR_18_21_26 T_int)) (= BITOR_18_21_26 56) (= true_term (is MODIFIERPRAGMA_29_25_26 T_int)) (= MODIFIERPRAGMA_29_25_26 115) (= true_term (is noTokens_29_212_27 T_int)) (= true_term (is SKIPSTMT_19_40_7 T_int)) (= SKIPSTMT_19_40_7 26) (= true_term (is ASGBITOR_18_50_26 T_int)) (= ASGBITOR_18_50_26 83) (= true_term (is COMPOUNDNAME_19_67_7 T_int)) (= COMPOUNDNAME_19_67_7 53) (= true_term (is VOIDTYPE_17_33_26 T_int)) (= VOIDTYPE_17_33_26 100) (= true_term (is SWITCHSTMT_19_26_7 T_int)) (= SWITCHSTMT_19_26_7 12) (= true_term (is SUB_18_34_26 T_int)) (= SUB_18_34_26 69) (= true_term (is CASTEXPR_19_53_7 T_int)) (= CASTEXPR_19_53_7 39) (= true_term (is TYPESIG_28_6_28 T_int)) (= TYPESIG_28_6_28 184) (= true_term (is FORSTMT_19_39_7 T_int)) (= FORSTMT_19_39_7 25) (= true_term (is LEXICALPRAGMA_29_24_26 T_int)) (= LEXICALPRAGMA_29_24_26 114) (= true_term (is ASGBITAND_18_49_26 T_int)) (= ASGBITAND_18_49_26 82) (= true_term (is SIMPLENAME_19_66_7 T_int)) (= SIMPLENAME_19_66_7 52) (= true_term (is DOUBLETYPE_17_32_26 T_int)) (= DOUBLETYPE_17_32_26 99) (= true_term (is BLOCKSTMT_19_25_7 T_int)) (= BLOCKSTMT_19_25_7 11) (= true_term (is ADD_18_33_26 T_int)) (= ADD_18_33_26 68) (= true_term (is FIRST_KEYWORD_29_51_26 T_int)) (= FIRST_KEYWORD_29_51_26 133) (= true_term (is INSTANCEOFEXPR_19_52_7 T_int)) (= INSTANCEOFEXPR_19_52_7 38) (= true_term (is AND_18_20_26 T_int)) (= AND_18_20_26 55) (= true_term (is IFSTMT_19_38_7 T_int)) (= IFSTMT_19_38_7 24) (= true_term (is LAST_KEYWORD_29_103_26 T_int)) (= LAST_KEYWORD_29_103_26 183) (= true_term (is ASGURSHIFT_18_48_26 T_int)) (= ASGURSHIFT_18_48_26 81) (= true_term (is ARRAYTYPE_19_65_7 T_int)) (= ARRAYTYPE_19_65_7 51) (= true_term (is FORMALPARADECL_19_24_7 T_int)) (= FORMALPARADECL_19_24_7 10) (= true_term (is FLOATTYPE_17_31_26 T_int)) (= FLOATTYPE_17_31_26 98) (= true_term (is URSHIFT_18_32_26 T_int)) (= URSHIFT_18_32_26 67) (= true_term (is CONDEXPR_19_51_7 T_int)) (= CONDEXPR_19_51_7 37) (= true_term (is OR_18_19_26 T_int)) (= OR_18_19_26 54) (= true_term (is LABELSTMT_19_37_7 T_int)) (= LABELSTMT_19_37_7 23) (= true_term (is NULLLIT_17_45_26 T_int)) (= NULLLIT_17_45_26 111) (= true_term (is ASGRSHIFT_18_47_26 T_int)) (= ASGRSHIFT_18_47_26 80) (= true_term (is NULL_29_82_26 T_int)) (= NULL_29_82_26 163) (= true_term (is TYPENAME_19_64_7 T_int)) (= TYPENAME_19_64_7 50) (= true_term (is CHARTYPE_17_30_26 T_int)) (= CHARTYPE_17_30_26 97) (= true_term (is FIELDDECL_19_23_7 T_int)) (= FIELDDECL_19_23_7 9) (= true_term (is RSHIFT_18_31_26 T_int)) (= RSHIFT_18_31_26 66) (= true_term (is NEWARRAYEXPR_19_50_7 T_int)) (= NEWARRAYEXPR_19_50_7 36) (= true_term (is CONTINUESTMT_19_36_7 T_int)) (= CONTINUESTMT_19_36_7 22) (= true_term (is STRINGLIT_17_44_26 T_int)) (= STRINGLIT_17_44_26 110) (= true_term (is ASGLSHIFT_18_46_26 T_int)) (= ASGLSHIFT_18_46_26 79) (= true_term (is SUPEROBJECTDESIGNATOR_19_63_7 T_int)) (= SUPEROBJECTDESIGNATOR_19_63_7 49) (= true_term (is LONGTYPE_17_29_26 T_int)) (= LONGTYPE_17_29_26 96) (= true_term (is LOCALVARDECL_19_22_7 T_int)) (= LOCALVARDECL_19_22_7 8) (= true_term (is LSHIFT_18_30_26 T_int)) (= LSHIFT_18_30_26 65) (= true_term (is NEWINSTANCEEXPR_19_49_7 T_int)) (= NEWINSTANCEEXPR_19_49_7 35) (= true_term (is POSTFIXDEC_18_63_26 T_int)) (= POSTFIXDEC_18_63_26 92) (= true_term (is BREAKSTMT_19_35_7 T_int)) (= BREAKSTMT_19_35_7 21) (= true_term (is DOUBLELIT_17_43_26 T_int)) (= DOUBLELIT_17_43_26 109) (= true_term (is ASGSUB_18_45_26 T_int)) (= ASGSUB_18_45_26 78) (= true_term (is TYPEOBJECTDESIGNATOR_19_62_7 T_int)) (= TYPEOBJECTDESIGNATOR_19_62_7 48) (= true_term (is INTTYPE_17_28_26 T_int)) (= INTTYPE_17_28_26 95) (= true_term (is INITBLOCK_19_21_7 T_int)) (= INITBLOCK_19_21_7 7) (= true_term (is LT_18_29_26 T_int)) (= LT_18_29_26 64) (= true_term (is ARRAYREFEXPR_19_48_7 T_int)) (= ARRAYREFEXPR_19_48_7 34) (= true_term (is POSTFIXINC_18_62_26 T_int)) (= POSTFIXINC_18_62_26 91) (= true_term (is THROWSTMT_19_34_7 T_int)) (= THROWSTMT_19_34_7 20) (= true_term (is FLOATLIT_17_42_26 T_int)) (= FLOATLIT_17_42_26 108) (= true_term (is ASGADD_18_44_26 T_int)) (= ASGADD_18_44_26 77) (= true_term (is EXPROBJECTDESIGNATOR_19_61_7 T_int)) (= EXPROBJECTDESIGNATOR_19_61_7 47) (= true_term (is otherCodes_29_202_27 ?v_1)) (not (= otherCodes_29_202_27 null)) (= (typeof otherCodes_29_202_27) ?v_1) (= (arrayLength otherCodes_29_202_27) 15) (= true_term (is BOOLEANTYPE_17_27_26 T_int)) (= BOOLEANTYPE_17_27_26 94) (= true_term (is METHODDECL_19_20_7 T_int)) (= METHODDECL_19_20_7 6) (= true_term (is LE_18_28_26 T_int)) (= LE_18_28_26 63) (= true_term (is THISEXPR_19_47_7 T_int)) (= THISEXPR_19_47_7 33) (= true_term (is DEC_18_59_26 T_int)) (= DEC_18_59_26 90) (= true_term (is CHARLIT_17_41_26 T_int)) (= CHARLIT_17_41_26 107) (= true_term (is RETURNSTMT_19_33_7 T_int)) (= RETURNSTMT_19_33_7 19) (= true_term (is punctuationCodes_29_164_19 ?v_1)) (not (= punctuationCodes_29_164_19 null)) (= (typeof punctuationCodes_29_164_19) ?v_1) (= (arrayLength punctuationCodes_29_164_19) 48) (= true_term (is ASGREM_18_43_26 T_int)) (= ASGREM_18_43_26 76) (= true_term (is CLASSLITERAL_19_60_7 T_int)) (= CLASSLITERAL_19_60_7 46) (= true_term (is IDENT_17_25_26 T_int)) (= IDENT_17_25_26 93) (= true_term (is CONSTRUCTORDECL_19_19_7 T_int)) (= CONSTRUCTORDECL_19_19_7 5) (= true_term (is GT_18_27_26 T_int)) (= GT_18_27_26 62) (= true_term (is ARRAYINIT_19_46_7 T_int)) (= ARRAYINIT_19_46_7 32) (= true_term (is INC_18_58_26 T_int)) (= INC_18_58_26 89) (= true_term (is LONGLIT_17_40_26 T_int)) (= LONGLIT_17_40_26 106) (= true_term (is EVALSTMT_19_32_7 T_int)) (= EVALSTMT_19_32_7 18) (= true_term (is ASGDIV_18_42_26 T_int)) (= ASGDIV_18_42_26 75) (= true_term (is METHODINVOCATION_19_59_7 T_int)) (= METHODINVOCATION_19_59_7 45) (= true_term (is INTERFACEDECL_19_18_7 T_int)) (= INTERFACEDECL_19_18_7 4) (= true_term (is GE_18_26_26 T_int)) (= GE_18_26_26 61) (= true_term (is CATCHCLAUSE_19_45_7 T_int)) (= CATCHCLAUSE_19_45_7 31) (= true_term (is BITNOT_18_57_26 T_int)) (= BITNOT_18_57_26 88) (= true_term (is keywordStrings_29_181_30 ?v_0)) (not (= keywordStrings_29_181_30 null)) (= (typeof keywordStrings_29_181_30) ?v_0) (= (arrayLength keywordStrings_29_181_30) 51) (= true_term (is NULL_13_60_26 T_int)) (= NULL_13_60_26 0) (= true_term (is SYNCHRONIZESTMT_19_31_7 T_int)) (= SYNCHRONIZESTMT_19_31_7 17) (= true_term (is INTLIT_17_39_26 T_int)) (= INTLIT_17_39_26 105) (= true_term (is ASGMUL_18_41_26 T_int)) (= ASGMUL_18_41_26 74) (= true_term (is AMBIGUOUSMETHODINVOCATION_19_58_7 T_int)) (= AMBIGUOUSMETHODINVOCATION_19_58_7 44) (= true_term (is CLASSDECL_19_17_7 T_int)) (= CLASSDECL_19_17_7 3) (= true_term (is EQ_18_25_26 T_int)) (= EQ_18_25_26 60) (= true_term (is TYPEMODIFIERPRAGMA_29_28_26 T_int)) (= TYPEMODIFIERPRAGMA_29_28_26 118) (= true_term (is CONSTRUCTORINVOCATION_19_44_7 T_int)) (= CONSTRUCTORINVOCATION_19_44_7 30) (= true_term (is NOT_18_56_26 T_int)) (= NOT_18_56_26 87) (= true_term (is BOOLEANLIT_17_38_26 T_int)) (= BOOLEANLIT_17_38_26 104) (= true_term (is DOSTMT_19_30_7 T_int)) (= DOSTMT_19_30_7 16) (= true_term (is ASSIGN_18_40_26 T_int)) (= ASSIGN_18_40_26 73) (= true_term (is FIELDACCESS_19_57_7 T_int)) (= FIELDACCESS_19_57_7 43) (= true_term (is ONDEMANDIMPORTDECL_19_16_7 T_int)) (= ONDEMANDIMPORTDECL_19_16_7 2) (= true_term (is NE_18_24_26 T_int)) (= NE_18_24_26 59)))) +(declare-fun locOpenBrace_pre_80_36_13 () Int) +(declare-fun locOpenBrace_80_36_13 () Int) +(declare-fun TRYCATCHSTMT_pre_19_43_7 () Int) +(declare-fun UNARYSUB_pre_18_55_26 () Int) +(declare-fun TYPEDECLELEMPRAGMA_pre_29_27_26 () Int) +(declare-fun SHORTTYPE_pre_17_36_26 () Int) +(declare-fun WHILESTMT_pre_19_29_7 () Int) +(declare-fun body_pre_80_34_19 () Int) +(declare-fun body_80_34_19 () Int) +(declare-fun STAR_pre_18_37_26 () Int) +(declare-fun elems_pre_18_34 () Int) +(declare-fun elems_18_34 () Int) +(declare-fun enclosingInstance_pre_122_25_14 () Int) +(declare-fun enclosingInstance_122_25_14 () Int) +(declare-fun loc_pre_110_18_13 () Int) +(declare-fun loc_110_18_13 () Int) +(declare-fun elements_pre_124_61_33 () Int) +(declare-fun elements_124_61_33 () Int) +(declare-fun loc_pre_122_49_13 () Int) +(declare-fun loc_122_49_13 () Int) +(declare-fun VARIABLEACCESS_pre_19_56_7 () Int) +(declare-fun SINGLETYPEIMPORTDECL_pre_19_15_7 () Int) +(declare-fun BITAND_pre_18_23_26 () Int) +(declare-fun locCloseBrace_pre_90_25_13 () Int) +(declare-fun locCloseBrace_90_25_13 () Int) +(declare-fun loc_pre_139_20_13 () Int) +(declare-fun loc_139_20_13 () Int) +(declare-fun TRYFINALLYSTMT_pre_19_42_7 () Int) +(declare-fun UNARYADD_pre_18_54_26 () Int) +(declare-fun locFirstSemi_pre_114_36_13 () Int) +(declare-fun locFirstSemi_114_36_13 () Int) +(declare-fun elemType_pre_138_18_28 () Int) +(declare-fun elemType_138_18_28 () Int) +(declare-fun BYTETYPE_pre_17_35_26 () Int) +(declare-fun CLASSDECLSTMT_pre_19_28_7 () Int) +(declare-fun MOD_pre_18_36_26 () Int) +(declare-fun STMTPRAGMA_pre_29_26_26 () Int) +(declare-fun op_pre_26_26_13 () Int) +(declare-fun op_26_26_13 () Int) +(declare-fun init_pre_123_35_19 () Int) +(declare-fun init_123_35_19 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_pre_19_55_7 () Int) +(declare-fun COMPILATIONUNIT_pre_19_14_7 () Int) +(declare-fun BITXOR_pre_18_22_26 () Int) +(declare-fun locCloseParen_pre_127_24_13 () Int) +(declare-fun locCloseParen_127_24_13 () Int) +(declare-fun locKeyword_pre_119_45_13 () Int) +(declare-fun locKeyword_119_45_13 () Int) +(declare-fun SWITCHLABEL_pre_19_41_7 () Int) +(declare-fun ASGBITXOR_pre_18_51_26 () Int) +(declare-fun punctuationStrings_pre_29_134_22 () Int) +(declare-fun locOpenParen_pre_105_23_13 () Int) +(declare-fun locOpenParen_105_23_13 () Int) +(declare-fun tag_pre_27_30_13 () Int) +(declare-fun tag_27_30_13 () Int) +(declare-fun loc_pre_62_45_13 () Int) +(declare-fun loc_62_45_13 () Int) +(declare-fun loc_pre_93_18_13 () Int) +(declare-fun loc_93_18_13 () Int) +(declare-fun elements_pre_14_61_36 () Int) +(declare-fun elements_14_61_36 () Int) +(declare-fun NULLTYPE_pre_17_34_26 () Int) +(declare-fun VARDECLSTMT_pre_19_27_7 () Int) +(declare-fun DIV_pre_18_35_26 () Int) +(declare-fun locOpenParen_pre_128_18_13 () Int) +(declare-fun locOpenParen_128_18_13 () Int) +(declare-fun type_pre_126_18_28 () Int) +(declare-fun type_126_18_28 () Int) +(declare-fun count_pre_124_67_33 () Int) +(declare-fun count_124_67_33 () Int) +(declare-fun otherStrings_pre_29_193_30 () Int) +(declare-fun loc_pre_23_50_13 () Int) +(declare-fun loc_23_50_13 () Int) +(declare-fun PARENEXPR_pre_19_54_7 () Int) +(declare-fun loc_pre_83_29_13 () Int) +(declare-fun loc_83_29_13 () Int) +(declare-fun BITOR_pre_18_21_26 () Int) +(declare-fun loc_pre_100_18_13 () Int) +(declare-fun loc_100_18_13 () Int) +(declare-fun MODIFIERPRAGMA_pre_29_25_26 () Int) +(declare-fun noTokens_pre_29_212_27 () Int) +(declare-fun tag_pre_23_32_13 () Int) +(declare-fun tag_23_32_13 () Int) +(declare-fun SKIPSTMT_pre_19_40_7 () Int) +(declare-fun ASGBITOR_pre_18_50_26 () Int) +(declare-fun loc_pre_118_23_13 () Int) +(declare-fun loc_118_23_13 () Int) +(declare-fun superCall_pre_119_24_17 () Int) +(declare-fun superCall_119_24_17 () Int) +(declare-fun locQuestion_pre_125_22_13 () Int) +(declare-fun locQuestion_125_22_13 () Int) +(declare-fun COMPOUNDNAME_pre_19_67_7 () Int) +(declare-fun VOIDTYPE_pre_17_33_26 () Int) +(declare-fun SWITCHSTMT_pre_19_26_7 () Int) +(declare-fun SUB_pre_18_34_26 () Int) +(declare-fun locDot_pre_84_21_13 () Int) +(declare-fun locDot_84_21_13 () Int) +(declare-fun CASTEXPR_pre_19_53_7 () Int) +(declare-fun locSuper_pre_137_20_13 () Int) +(declare-fun locSuper_137_20_13 () Int) +(declare-fun TYPESIG_pre_28_6_28 () Int) +(declare-fun FORSTMT_pre_19_39_7 () Int) +(declare-fun count_pre_14_67_33 () Int) +(declare-fun count_14_67_33 () Int) +(declare-fun locOpenBrace_pre_90_22_13 () Int) +(declare-fun locOpenBrace_90_22_13 () Int) +(declare-fun LEXICALPRAGMA_pre_29_24_26 () Int) +(declare-fun ASGBITAND_pre_18_49_26 () Int) +(declare-fun locDot_pre_133_23_13 () Int) +(declare-fun locDot_133_23_13 () Int) +(declare-fun SIMPLENAME_pre_19_66_7 () Int) +(declare-fun DOUBLETYPE_pre_17_32_26 () Int) +(declare-fun BLOCKSTMT_pre_19_25_7 () Int) +(declare-fun locId_pre_112_20_13 () Int) +(declare-fun locId_112_20_13 () Int) +(declare-fun ADD_pre_18_33_26 () Int) +(declare-fun locId_pre_80_43_13 () Int) +(declare-fun locId_80_43_13 () Int) +(declare-fun FIRST_KEYWORD_pre_29_51_26 () Int) +(declare-fun INSTANCEOFEXPR_pre_19_52_7 () Int) +(declare-fun loc_pre_113_22_13 () Int) +(declare-fun loc_113_22_13 () Int) +(declare-fun AND_pre_18_20_26 () Int) +(declare-fun locId_pre_77_38_13 () Int) +(declare-fun locId_77_38_13 () Int) +(declare-fun IFSTMT_pre_19_38_7 () Int) +(declare-fun LAST_KEYWORD_pre_29_103_26 () Int) +(declare-fun ASGURSHIFT_pre_18_48_26 () Int) +(declare-fun locOpenParen_pre_127_21_13 () Int) +(declare-fun locOpenParen_127_21_13 () Int) +(declare-fun locDot_pre_119_41_13 () Int) +(declare-fun locDot_119_41_13 () Int) +(declare-fun loc_pre_114_33_13 () Int) +(declare-fun loc_114_33_13 () Int) +(declare-fun ARRAYTYPE_pre_19_65_7 () Int) +(declare-fun locFinally_pre_117_25_13 () Int) +(declare-fun locFinally_117_25_13 () Int) +(declare-fun FORMALPARADECL_pre_19_24_7 () Int) +(declare-fun FLOATTYPE_pre_17_31_26 () Int) +(declare-fun URSHIFT_pre_18_32_26 () Int) +(declare-fun locOpenParen_pre_132_28_13 () Int) +(declare-fun locOpenParen_132_28_13 () Int) +(declare-fun locOp_pre_25_43_13 () Int) +(declare-fun locOp_25_43_13 () Int) +(declare-fun value_pre_23_45_16 () Int) +(declare-fun value_23_45_16 () Int) +(declare-fun locId_pre_130_24_13 () Int) +(declare-fun locId_130_24_13 () Int) +(declare-fun CONDEXPR_pre_19_51_7 () Int) +(declare-fun elements_pre_140_61_39 () Int) +(declare-fun elements_140_61_39 () Int) +(declare-fun locCloseBrace_pre_24_13 () Int) +(declare-fun locCloseBrace_24_13 () Int) +(declare-fun OR_pre_18_19_26 () Int) +(declare-fun LABELSTMT_pre_19_37_7 () Int) +(declare-fun NULLLIT_pre_17_45_26 () Int) +(declare-fun ASGRSHIFT_pre_18_47_26 () Int) +(declare-fun locGuardOpenParen_pre_103_23_13 () Int) +(declare-fun locGuardOpenParen_103_23_13 () Int) +(declare-fun elements_pre_73_61_39 () Int) +(declare-fun elements_73_61_39 () Int) +(declare-fun loc_pre_108_18_13 () Int) +(declare-fun loc_108_18_13 () Int) +(declare-fun NULL_pre_29_82_26 () Int) +(declare-fun TYPENAME_pre_19_64_7 () Int) +(declare-fun CHARTYPE_pre_17_30_26 () Int) +(declare-fun FIELDDECL_pre_19_23_7 () Int) +(declare-fun RSHIFT_pre_18_31_26 () Int) +(declare-fun locCloseBrace_pre_62_54_13 () Int) +(declare-fun locCloseBrace_62_54_13 () Int) +(declare-fun loc_pre_105_20_13 () Int) +(declare-fun loc_105_20_13 () Int) +(declare-fun loc_pre_123_49_13 () Int) +(declare-fun loc_123_49_13 () Int) +(declare-fun loc_pre_104_20_13 () Int) +(declare-fun loc_104_20_13 () Int) +(declare-fun NEWARRAYEXPR_pre_19_50_7 () Int) +(declare-fun locType_pre_79_21_13 () Int) +(declare-fun locType_79_21_13 () Int) +(declare-fun type_pre_123_24_28 () Int) +(declare-fun type_123_24_28 () Int) +(declare-fun I_will_establish_invariants_afterwards_pre_5_236_34 () Int) +(declare-fun I_will_establish_invariants_afterwards_5_236_34 () Int) +(declare-fun CONTINUESTMT_pre_19_36_7 () Int) +(declare-fun STRINGLIT_pre_17_44_26 () Int) +(declare-fun ASGLSHIFT_pre_18_46_26 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_pre_19_63_7 () Int) +(declare-fun LONGTYPE_pre_17_29_26 () Int) +(declare-fun LOCALVARDECL_pre_19_22_7 () Int) +(declare-fun LSHIFT_pre_18_30_26 () Int) +(declare-fun loc_pre_80_40_13 () Int) +(declare-fun loc_80_40_13 () Int) +(declare-fun loc_pre_120_22_13 () Int) +(declare-fun loc_120_22_13 () Int) +(declare-fun NEWINSTANCEEXPR_pre_19_49_7 () Int) +(declare-fun loc_pre_129_22_13 () Int) +(declare-fun loc_129_22_13 () Int) +(declare-fun locOpenBrackets_pre_123_65_29 () Int) +(declare-fun locOpenBrackets_123_65_29 () Int) +(declare-fun POSTFIXDEC_pre_18_63_26 () Int) +(declare-fun BREAKSTMT_pre_19_35_7 () Int) +(declare-fun type_pre_77_35_28 () Int) +(declare-fun type_77_35_28 () Int) +(declare-fun count_pre_140_67_33 () Int) +(declare-fun count_140_67_33 () Int) +(declare-fun DOUBLELIT_pre_17_43_26 () Int) +(declare-fun ASGSUB_pre_18_45_26 () Int) +(declare-fun ids_pre_141_19_37 () Int) +(declare-fun ids_141_19_37 () Int) +(declare-fun type_pre_127_18_28 () Int) +(declare-fun type_127_18_28 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_pre_19_62_7 () Int) +(declare-fun count_pre_73_67_33 () Int) +(declare-fun count_73_67_33 () Int) +(declare-fun INTTYPE_pre_17_28_26 () Int) +(declare-fun INITBLOCK_pre_19_21_7 () Int) +(declare-fun LT_pre_18_29_26 () Int) +(declare-fun locId_pre_132_25_13 () Int) +(declare-fun locId_132_25_13 () Int) +(declare-fun type_pre_133_20_28 () Int) +(declare-fun type_133_20_28 () Int) +(declare-fun ARRAYREFEXPR_pre_19_48_7 () Int) +(declare-fun POSTFIXINC_pre_18_62_26 () Int) +(declare-fun loc_pre_63_30_13 () Int) +(declare-fun loc_63_30_13 () Int) +(declare-fun THROWSTMT_pre_19_34_7 () Int) +(declare-fun FLOATLIT_pre_17_42_26 () Int) +(declare-fun ASGADD_pre_18_44_26 () Int) +(declare-fun length_pre_81_50_25 () Int) +(declare-fun length_81_50_25 () Int) +(declare-fun enclosingInstance_pre_119_37_14 () Int) +(declare-fun enclosingInstance_119_37_14 () Int) +(declare-fun loc_pre_116_29_13 () Int) +(declare-fun loc_116_29_13 () Int) +(declare-fun loc_pre_117_22_13 () Int) +(declare-fun loc_117_22_13 () Int) +(declare-fun EXPROBJECTDESIGNATOR_pre_19_61_7 () Int) +(declare-fun otherCodes_pre_29_202_27 () Int) +(declare-fun BOOLEANTYPE_pre_17_27_26 () Int) +(declare-fun METHODDECL_pre_19_20_7 () Int) +(declare-fun LE_pre_18_28_26 () Int) +(declare-fun locOpenBrace_pre_21_13 () Int) +(declare-fun locOpenBrace_21_13 () Int) +(declare-fun locOpenBrace_pre_62_51_13 () Int) +(declare-fun locOpenBrace_62_51_13 () Int) +(declare-fun loc_pre_107_18_13 () Int) +(declare-fun loc_107_18_13 () Int) +(declare-fun dims_pre_123_45_31 () Int) +(declare-fun dims_123_45_31 () Int) +(declare-fun THISEXPR_pre_19_47_7 () Int) +(declare-fun DEC_pre_18_59_26 () Int) +(declare-fun locCloseBracket_pre_121_23_13 () Int) +(declare-fun locCloseBracket_121_23_13 () Int) +(declare-fun CHARLIT_pre_17_41_26 () Int) +(declare-fun RETURNSTMT_pre_19_33_7 () Int) +(declare-fun locOp_pre_26_32_13 () Int) +(declare-fun locOp_26_32_13 () Int) +(declare-fun punctuationCodes_pre_29_164_19 () Int) +(declare-fun ASGREM_pre_18_43_26 () Int) +(declare-fun CLASSLITERAL_pre_19_60_7 () Int) +(declare-fun IDENT_pre_17_25_26 () Int) +(declare-fun CONSTRUCTORDECL_pre_19_19_7 () Int) +(declare-fun locDot_pre_122_29_13 () Int) +(declare-fun locDot_122_29_13 () Int) +(declare-fun GT_pre_18_27_26 () Int) +(declare-fun locOpenBracket_pre_138_21_13 () Int) +(declare-fun locOpenBracket_138_21_13 () Int) +(declare-fun elements_pre_72_61_38 () Int) +(declare-fun elements_72_61_38 () Int) +(declare-fun ARRAYINIT_pre_19_46_7 () Int) +(declare-fun INC_pre_18_58_26 () Int) +(declare-fun owner_pre_8_35_28 () Int) +(declare-fun owner_8_35_28 () Int) +(declare-fun locIds_pre_141_25_29 () Int) +(declare-fun locIds_141_25_29 () Int) +(declare-fun loc_pre_103_20_13 () Int) +(declare-fun loc_103_20_13 () Int) +(declare-fun LONGLIT_pre_17_40_26 () Int) +(declare-fun EVALSTMT_pre_19_32_7 () Int) +(declare-fun ASGDIV_pre_18_42_26 () Int) +(declare-fun locOpenParen_pre_122_52_13 () Int) +(declare-fun locOpenParen_122_52_13 () Int) +(declare-fun METHODINVOCATION_pre_19_59_7 () Int) +(declare-fun tokenType_pre_78_90_8 () Int) +(declare-fun tokenType_78_90_8 () Int) +(declare-fun INTERFACEDECL_pre_19_18_7 () Int) +(declare-fun GE_pre_18_26_26 () Int) +(declare-fun locCloseParen_pre_128_21_13 () Int) +(declare-fun locCloseParen_128_21_13 () Int) +(declare-fun CATCHCLAUSE_pre_19_45_7 () Int) +(declare-fun BITNOT_pre_18_57_26 () Int) +(declare-fun keywordStrings_pre_29_181_30 () Int) +(declare-fun locOpenParen_pre_131_30_13 () Int) +(declare-fun locOpenParen_131_30_13 () Int) +(declare-fun NULL_pre_13_60_26 () Int) +(declare-fun SYNCHRONIZESTMT_pre_19_31_7 () Int) +(declare-fun INTLIT_pre_17_39_26 () Int) +(declare-fun ASGMUL_pre_18_41_26 () Int) +(declare-fun loc_pre_115_16_13 () Int) +(declare-fun loc_115_16_13 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_pre_19_58_7 () Int) +(declare-fun CLASSDECL_pre_19_17_7 () Int) +(declare-fun EQ_pre_18_25_26 () Int) +(declare-fun locOpenParen_pre_119_48_13 () Int) +(declare-fun locOpenParen_119_48_13 () Int) +(declare-fun loc_pre_27_35_13 () Int) +(declare-fun loc_27_35_13 () Int) +(declare-fun TYPEMODIFIERPRAGMA_pre_29_28_26 () Int) +(declare-fun locId_pre_62_48_13 () Int) +(declare-fun locId_62_48_13 () Int) +(declare-fun CONSTRUCTORINVOCATION_pre_19_44_7 () Int) +(declare-fun count_pre_72_67_33 () Int) +(declare-fun count_72_67_33 () Int) +(declare-fun NOT_pre_18_56_26 () Int) +(declare-fun returnType_pre_79_18_28 () Int) +(declare-fun returnType_79_18_28 () Int) +(declare-fun locDots_pre_141_31_29 () Int) +(declare-fun locDots_141_31_29 () Int) +(declare-fun BOOLEANLIT_pre_17_38_26 () Int) +(declare-fun DOSTMT_pre_19_30_7 () Int) +(declare-fun ASSIGN_pre_18_40_26 () Int) +(declare-fun loc_pre_126_21_13 () Int) +(declare-fun loc_126_21_13 () Int) +(declare-fun op_pre_25_35_13 () Int) +(declare-fun op_25_35_13 () Int) +(declare-fun FIELDACCESS_pre_19_57_7 () Int) +(declare-fun syntax_pre_22_28_29 () Int) +(declare-fun syntax_22_28_29 () Int) +(declare-fun ONDEMANDIMPORTDECL_pre_19_16_7 () Int) +(declare-fun NE_pre_18_24_26 () Int) +(declare-fun locColon_pre_125_25_13 () Int) +(declare-fun locColon_125_25_13 () Int) +(declare-fun locOpenBracket_pre_121_20_13 () Int) +(declare-fun locOpenBracket_121_20_13 () Int) +(declare-fun elems_pre () Int) +(declare-fun elems () Int) +(declare-fun LS () Int) +(declare-fun alloc_pre () Int) +(declare-fun elems_91_56 () Int) +(declare-fun locOpenBrace_91_67 () Int) +(declare-fun locCloseBrace_91_85 () Int) +(declare-fun after_93_24_93_24 () Int) +(declare-fun RES_93_24_93_24 () Int) +(declare-fun EC_93_24_93_24 () Int) +(declare-fun ecReturn () Int) +(declare-fun elems_94_12 () Int) +(declare-fun locOpenBrace_95_12 () Int) +(declare-fun locCloseBrace_96_12 () Int) +(assert (let ((?v_0 (array T_java_lang_String)) (?v_1 (array T_int)) (?v_2 (= true_term true_term)) (?v_5 (< alloc after_93_24_93_24)) (?v_3 (not (= RES_93_24_93_24 null))) (?v_6 (not (= true_term (isAllocated RES_93_24_93_24 alloc)))) (?v_7 (= true_term (is RES_93_24_93_24 T_javafe_ast_ArrayInit))) (?v_8 (= true_term (isAllocated RES_93_24_93_24 after_93_24_93_24))) (?v_9 (= EC_93_24_93_24 ecReturn)) (?v_10 (= (S_select owner_8_35_28 RES_93_24_93_24) null)) (?v_11 (= (typeof RES_93_24_93_24) T_javafe_ast_ArrayInit))) (let ((?v_4 (not ?v_3)) (?v_12 (= elems_94_12 (S_store elems_18_34 RES_93_24_93_24 elems_91_56))) (?v_13 (= locOpenBrace_95_12 (S_store locOpenBrace_21_13 RES_93_24_93_24 locOpenBrace_91_67))) (?v_14 (= ecReturn ecReturn))) (let ((?v_15 (=> ?v_14 ?v_3))) (not (=> true (=> (and (= locOpenBrace_pre_80_36_13 locOpenBrace_80_36_13) (= locOpenBrace_80_36_13 (asField locOpenBrace_80_36_13 T_int)) (= TRYCATCHSTMT_pre_19_43_7 TRYCATCHSTMT_19_43_7) (= true_term (is TRYCATCHSTMT_19_43_7 T_int)) (= UNARYSUB_pre_18_55_26 UNARYSUB_18_55_26) (= true_term (is UNARYSUB_18_55_26 T_int)) (= TYPEDECLELEMPRAGMA_pre_29_27_26 TYPEDECLELEMPRAGMA_29_27_26) (= true_term (is TYPEDECLELEMPRAGMA_29_27_26 T_int)) (= SHORTTYPE_pre_17_36_26 SHORTTYPE_17_36_26) (= true_term (is SHORTTYPE_17_36_26 T_int)) (= WHILESTMT_pre_19_29_7 WHILESTMT_19_29_7) (= true_term (is WHILESTMT_19_29_7 T_int)) (= body_pre_80_34_19 body_80_34_19) (= body_80_34_19 (asField body_80_34_19 T_javafe_ast_BlockStmt)) (< (fClosedTime body_80_34_19) alloc) (= STAR_pre_18_37_26 STAR_18_37_26) (= true_term (is STAR_18_37_26 T_int)) (= elems_pre_18_34 elems_18_34) (= elems_18_34 (asField elems_18_34 T_javafe_ast_VarInitVec)) (< (fClosedTime elems_18_34) alloc) (forall ((?s Int)) (=> (not (= ?s null)) (not (= (S_select elems_18_34 ?s) null)))) (= enclosingInstance_pre_122_25_14 enclosingInstance_122_25_14) (= enclosingInstance_122_25_14 (asField enclosingInstance_122_25_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_122_25_14) alloc) (= loc_pre_110_18_13 loc_110_18_13) (= loc_110_18_13 (asField loc_110_18_13 T_int)) (= elements_pre_124_61_33 elements_124_61_33) (= elements_124_61_33 (asField elements_124_61_33 (array T_javafe_ast_Expr))) (< (fClosedTime elements_124_61_33) alloc) (forall ((?s_1_ Int)) (=> (not (= ?s_1_ null)) (not (= (S_select elements_124_61_33 ?s_1_) null)))) (= loc_pre_122_49_13 loc_122_49_13) (= loc_122_49_13 (asField loc_122_49_13 T_int)) (= VARIABLEACCESS_pre_19_56_7 VARIABLEACCESS_19_56_7) (= true_term (is VARIABLEACCESS_19_56_7 T_int)) (= SINGLETYPEIMPORTDECL_pre_19_15_7 SINGLETYPEIMPORTDECL_19_15_7) (= true_term (is SINGLETYPEIMPORTDECL_19_15_7 T_int)) (= BITAND_pre_18_23_26 BITAND_18_23_26) (= true_term (is BITAND_18_23_26 T_int)) (= locCloseBrace_pre_90_25_13 locCloseBrace_90_25_13) (= locCloseBrace_90_25_13 (asField locCloseBrace_90_25_13 T_int)) (= loc_pre_139_20_13 loc_139_20_13) (= loc_139_20_13 (asField loc_139_20_13 T_int)) (= TRYFINALLYSTMT_pre_19_42_7 TRYFINALLYSTMT_19_42_7) (= true_term (is TRYFINALLYSTMT_19_42_7 T_int)) (= UNARYADD_pre_18_54_26 UNARYADD_18_54_26) (= true_term (is UNARYADD_18_54_26 T_int)) (= locFirstSemi_pre_114_36_13 locFirstSemi_114_36_13) (= locFirstSemi_114_36_13 (asField locFirstSemi_114_36_13 T_int)) (= elemType_pre_138_18_28 elemType_138_18_28) (= elemType_138_18_28 (asField elemType_138_18_28 T_javafe_ast_Type)) (< (fClosedTime elemType_138_18_28) alloc) (forall ((?s_2_ Int)) (=> (not (= ?s_2_ null)) (not (= (S_select elemType_138_18_28 ?s_2_) null)))) (= BYTETYPE_pre_17_35_26 BYTETYPE_17_35_26) (= true_term (is BYTETYPE_17_35_26 T_int)) (= CLASSDECLSTMT_pre_19_28_7 CLASSDECLSTMT_19_28_7) (= true_term (is CLASSDECLSTMT_19_28_7 T_int)) (= MOD_pre_18_36_26 MOD_18_36_26) (= true_term (is MOD_18_36_26 T_int)) (= STMTPRAGMA_pre_29_26_26 STMTPRAGMA_29_26_26) (= true_term (is STMTPRAGMA_29_26_26 T_int)) (= op_pre_26_26_13 op_26_26_13) (= op_26_26_13 (asField op_26_26_13 T_int)) (= init_pre_123_35_19 init_123_35_19) (= init_123_35_19 (asField init_123_35_19 T_javafe_ast_ArrayInit)) (< (fClosedTime init_123_35_19) alloc) (= AMBIGUOUSVARIABLEACCESS_pre_19_55_7 AMBIGUOUSVARIABLEACCESS_19_55_7) (= true_term (is AMBIGUOUSVARIABLEACCESS_19_55_7 T_int)) (= COMPILATIONUNIT_pre_19_14_7 COMPILATIONUNIT_19_14_7) (= true_term (is COMPILATIONUNIT_19_14_7 T_int)) (= BITXOR_pre_18_22_26 BITXOR_18_22_26) (= true_term (is BITXOR_18_22_26 T_int)) (= locCloseParen_pre_127_24_13 locCloseParen_127_24_13) (= locCloseParen_127_24_13 (asField locCloseParen_127_24_13 T_int)) (= locKeyword_pre_119_45_13 locKeyword_119_45_13) (= locKeyword_119_45_13 (asField locKeyword_119_45_13 T_int)) (= SWITCHLABEL_pre_19_41_7 SWITCHLABEL_19_41_7) (= true_term (is SWITCHLABEL_19_41_7 T_int)) (= ASGBITXOR_pre_18_51_26 ASGBITXOR_18_51_26) (= true_term (is ASGBITXOR_18_51_26 T_int)) (= punctuationStrings_pre_29_134_22 punctuationStrings_29_134_22) (= true_term (is punctuationStrings_29_134_22 ?v_0)) (= true_term (isAllocated punctuationStrings_29_134_22 alloc)) (= locOpenParen_pre_105_23_13 locOpenParen_105_23_13) (= locOpenParen_105_23_13 (asField locOpenParen_105_23_13 T_int)) (= tag_pre_27_30_13 tag_27_30_13) (= tag_27_30_13 (asField tag_27_30_13 T_int)) (= loc_pre_62_45_13 loc_62_45_13) (= loc_62_45_13 (asField loc_62_45_13 T_int)) (= loc_pre_93_18_13 loc_93_18_13) (= loc_93_18_13 (asField loc_93_18_13 T_int)) (= elements_pre_14_61_36 elements_14_61_36) (= elements_14_61_36 (asField elements_14_61_36 (array T_javafe_ast_VarInit))) (< (fClosedTime elements_14_61_36) alloc) (forall ((?s_3_ Int)) (=> (not (= ?s_3_ null)) (not (= (S_select elements_14_61_36 ?s_3_) null)))) (= NULLTYPE_pre_17_34_26 NULLTYPE_17_34_26) (= true_term (is NULLTYPE_17_34_26 T_int)) (= VARDECLSTMT_pre_19_27_7 VARDECLSTMT_19_27_7) (= true_term (is VARDECLSTMT_19_27_7 T_int)) (= DIV_pre_18_35_26 DIV_18_35_26) (= true_term (is DIV_18_35_26 T_int)) (= locOpenParen_pre_128_18_13 locOpenParen_128_18_13) (= locOpenParen_128_18_13 (asField locOpenParen_128_18_13 T_int)) (= type_pre_126_18_28 type_126_18_28) (= type_126_18_28 (asField type_126_18_28 T_javafe_ast_Type)) (< (fClosedTime type_126_18_28) alloc) (forall ((?s_4_ Int)) (=> (not (= ?s_4_ null)) (not (= (S_select type_126_18_28 ?s_4_) null)))) (= count_pre_124_67_33 count_124_67_33) (= count_124_67_33 (asField count_124_67_33 T_int)) (= otherStrings_pre_29_193_30 otherStrings_29_193_30) (= true_term (is otherStrings_29_193_30 ?v_0)) (= true_term (isAllocated otherStrings_29_193_30 alloc)) (= loc_pre_23_50_13 loc_23_50_13) (= loc_23_50_13 (asField loc_23_50_13 T_int)) (= PARENEXPR_pre_19_54_7 PARENEXPR_19_54_7) (= true_term (is PARENEXPR_19_54_7 T_int)) (= loc_pre_83_29_13 loc_83_29_13) (= loc_83_29_13 (asField loc_83_29_13 T_int)) (= BITOR_pre_18_21_26 BITOR_18_21_26) (= true_term (is BITOR_18_21_26 T_int)) (= loc_pre_100_18_13 loc_100_18_13) (= loc_100_18_13 (asField loc_100_18_13 T_int)) (= MODIFIERPRAGMA_pre_29_25_26 MODIFIERPRAGMA_29_25_26) (= true_term (is MODIFIERPRAGMA_29_25_26 T_int)) (= noTokens_pre_29_212_27 noTokens_29_212_27) (= true_term (is noTokens_29_212_27 T_int)) (= tag_pre_23_32_13 tag_23_32_13) (= tag_23_32_13 (asField tag_23_32_13 T_int)) (= SKIPSTMT_pre_19_40_7 SKIPSTMT_19_40_7) (= true_term (is SKIPSTMT_19_40_7 T_int)) (= ASGBITOR_pre_18_50_26 ASGBITOR_18_50_26) (= true_term (is ASGBITOR_18_50_26 T_int)) (= loc_pre_118_23_13 loc_118_23_13) (= loc_118_23_13 (asField loc_118_23_13 T_int)) (= superCall_pre_119_24_17 superCall_119_24_17) (= superCall_119_24_17 (asField superCall_119_24_17 T_boolean)) (= locQuestion_pre_125_22_13 locQuestion_125_22_13) (= locQuestion_125_22_13 (asField locQuestion_125_22_13 T_int)) (= COMPOUNDNAME_pre_19_67_7 COMPOUNDNAME_19_67_7) (= true_term (is COMPOUNDNAME_19_67_7 T_int)) (= VOIDTYPE_pre_17_33_26 VOIDTYPE_17_33_26) (= true_term (is VOIDTYPE_17_33_26 T_int)) (= SWITCHSTMT_pre_19_26_7 SWITCHSTMT_19_26_7) (= true_term (is SWITCHSTMT_19_26_7 T_int)) (= SUB_pre_18_34_26 SUB_18_34_26) (= true_term (is SUB_18_34_26 T_int)) (= locDot_pre_84_21_13 locDot_84_21_13) (= locDot_84_21_13 (asField locDot_84_21_13 T_int)) (= CASTEXPR_pre_19_53_7 CASTEXPR_19_53_7) (= true_term (is CASTEXPR_19_53_7 T_int)) (= locSuper_pre_137_20_13 locSuper_137_20_13) (= locSuper_137_20_13 (asField locSuper_137_20_13 T_int)) (= TYPESIG_pre_28_6_28 TYPESIG_28_6_28) (= true_term (is TYPESIG_28_6_28 T_int)) (= FORSTMT_pre_19_39_7 FORSTMT_19_39_7) (= true_term (is FORSTMT_19_39_7 T_int)) (= count_pre_14_67_33 count_14_67_33) (= count_14_67_33 (asField count_14_67_33 T_int)) (= locOpenBrace_pre_90_22_13 locOpenBrace_90_22_13) (= locOpenBrace_90_22_13 (asField locOpenBrace_90_22_13 T_int)) (= LEXICALPRAGMA_pre_29_24_26 LEXICALPRAGMA_29_24_26) (= true_term (is LEXICALPRAGMA_29_24_26 T_int)) (= ASGBITAND_pre_18_49_26 ASGBITAND_18_49_26) (= true_term (is ASGBITAND_18_49_26 T_int)) (= locDot_pre_133_23_13 locDot_133_23_13) (= locDot_133_23_13 (asField locDot_133_23_13 T_int)) (= SIMPLENAME_pre_19_66_7 SIMPLENAME_19_66_7) (= true_term (is SIMPLENAME_19_66_7 T_int)) (= DOUBLETYPE_pre_17_32_26 DOUBLETYPE_17_32_26) (= true_term (is DOUBLETYPE_17_32_26 T_int)) (= BLOCKSTMT_pre_19_25_7 BLOCKSTMT_19_25_7) (= true_term (is BLOCKSTMT_19_25_7 T_int)) (= locId_pre_112_20_13 locId_112_20_13) (= locId_112_20_13 (asField locId_112_20_13 T_int)) (= ADD_pre_18_33_26 ADD_18_33_26) (= true_term (is ADD_18_33_26 T_int)) (= locId_pre_80_43_13 locId_80_43_13) (= locId_80_43_13 (asField locId_80_43_13 T_int)) (= FIRST_KEYWORD_pre_29_51_26 FIRST_KEYWORD_29_51_26) (= true_term (is FIRST_KEYWORD_29_51_26 T_int)) (= INSTANCEOFEXPR_pre_19_52_7 INSTANCEOFEXPR_19_52_7) (= true_term (is INSTANCEOFEXPR_19_52_7 T_int)) (= loc_pre_113_22_13 loc_113_22_13) (= loc_113_22_13 (asField loc_113_22_13 T_int)) (= AND_pre_18_20_26 AND_18_20_26) (= true_term (is AND_18_20_26 T_int)) (= locId_pre_77_38_13 locId_77_38_13) (= locId_77_38_13 (asField locId_77_38_13 T_int)) (= IFSTMT_pre_19_38_7 IFSTMT_19_38_7) (= true_term (is IFSTMT_19_38_7 T_int)) (= LAST_KEYWORD_pre_29_103_26 LAST_KEYWORD_29_103_26) (= true_term (is LAST_KEYWORD_29_103_26 T_int)) (= ASGURSHIFT_pre_18_48_26 ASGURSHIFT_18_48_26) (= true_term (is ASGURSHIFT_18_48_26 T_int)) (= locOpenParen_pre_127_21_13 locOpenParen_127_21_13) (= locOpenParen_127_21_13 (asField locOpenParen_127_21_13 T_int)) (= locDot_pre_119_41_13 locDot_119_41_13) (= locDot_119_41_13 (asField locDot_119_41_13 T_int)) (= loc_pre_114_33_13 loc_114_33_13) (= loc_114_33_13 (asField loc_114_33_13 T_int)) (= ARRAYTYPE_pre_19_65_7 ARRAYTYPE_19_65_7) (= true_term (is ARRAYTYPE_19_65_7 T_int)) (= locFinally_pre_117_25_13 locFinally_117_25_13) (= locFinally_117_25_13 (asField locFinally_117_25_13 T_int)) (= FORMALPARADECL_pre_19_24_7 FORMALPARADECL_19_24_7) (= true_term (is FORMALPARADECL_19_24_7 T_int)) (= FLOATTYPE_pre_17_31_26 FLOATTYPE_17_31_26) (= true_term (is FLOATTYPE_17_31_26 T_int)) (= URSHIFT_pre_18_32_26 URSHIFT_18_32_26) (= true_term (is URSHIFT_18_32_26 T_int)) (= locOpenParen_pre_132_28_13 locOpenParen_132_28_13) (= locOpenParen_132_28_13 (asField locOpenParen_132_28_13 T_int)) (= locOp_pre_25_43_13 locOp_25_43_13) (= locOp_25_43_13 (asField locOp_25_43_13 T_int)) (= value_pre_23_45_16 value_23_45_16) (= value_23_45_16 (asField value_23_45_16 T_java_lang_Object)) (< (fClosedTime value_23_45_16) alloc) (= locId_pre_130_24_13 locId_130_24_13) (= locId_130_24_13 (asField locId_130_24_13 T_int)) (= CONDEXPR_pre_19_51_7 CONDEXPR_19_51_7) (= true_term (is CONDEXPR_19_51_7 T_int)) (= elements_pre_140_61_39 elements_140_61_39) (= elements_140_61_39 (asField elements_140_61_39 (array T_javafe_ast_Identifier))) (< (fClosedTime elements_140_61_39) alloc) (forall ((?s_5_ Int)) (=> (not (= ?s_5_ null)) (not (= (S_select elements_140_61_39 ?s_5_) null)))) (= locCloseBrace_pre_24_13 locCloseBrace_24_13) (= locCloseBrace_24_13 (asField locCloseBrace_24_13 T_int)) (= OR_pre_18_19_26 OR_18_19_26) (= true_term (is OR_18_19_26 T_int)) (= LABELSTMT_pre_19_37_7 LABELSTMT_19_37_7) (= true_term (is LABELSTMT_19_37_7 T_int)) (= NULLLIT_pre_17_45_26 NULLLIT_17_45_26) (= true_term (is NULLLIT_17_45_26 T_int)) (= ASGRSHIFT_pre_18_47_26 ASGRSHIFT_18_47_26) (= true_term (is ASGRSHIFT_18_47_26 T_int)) (= locGuardOpenParen_pre_103_23_13 locGuardOpenParen_103_23_13) (= locGuardOpenParen_103_23_13 (asField locGuardOpenParen_103_23_13 T_int)) (= elements_pre_73_61_39 elements_73_61_39) (= elements_73_61_39 (asField elements_73_61_39 (array T_javafe_ast_MethodDecl))) (< (fClosedTime elements_73_61_39) alloc) (forall ((?s_6_ Int)) (=> (not (= ?s_6_ null)) (not (= (S_select elements_73_61_39 ?s_6_) null)))) (= loc_pre_108_18_13 loc_108_18_13) (= loc_108_18_13 (asField loc_108_18_13 T_int)) (= NULL_pre_29_82_26 NULL_29_82_26) (= true_term (is NULL_29_82_26 T_int)) (= TYPENAME_pre_19_64_7 TYPENAME_19_64_7) (= true_term (is TYPENAME_19_64_7 T_int)) (= CHARTYPE_pre_17_30_26 CHARTYPE_17_30_26) (= true_term (is CHARTYPE_17_30_26 T_int)) (= FIELDDECL_pre_19_23_7 FIELDDECL_19_23_7) (= true_term (is FIELDDECL_19_23_7 T_int)) (= RSHIFT_pre_18_31_26 RSHIFT_18_31_26) (= true_term (is RSHIFT_18_31_26 T_int)) (= locCloseBrace_pre_62_54_13 locCloseBrace_62_54_13) (= locCloseBrace_62_54_13 (asField locCloseBrace_62_54_13 T_int)) (= loc_pre_105_20_13 loc_105_20_13) (= loc_105_20_13 (asField loc_105_20_13 T_int)) (= loc_pre_123_49_13 loc_123_49_13) (= loc_123_49_13 (asField loc_123_49_13 T_int)) (= loc_pre_104_20_13 loc_104_20_13) (= loc_104_20_13 (asField loc_104_20_13 T_int)) (= NEWARRAYEXPR_pre_19_50_7 NEWARRAYEXPR_19_50_7) (= true_term (is NEWARRAYEXPR_19_50_7 T_int)) (= locType_pre_79_21_13 locType_79_21_13) (= locType_79_21_13 (asField locType_79_21_13 T_int)) (= type_pre_123_24_28 type_123_24_28) (= type_123_24_28 (asField type_123_24_28 T_javafe_ast_Type)) (< (fClosedTime type_123_24_28) alloc) (forall ((?s_7_ Int)) (=> (not (= ?s_7_ null)) (not (= (S_select type_123_24_28 ?s_7_) null)))) (= I_will_establish_invariants_afterwards_pre_5_236_34 I_will_establish_invariants_afterwards_5_236_34) (= true_term (is I_will_establish_invariants_afterwards_5_236_34 T_boolean)) (= CONTINUESTMT_pre_19_36_7 CONTINUESTMT_19_36_7) (= true_term (is CONTINUESTMT_19_36_7 T_int)) (= STRINGLIT_pre_17_44_26 STRINGLIT_17_44_26) (= true_term (is STRINGLIT_17_44_26 T_int)) (= ASGLSHIFT_pre_18_46_26 ASGLSHIFT_18_46_26) (= true_term (is ASGLSHIFT_18_46_26 T_int)) (= SUPEROBJECTDESIGNATOR_pre_19_63_7 SUPEROBJECTDESIGNATOR_19_63_7) (= true_term (is SUPEROBJECTDESIGNATOR_19_63_7 T_int)) (= LONGTYPE_pre_17_29_26 LONGTYPE_17_29_26) (= true_term (is LONGTYPE_17_29_26 T_int)) (= LOCALVARDECL_pre_19_22_7 LOCALVARDECL_19_22_7) (= true_term (is LOCALVARDECL_19_22_7 T_int)) (= LSHIFT_pre_18_30_26 LSHIFT_18_30_26) (= true_term (is LSHIFT_18_30_26 T_int)) (= loc_pre_80_40_13 loc_80_40_13) (= loc_80_40_13 (asField loc_80_40_13 T_int)) (= loc_pre_120_22_13 loc_120_22_13) (= loc_120_22_13 (asField loc_120_22_13 T_int)) (= NEWINSTANCEEXPR_pre_19_49_7 NEWINSTANCEEXPR_19_49_7) (= true_term (is NEWINSTANCEEXPR_19_49_7 T_int)) (= loc_pre_129_22_13 loc_129_22_13) (= loc_129_22_13 (asField loc_129_22_13 T_int)) (= locOpenBrackets_pre_123_65_29 locOpenBrackets_123_65_29) (= locOpenBrackets_123_65_29 (asField locOpenBrackets_123_65_29 ?v_1)) (< (fClosedTime locOpenBrackets_123_65_29) alloc) (forall ((?s_8_ Int)) (=> (not (= ?s_8_ null)) (not (= (S_select locOpenBrackets_123_65_29 ?s_8_) null)))) (= POSTFIXDEC_pre_18_63_26 POSTFIXDEC_18_63_26) (= true_term (is POSTFIXDEC_18_63_26 T_int)) (= BREAKSTMT_pre_19_35_7 BREAKSTMT_19_35_7) (= true_term (is BREAKSTMT_19_35_7 T_int)) (= type_pre_77_35_28 type_77_35_28) (= type_77_35_28 (asField type_77_35_28 T_javafe_ast_Type)) (< (fClosedTime type_77_35_28) alloc) (forall ((?s_9_ Int)) (=> (not (= ?s_9_ null)) (not (= (S_select type_77_35_28 ?s_9_) null)))) (= count_pre_140_67_33 count_140_67_33) (= count_140_67_33 (asField count_140_67_33 T_int)) (= DOUBLELIT_pre_17_43_26 DOUBLELIT_17_43_26) (= true_term (is DOUBLELIT_17_43_26 T_int)) (= ASGSUB_pre_18_45_26 ASGSUB_18_45_26) (= true_term (is ASGSUB_18_45_26 T_int)) (= ids_pre_141_19_37 ids_141_19_37) (= ids_141_19_37 (asField ids_141_19_37 T_javafe_ast_IdentifierVec)) (< (fClosedTime ids_141_19_37) alloc) (forall ((?s_10_ Int)) (=> (not (= ?s_10_ null)) (not (= (S_select ids_141_19_37 ?s_10_) null)))) (= type_pre_127_18_28 type_127_18_28) (= type_127_18_28 (asField type_127_18_28 T_javafe_ast_Type)) (< (fClosedTime type_127_18_28) alloc) (forall ((?s_11_ Int)) (=> (not (= ?s_11_ null)) (not (= (S_select type_127_18_28 ?s_11_) null)))) (= TYPEOBJECTDESIGNATOR_pre_19_62_7 TYPEOBJECTDESIGNATOR_19_62_7) (= true_term (is TYPEOBJECTDESIGNATOR_19_62_7 T_int)) (= count_pre_73_67_33 count_73_67_33) (= count_73_67_33 (asField count_73_67_33 T_int)) (= INTTYPE_pre_17_28_26 INTTYPE_17_28_26) (= true_term (is INTTYPE_17_28_26 T_int)) (= INITBLOCK_pre_19_21_7 INITBLOCK_19_21_7) (= true_term (is INITBLOCK_19_21_7 T_int)) (= LT_pre_18_29_26 LT_18_29_26) (= true_term (is LT_18_29_26 T_int)) (= locId_pre_132_25_13 locId_132_25_13) (= locId_132_25_13 (asField locId_132_25_13 T_int)) (= type_pre_133_20_28 type_133_20_28) (= type_133_20_28 (asField type_133_20_28 T_javafe_ast_Type)) (< (fClosedTime type_133_20_28) alloc) (forall ((?s_12_ Int)) (=> (not (= ?s_12_ null)) (not (= (S_select type_133_20_28 ?s_12_) null)))) (= ARRAYREFEXPR_pre_19_48_7 ARRAYREFEXPR_19_48_7) (= true_term (is ARRAYREFEXPR_19_48_7 T_int)) (= POSTFIXINC_pre_18_62_26 POSTFIXINC_18_62_26) (= true_term (is POSTFIXINC_18_62_26 T_int)) (= loc_pre_63_30_13 loc_63_30_13) (= loc_63_30_13 (asField loc_63_30_13 T_int)) (= THROWSTMT_pre_19_34_7 THROWSTMT_19_34_7) (= true_term (is THROWSTMT_19_34_7 T_int)) (= FLOATLIT_pre_17_42_26 FLOATLIT_17_42_26) (= true_term (is FLOATLIT_17_42_26 T_int)) (= ASGADD_pre_18_44_26 ASGADD_18_44_26) (= true_term (is ASGADD_18_44_26 T_int)) (= length_pre_81_50_25 length_81_50_25) (= length_81_50_25 (asField length_81_50_25 T_int)) (= enclosingInstance_pre_119_37_14 enclosingInstance_119_37_14) (= enclosingInstance_119_37_14 (asField enclosingInstance_119_37_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_119_37_14) alloc) (= loc_pre_116_29_13 loc_116_29_13) (= loc_116_29_13 (asField loc_116_29_13 T_int)) (= loc_pre_117_22_13 loc_117_22_13) (= loc_117_22_13 (asField loc_117_22_13 T_int)) (= EXPROBJECTDESIGNATOR_pre_19_61_7 EXPROBJECTDESIGNATOR_19_61_7) (= true_term (is EXPROBJECTDESIGNATOR_19_61_7 T_int)) (= otherCodes_pre_29_202_27 otherCodes_29_202_27) (= true_term (is otherCodes_29_202_27 ?v_1)) (= true_term (isAllocated otherCodes_29_202_27 alloc)) (= BOOLEANTYPE_pre_17_27_26 BOOLEANTYPE_17_27_26) (= true_term (is BOOLEANTYPE_17_27_26 T_int)) (= METHODDECL_pre_19_20_7 METHODDECL_19_20_7) (= true_term (is METHODDECL_19_20_7 T_int)) (= LE_pre_18_28_26 LE_18_28_26) (= true_term (is LE_18_28_26 T_int)) (= locOpenBrace_pre_21_13 locOpenBrace_21_13) (= locOpenBrace_21_13 (asField locOpenBrace_21_13 T_int)) (= locOpenBrace_pre_62_51_13 locOpenBrace_62_51_13) (= locOpenBrace_62_51_13 (asField locOpenBrace_62_51_13 T_int)) (= loc_pre_107_18_13 loc_107_18_13) (= loc_107_18_13 (asField loc_107_18_13 T_int)) (= dims_pre_123_45_31 dims_123_45_31) (= dims_123_45_31 (asField dims_123_45_31 T_javafe_ast_ExprVec)) (< (fClosedTime dims_123_45_31) alloc) (forall ((?s_13_ Int)) (=> (not (= ?s_13_ null)) (not (= (S_select dims_123_45_31 ?s_13_) null)))) (= THISEXPR_pre_19_47_7 THISEXPR_19_47_7) (= true_term (is THISEXPR_19_47_7 T_int)) (= DEC_pre_18_59_26 DEC_18_59_26) (= true_term (is DEC_18_59_26 T_int)) (= locCloseBracket_pre_121_23_13 locCloseBracket_121_23_13) (= locCloseBracket_121_23_13 (asField locCloseBracket_121_23_13 T_int)) (= CHARLIT_pre_17_41_26 CHARLIT_17_41_26) (= true_term (is CHARLIT_17_41_26 T_int)) (= RETURNSTMT_pre_19_33_7 RETURNSTMT_19_33_7) (= true_term (is RETURNSTMT_19_33_7 T_int)) (= locOp_pre_26_32_13 locOp_26_32_13) (= locOp_26_32_13 (asField locOp_26_32_13 T_int)) (= punctuationCodes_pre_29_164_19 punctuationCodes_29_164_19) (= true_term (is punctuationCodes_29_164_19 ?v_1)) (= true_term (isAllocated punctuationCodes_29_164_19 alloc)) (= ASGREM_pre_18_43_26 ASGREM_18_43_26) (= true_term (is ASGREM_18_43_26 T_int)) (= CLASSLITERAL_pre_19_60_7 CLASSLITERAL_19_60_7) (= true_term (is CLASSLITERAL_19_60_7 T_int)) (= IDENT_pre_17_25_26 IDENT_17_25_26) (= true_term (is IDENT_17_25_26 T_int)) (= CONSTRUCTORDECL_pre_19_19_7 CONSTRUCTORDECL_19_19_7) (= true_term (is CONSTRUCTORDECL_19_19_7 T_int)) (= locDot_pre_122_29_13 locDot_122_29_13) (= locDot_122_29_13 (asField locDot_122_29_13 T_int)) (= GT_pre_18_27_26 GT_18_27_26) (= true_term (is GT_18_27_26 T_int)) (= locOpenBracket_pre_138_21_13 locOpenBracket_138_21_13) (= locOpenBracket_138_21_13 (asField locOpenBracket_138_21_13 T_int)) (= elements_pre_72_61_38 elements_72_61_38) (= elements_72_61_38 (asField elements_72_61_38 (array T_javafe_ast_FieldDecl))) (< (fClosedTime elements_72_61_38) alloc) (forall ((?s_14_ Int)) (=> (not (= ?s_14_ null)) (not (= (S_select elements_72_61_38 ?s_14_) null)))) (= ARRAYINIT_pre_19_46_7 ARRAYINIT_19_46_7) (= true_term (is ARRAYINIT_19_46_7 T_int)) (= INC_pre_18_58_26 INC_18_58_26) (= true_term (is INC_18_58_26 T_int)) (= owner_pre_8_35_28 owner_8_35_28) (= owner_8_35_28 (asField owner_8_35_28 T_java_lang_Object)) (< (fClosedTime owner_8_35_28) alloc) (= locIds_pre_141_25_29 locIds_141_25_29) (= locIds_141_25_29 (asField locIds_141_25_29 ?v_1)) (< (fClosedTime locIds_141_25_29) alloc) (forall ((?s_15_ Int)) (=> (not (= ?s_15_ null)) (not (= (S_select locIds_141_25_29 ?s_15_) null)))) (= loc_pre_103_20_13 loc_103_20_13) (= loc_103_20_13 (asField loc_103_20_13 T_int)) (= LONGLIT_pre_17_40_26 LONGLIT_17_40_26) (= true_term (is LONGLIT_17_40_26 T_int)) (= EVALSTMT_pre_19_32_7 EVALSTMT_19_32_7) (= true_term (is EVALSTMT_19_32_7 T_int)) (= ASGDIV_pre_18_42_26 ASGDIV_18_42_26) (= true_term (is ASGDIV_18_42_26 T_int)) (= locOpenParen_pre_122_52_13 locOpenParen_122_52_13) (= locOpenParen_122_52_13 (asField locOpenParen_122_52_13 T_int)) (= METHODINVOCATION_pre_19_59_7 METHODINVOCATION_19_59_7) (= true_term (is METHODINVOCATION_19_59_7 T_int)) (= tokenType_pre_78_90_8 tokenType_78_90_8) (= tokenType_78_90_8 (asField tokenType_78_90_8 T_int)) (= INTERFACEDECL_pre_19_18_7 INTERFACEDECL_19_18_7) (= true_term (is INTERFACEDECL_19_18_7 T_int)) (= GE_pre_18_26_26 GE_18_26_26) (= true_term (is GE_18_26_26 T_int)) (= locCloseParen_pre_128_21_13 locCloseParen_128_21_13) (= locCloseParen_128_21_13 (asField locCloseParen_128_21_13 T_int)) (= CATCHCLAUSE_pre_19_45_7 CATCHCLAUSE_19_45_7) (= true_term (is CATCHCLAUSE_19_45_7 T_int)) (= BITNOT_pre_18_57_26 BITNOT_18_57_26) (= true_term (is BITNOT_18_57_26 T_int)) (= keywordStrings_pre_29_181_30 keywordStrings_29_181_30) (= true_term (is keywordStrings_29_181_30 ?v_0)) (= true_term (isAllocated keywordStrings_29_181_30 alloc)) (= locOpenParen_pre_131_30_13 locOpenParen_131_30_13) (= locOpenParen_131_30_13 (asField locOpenParen_131_30_13 T_int)) (= NULL_pre_13_60_26 NULL_13_60_26) (= true_term (is NULL_13_60_26 T_int)) (= SYNCHRONIZESTMT_pre_19_31_7 SYNCHRONIZESTMT_19_31_7) (= true_term (is SYNCHRONIZESTMT_19_31_7 T_int)) (= INTLIT_pre_17_39_26 INTLIT_17_39_26) (= true_term (is INTLIT_17_39_26 T_int)) (= ASGMUL_pre_18_41_26 ASGMUL_18_41_26) (= true_term (is ASGMUL_18_41_26 T_int)) (= loc_pre_115_16_13 loc_115_16_13) (= loc_115_16_13 (asField loc_115_16_13 T_int)) (= AMBIGUOUSMETHODINVOCATION_pre_19_58_7 AMBIGUOUSMETHODINVOCATION_19_58_7) (= true_term (is AMBIGUOUSMETHODINVOCATION_19_58_7 T_int)) (= CLASSDECL_pre_19_17_7 CLASSDECL_19_17_7) (= true_term (is CLASSDECL_19_17_7 T_int)) (= EQ_pre_18_25_26 EQ_18_25_26) (= true_term (is EQ_18_25_26 T_int)) (= locOpenParen_pre_119_48_13 locOpenParen_119_48_13) (= locOpenParen_119_48_13 (asField locOpenParen_119_48_13 T_int)) (= loc_pre_27_35_13 loc_27_35_13) (= loc_27_35_13 (asField loc_27_35_13 T_int)) (= TYPEMODIFIERPRAGMA_pre_29_28_26 TYPEMODIFIERPRAGMA_29_28_26) (= true_term (is TYPEMODIFIERPRAGMA_29_28_26 T_int)) (= locId_pre_62_48_13 locId_62_48_13) (= locId_62_48_13 (asField locId_62_48_13 T_int)) (= CONSTRUCTORINVOCATION_pre_19_44_7 CONSTRUCTORINVOCATION_19_44_7) (= true_term (is CONSTRUCTORINVOCATION_19_44_7 T_int)) (= count_pre_72_67_33 count_72_67_33) (= count_72_67_33 (asField count_72_67_33 T_int)) (= NOT_pre_18_56_26 NOT_18_56_26) (= true_term (is NOT_18_56_26 T_int)) (= returnType_pre_79_18_28 returnType_79_18_28) (= returnType_79_18_28 (asField returnType_79_18_28 T_javafe_ast_Type)) (< (fClosedTime returnType_79_18_28) alloc) (forall ((?s_16_ Int)) (=> (not (= ?s_16_ null)) (not (= (S_select returnType_79_18_28 ?s_16_) null)))) (= locDots_pre_141_31_29 locDots_141_31_29) (= locDots_141_31_29 (asField locDots_141_31_29 ?v_1)) (< (fClosedTime locDots_141_31_29) alloc) (forall ((?s_17_ Int)) (=> (not (= ?s_17_ null)) (not (= (S_select locDots_141_31_29 ?s_17_) null)))) (= BOOLEANLIT_pre_17_38_26 BOOLEANLIT_17_38_26) (= true_term (is BOOLEANLIT_17_38_26 T_int)) (= DOSTMT_pre_19_30_7 DOSTMT_19_30_7) (= true_term (is DOSTMT_19_30_7 T_int)) (= ASSIGN_pre_18_40_26 ASSIGN_18_40_26) (= true_term (is ASSIGN_18_40_26 T_int)) (= loc_pre_126_21_13 loc_126_21_13) (= loc_126_21_13 (asField loc_126_21_13 T_int)) (= op_pre_25_35_13 op_25_35_13) (= op_25_35_13 (asField op_25_35_13 T_int)) (= FIELDACCESS_pre_19_57_7 FIELDACCESS_19_57_7) (= true_term (is FIELDACCESS_19_57_7 T_int)) (= syntax_pre_22_28_29 syntax_22_28_29) (= syntax_22_28_29 (asField syntax_22_28_29 T_boolean)) (= ONDEMANDIMPORTDECL_pre_19_16_7 ONDEMANDIMPORTDECL_19_16_7) (= true_term (is ONDEMANDIMPORTDECL_19_16_7 T_int)) (= NE_pre_18_24_26 NE_18_24_26) (= true_term (is NE_18_24_26 T_int)) (= locColon_pre_125_25_13 locColon_125_25_13) (= locColon_125_25_13 (asField locColon_125_25_13 T_int)) (= locOpenBracket_pre_121_20_13 locOpenBracket_121_20_13) (= locOpenBracket_121_20_13 (asField locOpenBracket_121_20_13 T_int)) (= elems_pre elems) (= elems (asElems elems)) (< (eClosedTime elems) alloc) (= LS (asLockSet LS)) (= alloc_pre alloc)) (not (and (= true_term (is elems_91_56 T_javafe_ast_VarInitVec)) (= true_term (isAllocated elems_91_56 alloc)) (not (= elems_91_56 null)) (= true_term (is locOpenBrace_91_67 T_int)) (= true_term (is locCloseBrace_91_85 T_int)) (not (= locOpenBrace_91_67 NULL_13_60_26)) (not (= locCloseBrace_91_85 NULL_13_60_26)) (forall ((?brokenObj Int)) (=> (and (= true_term (is ?brokenObj T_javafe_ast_ArrayInit)) (not (= ?brokenObj null))) (not (= (S_select locOpenBrace_21_13 ?brokenObj) NULL_13_60_26)))) (forall ((?brokenObj_1_ Int)) (=> (and (= true_term (is ?brokenObj_1_ T_javafe_ast_ArrayInit)) (not (= ?brokenObj_1_ null))) (not (= (S_select locCloseBrace_24_13 ?brokenObj_1_) NULL_13_60_26)))) (or (not ?v_2) (and ?v_2 ?v_5 ?v_3 ?v_6 ?v_7 ?v_8 ?v_9 ?v_10 ?v_11 (or ?v_4 (and ?v_3 ?v_12 (or ?v_4 (and ?v_3 ?v_13 ?v_4))))) (and ?v_2 ?v_5 ?v_3 ?v_6 ?v_7 ?v_8 ?v_9 ?v_10 ?v_11 ?v_3 ?v_12 ?v_3 ?v_13 ?v_3 (= locCloseBrace_96_12 (S_store locCloseBrace_24_13 RES_93_24_93_24 locCloseBrace_91_85)) ?v_2 (or (not ?v_14) (and ?v_14 (or (not ?v_15) (and ?v_15 (or (not (forall ((?brokenObj Int)) (=> (and (= true_term (is ?brokenObj T_javafe_ast_ArrayInit)) (= true_term (isAllocated ?brokenObj after_93_24_93_24)) (not (= ?brokenObj null))) (not (= (S_select locOpenBrace_95_12 ?brokenObj) NULL_13_60_26))))) (not (forall ((?brokenObj_1_ Int)) (=> (and (= true_term (is ?brokenObj_1_ T_javafe_ast_ArrayInit)) (= true_term (isAllocated ?brokenObj_1_ after_93_24_93_24)) (not (= ?brokenObj_1_ null))) (not (= (S_select locCloseBrace_96_12 ?brokenObj_1_) NULL_13_60_26))))))))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/javafe.ast.StandardPrettyPrint.319.smt2 b/test/regress/regress0/quantifiers/javafe.ast.StandardPrettyPrint.319.smt2 new file mode 100644 index 000000000..fd672bd3b --- /dev/null +++ b/test/regress/regress0/quantifiers/javafe.ast.StandardPrettyPrint.319.smt2 @@ -0,0 +1,1014 @@ +(set-logic AUFLIA) +(set-info :source | Simplify Theorem Prover Benchmark Suite |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun true_term () Int) +(declare-fun false_term () Int) +(assert (= true_term 1)) +(assert (= false_term 0)) +(declare-fun S_select (Int Int) Int) +(declare-fun S_store (Int Int Int) Int) +(assert (forall ((?m Int) (?i Int) (?x Int)) (= (S_select (S_store ?m ?i ?x) ?i) ?x))) +(assert (forall ((?m Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (S_select (S_store ?m ?i ?x) ?j) (S_select ?m ?j))))) +(declare-fun PO_LT (Int Int) Int) +(assert (forall ((?t Int)) (= (PO_LT ?t ?t) true_term))) +(declare-fun T_java_lang_Object () Int) +(assert (= (PO_LT T_java_lang_Object T_java_lang_Object) true_term)) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t2) true_term)) (= (PO_LT ?t0 ?t2) true_term)))) +(assert (forall ((?t0 Int) (?t1 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t0) true_term)) (= ?t0 ?t1)))) +(declare-fun T_boolean () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_boolean) true_term) (= ?t T_boolean)))) +(declare-fun T_char () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_char) true_term) (= ?t T_char)))) +(declare-fun T_byte () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_byte) true_term) (= ?t T_byte)))) +(declare-fun T_short () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_short) true_term) (= ?t T_short)))) +(declare-fun T_int () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_int) true_term) (= ?t T_int)))) +(declare-fun T_long () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_long) true_term) (= ?t T_long)))) +(declare-fun T_float () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_float) true_term) (= ?t T_float)))) +(declare-fun T_double () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_double) true_term) (= ?t T_double)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_boolean ?t) true_term) (= ?t T_boolean)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_char ?t) true_term) (= ?t T_char)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_byte ?t) true_term) (= ?t T_byte)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_short ?t) true_term) (= ?t T_short)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_int ?t) true_term) (= ?t T_int)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_long ?t) true_term) (= ?t T_long)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_float ?t) true_term) (= ?t T_float)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_double ?t) true_term) (= ?t T_double)))) +(declare-fun asChild (Int Int) Int) +(declare-fun classDown (Int Int) Int) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (let ((?v_0 (asChild ?t1 ?t2))) (=> (= (PO_LT ?t0 ?v_0) true_term) (= (classDown ?t2 ?t0) ?v_0))))) +(declare-fun T_java_lang_Cloneable () Int) +(assert (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term)) +(declare-fun array (Int) Int) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) T_java_lang_Cloneable) true_term))) +(declare-fun elemtype (Int) Int) +(assert (forall ((?t Int)) (= (elemtype (array ?t)) ?t))) +(assert (forall ((?t0 Int) (?t1 Int)) (let ((?v_0 (elemtype ?t0))) (= (= (PO_LT ?t0 (array ?t1)) true_term) (and (= ?t0 (array ?v_0)) (= (PO_LT ?v_0 ?t1) true_term)))))) +(declare-fun is (Int Int) Int) +(declare-fun cast (Int Int) Int) +(assert (forall ((?x Int) (?t Int)) (= (is (cast ?x ?t) ?t) true_term))) +(assert (forall ((?x Int) (?t Int)) (=> (= (is ?x ?t) true_term) (= (cast ?x ?t) ?x)))) +(assert true) +(assert (forall ((?x Int)) (= (= (is ?x T_char) true_term) (and (<= 0 ?x) (<= ?x 65535))))) +(assert (forall ((?x Int)) (= (= (is ?x T_byte) true_term) (and (<= (- 128) ?x) (<= ?x 127))))) +(assert (forall ((?x Int)) (= (= (is ?x T_short) true_term) (and (<= (- 32768) ?x) (<= ?x 32767))))) +(declare-fun intFirst () Int) +(declare-fun intLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_int) true_term) (and (<= intFirst ?x) (<= ?x intLast))))) +(declare-fun longFirst () Int) +(declare-fun longLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_long) true_term) (and (<= longFirst ?x) (<= ?x longLast))))) +(assert (< longFirst intFirst)) +(assert (< intFirst (- 1000000))) +(assert (< 1000000 intLast)) +(assert (< intLast longLast)) +(declare-fun null () Int) +(declare-fun typeof (Int) Int) +(assert (forall ((?x Int) (?t Int)) (=> (= (PO_LT ?t T_java_lang_Object) true_term) (= (= (is ?x ?t) true_term) (or (= ?x null) (= (PO_LT (typeof ?x) ?t) true_term)))))) +(declare-fun asField (Int Int) Int) +(assert (forall ((?f Int) (?t Int) (?x Int)) (= (is (S_select (asField ?f ?t) ?x) ?t) true_term))) +(declare-fun asElems (Int) Int) +(assert (forall ((?e Int) (?a Int) (?i Int)) (= (is (S_select (S_select (asElems ?e) ?a) ?i) (elemtype (typeof ?a))) true_term))) +(declare-fun vAllocTime (Int) Int) +(declare-fun isAllocated (Int Int) Int) +(assert (forall ((?x Int) (?a0 Int)) (= (= (isAllocated ?x ?a0) true_term) (< (vAllocTime ?x) ?a0)))) +(declare-fun fClosedTime (Int) Int) +(assert (forall ((?x Int) (?f Int) (?a0 Int)) (=> (and (< (fClosedTime ?f) ?a0) (= (isAllocated ?x ?a0) true_term)) (= (isAllocated (S_select ?f ?x) ?a0) true_term)))) +(declare-fun eClosedTime (Int) Int) +(assert (forall ((?a Int) (?e Int) (?i Int) (?a0 Int)) (=> (and (< (eClosedTime ?e) ?a0) (= (isAllocated ?a ?a0) true_term)) (= (isAllocated (S_select (S_select ?e ?a) ?i) ?a0) true_term)))) +(declare-fun asLockSet (Int) Int) +(declare-fun max (Int) Int) +(assert (forall ((?S Int)) (let ((?v_0 (asLockSet ?S))) (= (S_select ?v_0 (max ?v_0)) true_term)))) +(assert (forall ((?S Int)) (= (S_select (asLockSet ?S) null) true_term))) +(declare-fun lockLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun lockLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLT ?x ?y) true_term) (< ?x ?y)))) +(assert (forall ((?S Int) (?mu Int)) (let ((?v_0 (asLockSet ?S))) (=> (= (S_select ?v_0 ?mu) true_term) (= (lockLE ?mu (max ?v_0)) true_term))))) +(assert (forall ((?x Int)) (=> (= (PO_LT (typeof ?x) T_java_lang_Object) true_term) (= (lockLE null ?x) true_term)))) +(declare-fun arrayLength (Int) Int) +(assert (forall ((?a Int)) (let ((?v_0 (arrayLength ?a))) (and (<= 0 ?v_0) (= (is ?v_0 T_int) true_term))))) +(declare-fun arrayFresh (Int Int Int Int Int Int Int) Int) +(declare-fun arrayShapeMore (Int Int) Int) +(declare-fun arrayParent (Int) Int) +(declare-fun arrayPosition (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?s Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (let ((?v_0 (S_select (S_select ?e ?a) ?i))) (and (= (arrayFresh ?v_0 ?a0 ?b0 ?e ?s (elemtype ?T) ?v) true_term) (= (arrayParent ?v_0) ?a) (= (arrayPosition ?v_0) ?i)))))))) +(declare-fun arrayShapeOne (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (= (S_select (S_select ?e ?a) ?i) ?v)))))) +(declare-fun arrayType () Int) +(assert (= arrayType (asChild arrayType T_java_lang_Object))) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) arrayType) true_term))) +(declare-fun isNewArray (Int) Int) +(assert (forall ((?s Int)) (=> (= true_term (isNewArray ?s)) (= (PO_LT (typeof ?s) arrayType) true_term)))) +(declare-fun boolAnd (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolAnd ?a ?b) true_term) (and (= ?a true_term) (= ?b true_term))))) +(declare-fun boolEq (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolEq ?a ?b) true_term) (= (= ?a true_term) (= ?b true_term))))) +(declare-fun boolImplies (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolImplies ?a ?b) true_term) (=> (= ?a true_term) (= ?b true_term))))) +(declare-fun boolNE (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolNE ?a ?b) true_term) (not (= (= ?a true_term) (= ?b true_term)))))) +(declare-fun boolNot (Int) Int) +(assert (forall ((?a Int)) (= (= (boolNot ?a) true_term) (not (= ?a true_term))))) +(declare-fun boolOr (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolOr ?a ?b) true_term) (or (= ?a true_term) (= ?b true_term))))) +(declare-fun integralEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun stringCat (Int Int) Int) +(declare-fun T_java_lang_String () Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (stringCat ?x ?y))) (and (not (= ?v_0 null)) (= (PO_LT (typeof ?v_0) T_java_lang_String) true_term))))) +(declare-fun integralGE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGE ?x ?y) true_term) (>= ?x ?y)))) +(declare-fun integralGT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGT ?x ?y) true_term) (> ?x ?y)))) +(declare-fun integralLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun integralLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLT ?x ?y) true_term) (< ?x ?y)))) +(declare-fun integralNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun refEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun refNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun nonnullelements (Int Int) Int) +(assert (forall ((?x Int) (?e Int)) (= (= (nonnullelements ?x ?e) true_term) (and (not (= ?x null)) (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i (arrayLength ?x))) (not (= (S_select (S_select ?e ?x) ?i) null)))))))) +(declare-fun classLiteral (Int) Int) +(declare-fun T_java_lang_Class () Int) +(declare-fun alloc () Int) +(assert (forall ((?t Int)) (let ((?v_0 (classLiteral ?t))) (and (not (= ?v_0 null)) (= (is ?v_0 T_java_lang_Class) true_term) (= (isAllocated ?v_0 alloc) true_term))))) +(declare-fun integralAnd (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralAnd ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?x) (<= (integralAnd ?x ?y) ?x)))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?y) (<= (integralAnd ?x ?y) ?y)))) +(declare-fun integralOr (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (integralOr ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= ?x ?v_0) (<= ?y ?v_0)))))) +(declare-fun integralXor (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralXor ?x ?y))))) +(declare-fun intShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 31)) (<= 1 (intShiftL 1 ?n))))) +(declare-fun longShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 63)) (<= 1 (longShiftL 1 ?n))))) +(assert true) +(declare-fun T_javafe_ast_Stmt () Int) +(declare-fun T_javafe_ast_ASTNode () Int) +(declare-fun T_javafe_ast_InstanceOfExpr () Int) +(declare-fun T_javafe_ast_Expr () Int) +(declare-fun T_java_util_Hashtable () Int) +(declare-fun T_java_util_Dictionary () Int) +(declare-fun T_java_util_Map () Int) +(declare-fun T_java_io_Serializable () Int) +(declare-fun T_javafe_ast_NewArrayExpr () Int) +(declare-fun T_javafe_ast_StmtPragma () Int) +(declare-fun T_javafe_ast_MethodInvocation () Int) +(declare-fun T_java_lang_Float () Int) +(declare-fun T_java_lang_Number () Int) +(declare-fun T_java_lang_Comparable () Int) +(declare-fun T_javafe_ast_Name () Int) +(declare-fun T_javafe_ast_InitBlock () Int) +(declare-fun T_javafe_ast_TypeDeclElem () Int) +(declare-fun T_javafe_tc_Env () Int) +(declare-fun T_javafe_ast_Modifiers () Int) +(declare-fun T_javafe_tc_TagConstants () Int) +(declare-fun T_javafe_parser_TagConstants () Int) +(declare-fun T_javafe_ast_ObjectDesignator () Int) +(declare-fun T_javafe_ast_LocalVarDecl () Int) +(declare-fun T_javafe_ast_GenericVarDecl () Int) +(declare-fun T_java_lang__the_root_interface_ () Int) +(declare-fun T_javafe_tc_FieldDeclVec () Int) +(declare-fun T_javafe_ast_CatchClause () Int) +(declare-fun T_javafe_ast_GeneratedTags () Int) +(declare-fun T_javafe_ast_SwitchStmt () Int) +(declare-fun T_javafe_ast_GenericBlockStmt () Int) +(declare-fun T_javafe_ast_LexicalPragmaVec () Int) +(declare-fun T_javafe_ast_IdentifierVec () Int) +(declare-fun T_javafe_util_Assert () Int) +(declare-fun T_javafe_ast_FormalParaDeclVec () Int) +(declare-fun T_javafe_ast_IfStmt () Int) +(declare-fun T_java_lang_Boolean () Int) +(declare-fun T_java_lang_Long () Int) +(declare-fun T_javafe_ast_NewInstanceExpr () Int) +(declare-fun T_javafe_ast_LiteralExpr () Int) +(declare-fun T_javafe_ast_Identifier () Int) +(declare-fun T_java_util_EscjavaKeyValue () Int) +(declare-fun T_javafe_ast_SynchronizeStmt () Int) +(declare-fun T_javafe_ast_CastExpr () Int) +(declare-fun T_javafe_tc_MethodDeclVec () Int) +(declare-fun T_javafe_ast_SwitchLabel () Int) +(declare-fun T_javafe_ast_OnDemandImportDecl () Int) +(declare-fun T_javafe_ast_ImportDecl () Int) +(declare-fun T_javafe_ast_LexicalPragma () Int) +(declare-fun T_javafe_ast_StandardPrettyPrint () Int) +(declare-fun T_javafe_ast_PrettyPrint () Int) +(declare-fun T_javafe_ast_BinaryExpr () Int) +(declare-fun T_javafe_ast_TypeDeclElemVec () Int) +(declare-fun T_javafe_ast_ConstructorInvocation () Int) +(declare-fun T_javafe_ast_ThisExpr () Int) +(declare-fun T_javafe_ast_TryFinallyStmt () Int) +(declare-fun T_javafe_ast_TypeDecl () Int) +(declare-fun T_javafe_ast_TypeModifierPragma () Int) +(declare-fun T_javafe_ast_Type () Int) +(declare-fun T_javafe_ast_ModifierPragma () Int) +(declare-fun T_javafe_ast_SuperObjectDesignator () Int) +(declare-fun T_java_lang_Integer () Int) +(declare-fun T_javafe_ast_SingleTypeImportDecl () Int) +(declare-fun T_javafe_ast_ForStmt () Int) +(declare-fun T_javafe_ast_DoStmt () Int) +(declare-fun T_javafe_ast_ASTDecoration () Int) +(declare-fun T_javafe_ast_ExprObjectDesignator () Int) +(declare-fun T_javafe_ast_VarInitVec () Int) +(declare-fun T_javafe_ast_VariableAccess () Int) +(declare-fun T_javafe_ast_TypeDeclVec () Int) +(declare-fun T_javafe_ast_ThrowStmt () Int) +(declare-fun T_javafe_ast_StmtVec () Int) +(declare-fun T_javafe_ast_AmbiguousVariableAccess () Int) +(declare-fun T_java_io_OutputStream () Int) +(declare-fun T_javafe_ast_ClassDeclStmt () Int) +(declare-fun T_javafe_ast_PrimitiveType () Int) +(declare-fun T_java_lang_Character () Int) +(declare-fun T_javafe_ast_AmbiguousMethodInvocation () Int) +(declare-fun T_javafe_ast_TagConstants () Int) +(declare-fun T_javafe_ast_OperatorTags () Int) +(declare-fun T_javafe_ast_EvalStmt () Int) +(declare-fun T_javafe_ast_ClassDecl () Int) +(declare-fun T_javafe_ast_UnaryExpr () Int) +(declare-fun T_javafe_ast_TryCatchStmt () Int) +(declare-fun T_javafe_ast_FieldAccess () Int) +(declare-fun T_javafe_ast_CompilationUnit () Int) +(declare-fun T_javafe_ast_FieldDecl () Int) +(declare-fun T_java_lang_Double () Int) +(declare-fun T_javafe_ast_ClassLiteral () Int) +(declare-fun T_javafe_ast_VarInit () Int) +(declare-fun T_javafe_ast_ReturnStmt () Int) +(declare-fun T_javafe_ast_FormalParaDecl () Int) +(declare-fun T_javafe_ast_TypeDeclElemPragma () Int) +(declare-fun T_javafe_ast_RoutineDecl () Int) +(declare-fun T_javafe_ast_TypeObjectDesignator () Int) +(declare-fun T_javafe_ast_TypeNameVec () Int) +(declare-fun T_javafe_ast_ModifierPragmaVec () Int) +(declare-fun T_javafe_ast_VarDeclStmt () Int) +(declare-fun T_javafe_ast_ArrayRefExpr () Int) +(declare-fun T_javafe_ast_BreakStmt () Int) +(declare-fun T_javafe_ast_BranchStmt () Int) +(declare-fun T_java_lang_StringBuffer () Int) +(declare-fun T_javafe_ast_CatchClauseVec () Int) +(declare-fun T_javafe_tc_TypeSig () Int) +(declare-fun T_javafe_ast_TypeModifierPragmaVec () Int) +(declare-fun T_javafe_ast_CondExpr () Int) +(declare-fun T_javafe_ast_ArrayType () Int) +(declare-fun T_javafe_ast_CompoundName () Int) +(declare-fun T_javafe_ast_ArrayInit () Int) +(declare-fun T_javafe_ast_ImportDeclVec () Int) +(declare-fun T_javafe_ast_ExprVec () Int) +(declare-fun T_javafe_ast_WhileStmt () Int) +(declare-fun T_javafe_ast_BlockStmt () Int) +(declare-fun T_javafe_ast_ParenExpr () Int) +(declare-fun T_javafe_ast_MethodDecl () Int) +(declare-fun T_javafe_ast_InterfaceDecl () Int) +(declare-fun T_javafe_ast_ContinueStmt () Int) +(declare-fun T_javafe_ast_SimpleName () Int) +(declare-fun T_javafe_ast_SkipStmt () Int) +(declare-fun T_javafe_ast_ConstructorDecl () Int) +(declare-fun T_javafe_ast_LabelStmt () Int) +(declare-fun T_javafe_util_Location () Int) +(declare-fun T_javafe_ast_TypeName () Int) +(declare-fun DIST_ZERO_1 () Int) +(declare-fun T__TYPE () Int) +(declare-fun VARDECLSTMT_33_27_7 () Int) +(declare-fun AND_32_20_26 () Int) +(declare-fun PARENEXPR_33_54_7 () Int) +(declare-fun ASGURSHIFT_32_48_26 () Int) +(declare-fun noTokens_119_212_27 () Int) +(declare-fun NULLLIT_31_45_26 () Int) +(declare-fun SWITCHSTMT_33_26_7 () Int) +(declare-fun OR_32_19_26 () Int) +(declare-fun CASTEXPR_33_53_7 () Int) +(declare-fun ASGRSHIFT_32_47_26 () Int) +(declare-fun STRINGLIT_31_44_26 () Int) +(declare-fun BLOCKSTMT_33_25_7 () Int) +(declare-fun INSTANCEOFEXPR_33_52_7 () Int) +(declare-fun ASGLSHIFT_32_46_26 () Int) +(declare-fun DOUBLELIT_31_43_26 () Int) +(declare-fun TYPEMODIFIERPRAGMA_119_28_26 () Int) +(declare-fun FORMALPARADECL_33_24_7 () Int) +(declare-fun CONDEXPR_33_51_7 () Int) +(declare-fun ASGSUB_32_45_26 () Int) +(declare-fun FLOATLIT_31_42_26 () Int) +(declare-fun TYPEDECLELEMPRAGMA_119_27_26 () Int) +(declare-fun FIELDDECL_33_23_7 () Int) +(declare-fun NEWARRAYEXPR_33_50_7 () Int) +(declare-fun ASGADD_32_44_26 () Int) +(declare-fun CHARLIT_31_41_26 () Int) +(declare-fun STMTPRAGMA_119_26_26 () Int) +(declare-fun LOCALVARDECL_33_22_7 () Int) +(declare-fun NEWINSTANCEEXPR_33_49_7 () Int) +(declare-fun ASGREM_32_43_26 () Int) +(declare-fun LONGLIT_31_40_26 () Int) +(declare-fun MODIFIERPRAGMA_119_25_26 () Int) +(declare-fun INITBLOCK_33_21_7 () Int) +(declare-fun ARRAYREFEXPR_33_48_7 () Int) +(declare-fun ASGDIV_32_42_26 () Int) +(declare-fun INTLIT_31_39_26 () Int) +(declare-fun LEXICALPRAGMA_119_24_26 () Int) +(declare-fun METHODDECL_33_20_7 () Int) +(declare-fun otherCodes_119_202_27 () Int) +(declare-fun THISEXPR_33_47_7 () Int) +(declare-fun ASGMUL_32_41_26 () Int) +(declare-fun BOOLEANLIT_31_38_26 () Int) +(declare-fun CONSTRUCTORDECL_33_19_7 () Int) +(declare-fun FIRST_KEYWORD_119_51_26 () Int) +(declare-fun ARRAYINIT_33_46_7 () Int) +(declare-fun ASSIGN_32_40_26 () Int) +(declare-fun SHORTTYPE_31_36_26 () Int) +(declare-fun INTERFACEDECL_33_18_7 () Int) +(declare-fun CATCHCLAUSE_33_45_7 () Int) +(declare-fun STAR_32_37_26 () Int) +(declare-fun BYTETYPE_31_35_26 () Int) +(declare-fun CLASSDECL_33_17_7 () Int) +(declare-fun CONSTRUCTORINVOCATION_33_44_7 () Int) +(declare-fun MOD_32_36_26 () Int) +(declare-fun TYPESIG_118_6_28 () Int) +(declare-fun NULLTYPE_31_34_26 () Int) +(declare-fun ONDEMANDIMPORTDECL_33_16_7 () Int) +(declare-fun TRYCATCHSTMT_33_43_7 () Int) +(declare-fun DIV_32_35_26 () Int) +(declare-fun VOIDTYPE_31_33_26 () Int) +(declare-fun SINGLETYPEIMPORTDECL_33_15_7 () Int) +(declare-fun TRYFINALLYSTMT_33_42_7 () Int) +(declare-fun SUB_32_34_26 () Int) +(declare-fun DOUBLETYPE_31_32_26 () Int) +(declare-fun MIN_VALUE_105_39_30 () Int) +(declare-fun neg2147483648 () Int) +(declare-fun COMPILATIONUNIT_33_14_7 () Int) +(declare-fun SWITCHLABEL_33_41_7 () Int) +(declare-fun ADD_32_33_26 () Int) +(declare-fun FLOATTYPE_31_31_26 () Int) +(declare-fun otherStrings_119_193_30 () Int) +(declare-fun SKIPSTMT_33_40_7 () Int) +(declare-fun URSHIFT_32_32_26 () Int) +(declare-fun COMPOUNDNAME_33_67_7 () Int) +(declare-fun CHARTYPE_31_30_26 () Int) +(declare-fun FORSTMT_33_39_7 () Int) +(declare-fun RSHIFT_32_31_26 () Int) +(declare-fun SIMPLENAME_33_66_7 () Int) +(declare-fun LONGTYPE_31_29_26 () Int) +(declare-fun IFSTMT_33_38_7 () Int) +(declare-fun LSHIFT_32_30_26 () Int) +(declare-fun ARRAYTYPE_33_65_7 () Int) +(declare-fun INTTYPE_31_28_26 () Int) +(declare-fun POSTFIXDEC_32_63_26 () Int) +(declare-fun LABELSTMT_33_37_7 () Int) +(declare-fun LT_32_29_26 () Int) +(declare-fun TYPENAME_33_64_7 () Int) +(declare-fun BOOLEANTYPE_31_27_26 () Int) +(declare-fun POSTFIXINC_32_62_26 () Int) +(declare-fun CONTINUESTMT_33_36_7 () Int) +(declare-fun LE_32_28_26 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_33_63_7 () Int) +(declare-fun IDENT_31_25_26 () Int) +(declare-fun DEC_32_59_26 () Int) +(declare-fun BREAKSTMT_33_35_7 () Int) +(declare-fun GT_32_27_26 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_33_62_7 () Int) +(declare-fun INC_32_58_26 () Int) +(declare-fun THROWSTMT_33_34_7 () Int) +(declare-fun GE_32_26_26 () Int) +(declare-fun EXPROBJECTDESIGNATOR_33_61_7 () Int) +(declare-fun BITNOT_32_57_26 () Int) +(declare-fun RETURNSTMT_33_33_7 () Int) +(declare-fun punctuationCodes_119_164_19 () Int) +(declare-fun punctuationStrings_119_134_22 () Int) +(declare-fun EQ_32_25_26 () Int) +(declare-fun CLASSLITERAL_33_60_7 () Int) +(declare-fun NOT_32_56_26 () Int) +(declare-fun EVALSTMT_33_32_7 () Int) +(declare-fun NE_32_24_26 () Int) +(declare-fun METHODINVOCATION_33_59_7 () Int) +(declare-fun LAST_KEYWORD_119_103_26 () Int) +(declare-fun UNARYSUB_32_55_26 () Int) +(declare-fun MIN_VALUE_107_38_29 () Int) +(declare-fun neg9223372036854775808 () Int) +(declare-fun keywordStrings_119_181_30 () Int) +(declare-fun SYNCHRONIZESTMT_33_31_7 () Int) +(declare-fun NULL_119_82_26 () Int) +(declare-fun BITAND_32_23_26 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_33_58_7 () Int) +(declare-fun UNARYADD_32_54_26 () Int) +(declare-fun DOSTMT_33_30_7 () Int) +(declare-fun BITXOR_32_22_26 () Int) +(declare-fun FIELDACCESS_33_57_7 () Int) +(declare-fun ASGBITXOR_32_51_26 () Int) +(declare-fun WHILESTMT_33_29_7 () Int) +(declare-fun BITOR_32_21_26 () Int) +(declare-fun VARIABLEACCESS_33_56_7 () Int) +(declare-fun NULL_116_60_26 () Int) +(declare-fun ASGBITOR_32_50_26 () Int) +(declare-fun CLASSDECLSTMT_33_28_7 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_33_55_7 () Int) +(declare-fun ASGBITAND_32_49_26 () Int) +(assert (let ((?v_0 (array T_int)) (?v_1 (array T_java_lang_String))) (and (= (PO_LT T_javafe_ast_Stmt T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Stmt (asChild T_javafe_ast_Stmt T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_InstanceOfExpr (asChild T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr)) (= (PO_LT T_java_util_Hashtable T_java_util_Dictionary) true_term) (= T_java_util_Hashtable (asChild T_java_util_Hashtable T_java_util_Dictionary)) (= (PO_LT T_java_util_Hashtable T_java_util_Map) true_term) (= (PO_LT T_java_util_Hashtable T_java_lang_Cloneable) true_term) (= (PO_LT T_java_util_Hashtable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_NewArrayExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewArrayExpr (asChild T_javafe_ast_NewArrayExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_StmtPragma T_javafe_ast_Stmt) true_term) (= T_javafe_ast_StmtPragma (asChild T_javafe_ast_StmtPragma T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_MethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_MethodInvocation (asChild T_javafe_ast_MethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_java_lang_Float T_java_lang_Number) true_term) (= T_java_lang_Float (asChild T_java_lang_Float T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Float) true_term) (= ?t T_java_lang_Float))) (= (PO_LT T_java_lang_Float T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_Name T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Name (asChild T_javafe_ast_Name T_javafe_ast_ASTNode)) (= (PO_LT T_java_io_Serializable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_InitBlock (asChild T_javafe_ast_InitBlock T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_tc_Env T_java_lang_Object) true_term) (= T_javafe_tc_Env (asChild T_javafe_tc_Env T_java_lang_Object)) (= (PO_LT T_javafe_ast_Modifiers T_java_lang_Object) true_term) (= T_javafe_ast_Modifiers (asChild T_javafe_ast_Modifiers T_java_lang_Object)) (= (PO_LT T_javafe_tc_TagConstants T_javafe_parser_TagConstants) true_term) (= T_javafe_tc_TagConstants (asChild T_javafe_tc_TagConstants T_javafe_parser_TagConstants)) (= (PO_LT T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ObjectDesignator (asChild T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Object) true_term) (= T_javafe_ast_ASTNode (asChild T_javafe_ast_ASTNode T_java_lang_Object)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Cloneable) true_term) (= (PO_LT T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_LocalVarDecl (asChild T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_java_lang__the_root_interface_ T_java_lang_Object) true_term) (= (PO_LT T_javafe_tc_FieldDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_FieldDeclVec (asChild T_javafe_tc_FieldDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_CatchClause T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CatchClause (asChild T_javafe_ast_CatchClause T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_GeneratedTags T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_SwitchStmt (asChild T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_LexicalPragmaVec T_java_lang_Object) true_term) (= T_javafe_ast_LexicalPragmaVec (asChild T_javafe_ast_LexicalPragmaVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_IdentifierVec T_java_lang_Object) true_term) (= T_javafe_ast_IdentifierVec (asChild T_javafe_ast_IdentifierVec T_java_lang_Object)) (= (PO_LT T_java_lang_Comparable T_java_lang_Object) true_term) (= (PO_LT T_javafe_util_Assert T_java_lang_Object) true_term) (= T_javafe_util_Assert (asChild T_javafe_util_Assert T_java_lang_Object)) (= (PO_LT T_javafe_ast_FormalParaDeclVec T_java_lang_Object) true_term) (= T_javafe_ast_FormalParaDeclVec (asChild T_javafe_ast_FormalParaDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_IfStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_IfStmt (asChild T_javafe_ast_IfStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_lang_Boolean T_java_lang_Object) true_term) (= T_java_lang_Boolean (asChild T_java_lang_Boolean T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Boolean) true_term) (= ?t T_java_lang_Boolean))) (= (PO_LT T_java_lang_Boolean T_java_io_Serializable) true_term) (= (PO_LT T_java_lang_Long T_java_lang_Number) true_term) (= T_java_lang_Long (asChild T_java_lang_Long T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Long) true_term) (= ?t T_java_lang_Long))) (= (PO_LT T_java_lang_Long T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewInstanceExpr (asChild T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_LiteralExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_LiteralExpr (asChild T_javafe_ast_LiteralExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_Identifier T_java_lang_Object) true_term) (= T_javafe_ast_Identifier (asChild T_javafe_ast_Identifier T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_javafe_ast_Identifier) true_term) (= ?t T_javafe_ast_Identifier))) (= (PO_LT T_java_util_Map T_java_lang_Object) true_term) (= (PO_LT T_java_util_Map T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SynchronizeStmt (asChild T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_CastExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CastExpr (asChild T_javafe_ast_CastExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_tc_MethodDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_MethodDeclVec (asChild T_javafe_tc_MethodDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_SwitchLabel T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SwitchLabel (asChild T_javafe_ast_SwitchLabel T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_OnDemandImportDecl (asChild T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_javafe_ast_LexicalPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_LexicalPragma (asChild T_javafe_ast_LexicalPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_StandardPrettyPrint T_javafe_ast_PrettyPrint) true_term) (= T_javafe_ast_StandardPrettyPrint (asChild T_javafe_ast_StandardPrettyPrint T_javafe_ast_PrettyPrint)) (= (PO_LT T_javafe_ast_BinaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_BinaryExpr (asChild T_javafe_ast_BinaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TypeDeclElemVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeDeclElemVec (asChild T_javafe_ast_TypeDeclElemVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ConstructorInvocation (asChild T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ThisExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ThisExpr (asChild T_javafe_ast_ThisExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryFinallyStmt (asChild T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeDecl (asChild T_javafe_ast_TypeDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_TypeModifierPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeModifierPragma (asChild T_javafe_ast_TypeModifierPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_Type T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Type (asChild T_javafe_ast_Type T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ModifierPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ModifierPragma (asChild T_javafe_ast_ModifierPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_SuperObjectDesignator (asChild T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_java_lang_Integer T_java_lang_Number) true_term) (= T_java_lang_Integer (asChild T_java_lang_Integer T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Integer) true_term) (= ?t T_java_lang_Integer))) (= (PO_LT T_java_lang_Integer T_java_lang_Comparable) true_term) (= (PO_LT T_java_lang_Number T_java_lang_Object) true_term) (= T_java_lang_Number (asChild T_java_lang_Number T_java_lang_Object)) (= (PO_LT T_java_lang_Number T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_SingleTypeImportDecl (asChild T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_javafe_ast_ImportDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ImportDecl (asChild T_javafe_ast_ImportDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ForStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ForStmt (asChild T_javafe_ast_ForStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_DoStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_DoStmt (asChild T_javafe_ast_DoStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ASTDecoration T_java_lang_Object) true_term) (= T_javafe_ast_ASTDecoration (asChild T_javafe_ast_ASTDecoration T_java_lang_Object)) (= (PO_LT T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_ExprObjectDesignator (asChild T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_VarInitVec T_java_lang_Object) true_term) (= T_javafe_ast_VarInitVec (asChild T_javafe_ast_VarInitVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_VariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_VariableAccess (asChild T_javafe_ast_VariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TypeDeclVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeDeclVec (asChild T_javafe_ast_TypeDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ThrowStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ThrowStmt (asChild T_javafe_ast_ThrowStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_StmtVec T_java_lang_Object) true_term) (= T_javafe_ast_StmtVec (asChild T_javafe_ast_StmtVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousVariableAccess (asChild T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr)) (= (PO_LT T_java_io_OutputStream T_java_lang_Object) true_term) (= T_java_io_OutputStream (asChild T_java_io_OutputStream T_java_lang_Object)) (= (PO_LT T_java_util_Dictionary T_java_lang_Object) true_term) (= T_java_util_Dictionary (asChild T_java_util_Dictionary T_java_lang_Object)) (= (PO_LT T_java_util_Dictionary T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_GenericVarDecl (asChild T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ClassDeclStmt (asChild T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_PrettyPrint T_java_lang_Object) true_term) (= T_javafe_ast_PrettyPrint (asChild T_javafe_ast_PrettyPrint T_java_lang_Object)) (= (PO_LT T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_GenericBlockStmt (asChild T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_PrimitiveType T_javafe_ast_Type) true_term) (= T_javafe_ast_PrimitiveType (asChild T_javafe_ast_PrimitiveType T_javafe_ast_Type)) (= (PO_LT T_java_lang_Character T_java_lang_Object) true_term) (= T_java_lang_Character (asChild T_java_lang_Character T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Character) true_term) (= ?t T_java_lang_Character))) (= (PO_LT T_java_lang_Character T_java_io_Serializable) true_term) (= (PO_LT T_java_lang_Character T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_TypeDeclElem T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousMethodInvocation (asChild T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TagConstants T_javafe_ast_OperatorTags) true_term) (= T_javafe_ast_TagConstants (asChild T_javafe_ast_TagConstants T_javafe_ast_OperatorTags)) (= (PO_LT T_javafe_ast_EvalStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_EvalStmt (asChild T_javafe_ast_EvalStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_ClassDecl (asChild T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_UnaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_UnaryExpr (asChild T_javafe_ast_UnaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryCatchStmt (asChild T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_FieldAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_FieldAccess (asChild T_javafe_ast_FieldAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CompilationUnit (asChild T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FieldDecl (asChild T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_java_lang_Double T_java_lang_Number) true_term) (= T_java_lang_Double (asChild T_java_lang_Double T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Double) true_term) (= ?t T_java_lang_Double))) (= (PO_LT T_java_lang_Double T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_ClassLiteral T_javafe_ast_Expr) true_term) (= T_javafe_ast_ClassLiteral (asChild T_javafe_ast_ClassLiteral T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_VarInit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_VarInit (asChild T_javafe_ast_VarInit T_javafe_ast_ASTNode)) (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_ReturnStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ReturnStmt (asChild T_javafe_ast_ReturnStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FormalParaDecl (asChild T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_TypeDeclElemPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeDeclElemPragma (asChild T_javafe_ast_TypeDeclElemPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeDeclElemPragma T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_RoutineDecl (asChild T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_TypeObjectDesignator (asChild T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_TypeNameVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeNameVec (asChild T_javafe_ast_TypeNameVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ModifierPragmaVec T_java_lang_Object) true_term) (= T_javafe_ast_ModifierPragmaVec (asChild T_javafe_ast_ModifierPragmaVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_VarDeclStmt (asChild T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ArrayRefExpr (asChild T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_BreakStmt (asChild T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_javafe_ast_OperatorTags T_java_lang_Object) true_term) (= T_javafe_ast_OperatorTags (asChild T_javafe_ast_OperatorTags T_java_lang_Object)) (= (PO_LT T_javafe_ast_OperatorTags T_javafe_ast_GeneratedTags) true_term) (= (PO_LT T_java_lang_StringBuffer T_java_lang_Object) true_term) (= T_java_lang_StringBuffer (asChild T_java_lang_StringBuffer T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_StringBuffer) true_term) (= ?t T_java_lang_StringBuffer))) (= (PO_LT T_java_lang_StringBuffer T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_CatchClauseVec T_java_lang_Object) true_term) (= T_javafe_ast_CatchClauseVec (asChild T_javafe_ast_CatchClauseVec T_java_lang_Object)) (= (PO_LT T_javafe_tc_TypeSig T_javafe_ast_Type) true_term) (= T_javafe_tc_TypeSig (asChild T_javafe_tc_TypeSig T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_TypeModifierPragmaVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeModifierPragmaVec (asChild T_javafe_ast_TypeModifierPragmaVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_CondExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CondExpr (asChild T_javafe_ast_CondExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ArrayType T_javafe_ast_Type) true_term) (= T_javafe_ast_ArrayType (asChild T_javafe_ast_ArrayType T_javafe_ast_Type)) (= (PO_LT T_javafe_parser_TagConstants T_javafe_ast_TagConstants) true_term) (= T_javafe_parser_TagConstants (asChild T_javafe_parser_TagConstants T_javafe_ast_TagConstants)) (= (PO_LT T_javafe_ast_CompoundName T_javafe_ast_Name) true_term) (= T_javafe_ast_CompoundName (asChild T_javafe_ast_CompoundName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_ArrayInit T_javafe_ast_VarInit) true_term) (= T_javafe_ast_ArrayInit (asChild T_javafe_ast_ArrayInit T_javafe_ast_VarInit)) (= (PO_LT T_javafe_ast_ImportDeclVec T_java_lang_Object) true_term) (= T_javafe_ast_ImportDeclVec (asChild T_javafe_ast_ImportDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ExprVec T_java_lang_Object) true_term) (= T_javafe_ast_ExprVec (asChild T_javafe_ast_ExprVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_WhileStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_WhileStmt (asChild T_javafe_ast_WhileStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_BlockStmt (asChild T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_ParenExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ParenExpr (asChild T_javafe_ast_ParenExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_MethodDecl (asChild T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_InterfaceDecl (asChild T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_ContinueStmt (asChild T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_javafe_ast_SimpleName T_javafe_ast_Name) true_term) (= T_javafe_ast_SimpleName (asChild T_javafe_ast_SimpleName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_Expr T_javafe_ast_VarInit) true_term) (= T_javafe_ast_Expr (asChild T_javafe_ast_Expr T_javafe_ast_VarInit)) (= (PO_LT T_java_lang_String T_java_lang_Object) true_term) (= T_java_lang_String (asChild T_java_lang_String T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_String) true_term) (= ?t T_java_lang_String))) (= (PO_LT T_java_lang_String T_java_io_Serializable) true_term) (= (PO_LT T_java_lang_String T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_SkipStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SkipStmt (asChild T_javafe_ast_SkipStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_ConstructorDecl (asChild T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_java_util_EscjavaKeyValue T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_LabelStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_LabelStmt (asChild T_javafe_ast_LabelStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_BranchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_BranchStmt (asChild T_javafe_ast_BranchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_util_Location T_java_lang_Object) true_term) (= T_javafe_util_Location (asChild T_javafe_util_Location T_java_lang_Object)) (= (PO_LT T_javafe_ast_TypeName T_javafe_ast_Type) true_term) (= T_javafe_ast_TypeName (asChild T_javafe_ast_TypeName T_javafe_ast_Type)) (and (= arrayType (+ DIST_ZERO_1 0)) (= T_boolean (+ DIST_ZERO_1 1)) (= T_char (+ DIST_ZERO_1 2)) (= T_byte (+ DIST_ZERO_1 3)) (= T_short (+ DIST_ZERO_1 4)) (= T_int (+ DIST_ZERO_1 5)) (= T_long (+ DIST_ZERO_1 6)) (= T_float (+ DIST_ZERO_1 7)) (= T_double (+ DIST_ZERO_1 8)) (= T__TYPE (+ DIST_ZERO_1 9)) (= T_javafe_ast_Stmt (+ DIST_ZERO_1 10)) (= T_javafe_ast_InstanceOfExpr (+ DIST_ZERO_1 11)) (= T_java_util_Hashtable (+ DIST_ZERO_1 12)) (= T_javafe_ast_NewArrayExpr (+ DIST_ZERO_1 13)) (= T_javafe_ast_StmtPragma (+ DIST_ZERO_1 14)) (= T_javafe_ast_MethodInvocation (+ DIST_ZERO_1 15)) (= T_java_lang_Float (+ DIST_ZERO_1 16)) (= T_javafe_ast_Name (+ DIST_ZERO_1 17)) (= T_java_io_Serializable (+ DIST_ZERO_1 18)) (= T_javafe_ast_InitBlock (+ DIST_ZERO_1 19)) (= T_javafe_tc_Env (+ DIST_ZERO_1 20)) (= T_javafe_ast_Modifiers (+ DIST_ZERO_1 21)) (= T_javafe_tc_TagConstants (+ DIST_ZERO_1 22)) (= T_javafe_ast_ObjectDesignator (+ DIST_ZERO_1 23)) (= T_javafe_ast_ASTNode (+ DIST_ZERO_1 24)) (= T_javafe_ast_LocalVarDecl (+ DIST_ZERO_1 25)) (= T_java_lang__the_root_interface_ (+ DIST_ZERO_1 26)) (= T_javafe_tc_FieldDeclVec (+ DIST_ZERO_1 27)) (= T_javafe_ast_CatchClause (+ DIST_ZERO_1 28)) (= T_javafe_ast_GeneratedTags (+ DIST_ZERO_1 29)) (= T_javafe_ast_SwitchStmt (+ DIST_ZERO_1 30)) (= T_javafe_ast_LexicalPragmaVec (+ DIST_ZERO_1 31)) (= T_javafe_ast_IdentifierVec (+ DIST_ZERO_1 32)) (= T_java_lang_Comparable (+ DIST_ZERO_1 33)) (= T_javafe_util_Assert (+ DIST_ZERO_1 34)) (= T_javafe_ast_FormalParaDeclVec (+ DIST_ZERO_1 35)) (= T_javafe_ast_IfStmt (+ DIST_ZERO_1 36)) (= T_java_lang_Boolean (+ DIST_ZERO_1 37)) (= T_java_lang_Long (+ DIST_ZERO_1 38)) (= T_javafe_ast_NewInstanceExpr (+ DIST_ZERO_1 39)) (= T_javafe_ast_LiteralExpr (+ DIST_ZERO_1 40)) (= T_java_lang_Object (+ DIST_ZERO_1 41)) (= T_javafe_ast_Identifier (+ DIST_ZERO_1 42)) (= T_java_util_Map (+ DIST_ZERO_1 43)) (= T_javafe_ast_SynchronizeStmt (+ DIST_ZERO_1 44)) (= T_javafe_ast_CastExpr (+ DIST_ZERO_1 45)) (= T_javafe_tc_MethodDeclVec (+ DIST_ZERO_1 46)) (= T_javafe_ast_SwitchLabel (+ DIST_ZERO_1 47)) (= T_javafe_ast_OnDemandImportDecl (+ DIST_ZERO_1 48)) (= T_javafe_ast_LexicalPragma (+ DIST_ZERO_1 49)) (= T_javafe_ast_StandardPrettyPrint (+ DIST_ZERO_1 50)) (= T_javafe_ast_BinaryExpr (+ DIST_ZERO_1 51)) (= T_javafe_ast_TypeDeclElemVec (+ DIST_ZERO_1 52)) (= T_javafe_ast_ConstructorInvocation (+ DIST_ZERO_1 53)) (= T_javafe_ast_ThisExpr (+ DIST_ZERO_1 54)) (= T_javafe_ast_TryFinallyStmt (+ DIST_ZERO_1 55)) (= T_javafe_ast_TypeDecl (+ DIST_ZERO_1 56)) (= T_javafe_ast_TypeModifierPragma (+ DIST_ZERO_1 57)) (= T_javafe_ast_Type (+ DIST_ZERO_1 58)) (= T_javafe_ast_ModifierPragma (+ DIST_ZERO_1 59)) (= T_javafe_ast_SuperObjectDesignator (+ DIST_ZERO_1 60)) (= T_java_lang_Integer (+ DIST_ZERO_1 61)) (= T_java_lang_Number (+ DIST_ZERO_1 62)) (= T_javafe_ast_SingleTypeImportDecl (+ DIST_ZERO_1 63)) (= T_javafe_ast_ImportDecl (+ DIST_ZERO_1 64)) (= T_javafe_ast_ForStmt (+ DIST_ZERO_1 65)) (= T_javafe_ast_DoStmt (+ DIST_ZERO_1 66)) (= T_javafe_ast_ASTDecoration (+ DIST_ZERO_1 67)) (= T_javafe_ast_ExprObjectDesignator (+ DIST_ZERO_1 68)) (= T_javafe_ast_VarInitVec (+ DIST_ZERO_1 69)) (= T_javafe_ast_VariableAccess (+ DIST_ZERO_1 70)) (= T_javafe_ast_TypeDeclVec (+ DIST_ZERO_1 71)) (= T_javafe_ast_ThrowStmt (+ DIST_ZERO_1 72)) (= T_javafe_ast_StmtVec (+ DIST_ZERO_1 73)) (= T_javafe_ast_AmbiguousVariableAccess (+ DIST_ZERO_1 74)) (= T_java_io_OutputStream (+ DIST_ZERO_1 75)) (= T_java_util_Dictionary (+ DIST_ZERO_1 76)) (= T_javafe_ast_GenericVarDecl (+ DIST_ZERO_1 77)) (= T_javafe_ast_ClassDeclStmt (+ DIST_ZERO_1 78)) (= T_javafe_ast_PrettyPrint (+ DIST_ZERO_1 79)) (= T_javafe_ast_GenericBlockStmt (+ DIST_ZERO_1 80)) (= T_javafe_ast_PrimitiveType (+ DIST_ZERO_1 81)) (= T_java_lang_Character (+ DIST_ZERO_1 82)) (= T_javafe_ast_TypeDeclElem (+ DIST_ZERO_1 83)) (= T_javafe_ast_AmbiguousMethodInvocation (+ DIST_ZERO_1 84)) (= T_javafe_ast_TagConstants (+ DIST_ZERO_1 85)) (= T_javafe_ast_EvalStmt (+ DIST_ZERO_1 86)) (= T_javafe_ast_ClassDecl (+ DIST_ZERO_1 87)) (= T_javafe_ast_UnaryExpr (+ DIST_ZERO_1 88)) (= T_javafe_ast_TryCatchStmt (+ DIST_ZERO_1 89)) (= T_javafe_ast_FieldAccess (+ DIST_ZERO_1 90)) (= T_javafe_ast_CompilationUnit (+ DIST_ZERO_1 91)) (= T_javafe_ast_FieldDecl (+ DIST_ZERO_1 92)) (= T_java_lang_Double (+ DIST_ZERO_1 93)) (= T_javafe_ast_ClassLiteral (+ DIST_ZERO_1 94)) (= T_javafe_ast_VarInit (+ DIST_ZERO_1 95)) (= T_java_lang_Cloneable (+ DIST_ZERO_1 96)) (= T_javafe_ast_ReturnStmt (+ DIST_ZERO_1 97)) (= T_javafe_ast_FormalParaDecl (+ DIST_ZERO_1 98)) (= T_javafe_ast_TypeDeclElemPragma (+ DIST_ZERO_1 99)) (= T_javafe_ast_RoutineDecl (+ DIST_ZERO_1 100)) (= T_javafe_ast_TypeObjectDesignator (+ DIST_ZERO_1 101)) (= T_javafe_ast_TypeNameVec (+ DIST_ZERO_1 102)) (= T_javafe_ast_ModifierPragmaVec (+ DIST_ZERO_1 103)) (= T_javafe_ast_VarDeclStmt (+ DIST_ZERO_1 104)) (= T_javafe_ast_ArrayRefExpr (+ DIST_ZERO_1 105)) (= T_javafe_ast_BreakStmt (+ DIST_ZERO_1 106)) (= T_javafe_ast_OperatorTags (+ DIST_ZERO_1 107)) (= T_java_lang_StringBuffer (+ DIST_ZERO_1 108)) (= T_javafe_ast_CatchClauseVec (+ DIST_ZERO_1 109)) (= T_javafe_tc_TypeSig (+ DIST_ZERO_1 110)) (= T_javafe_ast_TypeModifierPragmaVec (+ DIST_ZERO_1 111)) (= T_javafe_ast_CondExpr (+ DIST_ZERO_1 112)) (= T_javafe_ast_ArrayType (+ DIST_ZERO_1 113)) (= T_javafe_parser_TagConstants (+ DIST_ZERO_1 114)) (= T_javafe_ast_CompoundName (+ DIST_ZERO_1 115)) (= T_javafe_ast_ArrayInit (+ DIST_ZERO_1 116)) (= T_javafe_ast_ImportDeclVec (+ DIST_ZERO_1 117)) (= T_javafe_ast_ExprVec (+ DIST_ZERO_1 118)) (= T_javafe_ast_WhileStmt (+ DIST_ZERO_1 119)) (= T_javafe_ast_BlockStmt (+ DIST_ZERO_1 120)) (= T_javafe_ast_ParenExpr (+ DIST_ZERO_1 121)) (= T_javafe_ast_MethodDecl (+ DIST_ZERO_1 122)) (= T_javafe_ast_InterfaceDecl (+ DIST_ZERO_1 123)) (= T_javafe_ast_ContinueStmt (+ DIST_ZERO_1 124)) (= T_javafe_ast_SimpleName (+ DIST_ZERO_1 125)) (= T_javafe_ast_Expr (+ DIST_ZERO_1 126)) (= T_java_lang_String (+ DIST_ZERO_1 127)) (= T_javafe_ast_SkipStmt (+ DIST_ZERO_1 128)) (= T_javafe_ast_ConstructorDecl (+ DIST_ZERO_1 129)) (= T_java_util_EscjavaKeyValue (+ DIST_ZERO_1 130)) (= T_javafe_ast_LabelStmt (+ DIST_ZERO_1 131)) (= T_javafe_ast_BranchStmt (+ DIST_ZERO_1 132)) (= T_javafe_util_Location (+ DIST_ZERO_1 133)) (= T_javafe_ast_TypeName (+ DIST_ZERO_1 134))) (= true_term (is VARDECLSTMT_33_27_7 T_int)) (= VARDECLSTMT_33_27_7 13) (= true_term (is AND_32_20_26 T_int)) (= AND_32_20_26 55) (= true_term (is PARENEXPR_33_54_7 T_int)) (= PARENEXPR_33_54_7 40) (= true_term (is ASGURSHIFT_32_48_26 T_int)) (= ASGURSHIFT_32_48_26 81) (= true_term (is noTokens_119_212_27 T_int)) (= true_term (is NULLLIT_31_45_26 T_int)) (= NULLLIT_31_45_26 111) (= true_term (is SWITCHSTMT_33_26_7 T_int)) (= SWITCHSTMT_33_26_7 12) (= true_term (is OR_32_19_26 T_int)) (= OR_32_19_26 54) (= true_term (is CASTEXPR_33_53_7 T_int)) (= CASTEXPR_33_53_7 39) (= true_term (is ASGRSHIFT_32_47_26 T_int)) (= ASGRSHIFT_32_47_26 80) (= true_term (is STRINGLIT_31_44_26 T_int)) (= STRINGLIT_31_44_26 110) (= true_term (is BLOCKSTMT_33_25_7 T_int)) (= BLOCKSTMT_33_25_7 11) (= true_term (is INSTANCEOFEXPR_33_52_7 T_int)) (= INSTANCEOFEXPR_33_52_7 38) (= true_term (is ASGLSHIFT_32_46_26 T_int)) (= ASGLSHIFT_32_46_26 79) (= true_term (is DOUBLELIT_31_43_26 T_int)) (= DOUBLELIT_31_43_26 109) (= true_term (is TYPEMODIFIERPRAGMA_119_28_26 T_int)) (= TYPEMODIFIERPRAGMA_119_28_26 118) (= true_term (is FORMALPARADECL_33_24_7 T_int)) (= FORMALPARADECL_33_24_7 10) (= true_term (is CONDEXPR_33_51_7 T_int)) (= CONDEXPR_33_51_7 37) (= true_term (is ASGSUB_32_45_26 T_int)) (= ASGSUB_32_45_26 78) (= true_term (is FLOATLIT_31_42_26 T_int)) (= FLOATLIT_31_42_26 108) (= true_term (is TYPEDECLELEMPRAGMA_119_27_26 T_int)) (= TYPEDECLELEMPRAGMA_119_27_26 117) (= true_term (is FIELDDECL_33_23_7 T_int)) (= FIELDDECL_33_23_7 9) (= true_term (is NEWARRAYEXPR_33_50_7 T_int)) (= NEWARRAYEXPR_33_50_7 36) (= true_term (is ASGADD_32_44_26 T_int)) (= ASGADD_32_44_26 77) (= true_term (is CHARLIT_31_41_26 T_int)) (= CHARLIT_31_41_26 107) (= true_term (is STMTPRAGMA_119_26_26 T_int)) (= STMTPRAGMA_119_26_26 116) (= true_term (is LOCALVARDECL_33_22_7 T_int)) (= LOCALVARDECL_33_22_7 8) (= true_term (is NEWINSTANCEEXPR_33_49_7 T_int)) (= NEWINSTANCEEXPR_33_49_7 35) (= true_term (is ASGREM_32_43_26 T_int)) (= ASGREM_32_43_26 76) (= true_term (is LONGLIT_31_40_26 T_int)) (= LONGLIT_31_40_26 106) (= true_term (is MODIFIERPRAGMA_119_25_26 T_int)) (= MODIFIERPRAGMA_119_25_26 115) (= true_term (is INITBLOCK_33_21_7 T_int)) (= INITBLOCK_33_21_7 7) (= true_term (is ARRAYREFEXPR_33_48_7 T_int)) (= ARRAYREFEXPR_33_48_7 34) (= true_term (is ASGDIV_32_42_26 T_int)) (= ASGDIV_32_42_26 75) (= true_term (is INTLIT_31_39_26 T_int)) (= INTLIT_31_39_26 105) (= true_term (is LEXICALPRAGMA_119_24_26 T_int)) (= LEXICALPRAGMA_119_24_26 114) (= true_term (is METHODDECL_33_20_7 T_int)) (= METHODDECL_33_20_7 6) (= true_term (is otherCodes_119_202_27 ?v_0)) (not (= otherCodes_119_202_27 null)) (= (typeof otherCodes_119_202_27) ?v_0) (= (arrayLength otherCodes_119_202_27) 15) (= true_term (is THISEXPR_33_47_7 T_int)) (= THISEXPR_33_47_7 33) (= true_term (is ASGMUL_32_41_26 T_int)) (= ASGMUL_32_41_26 74) (= true_term (is BOOLEANLIT_31_38_26 T_int)) (= BOOLEANLIT_31_38_26 104) (= true_term (is CONSTRUCTORDECL_33_19_7 T_int)) (= CONSTRUCTORDECL_33_19_7 5) (= true_term (is FIRST_KEYWORD_119_51_26 T_int)) (= FIRST_KEYWORD_119_51_26 133) (= true_term (is ARRAYINIT_33_46_7 T_int)) (= ARRAYINIT_33_46_7 32) (= true_term (is ASSIGN_32_40_26 T_int)) (= ASSIGN_32_40_26 73) (= true_term (is SHORTTYPE_31_36_26 T_int)) (= SHORTTYPE_31_36_26 103) (= true_term (is INTERFACEDECL_33_18_7 T_int)) (= INTERFACEDECL_33_18_7 4) (= true_term (is CATCHCLAUSE_33_45_7 T_int)) (= CATCHCLAUSE_33_45_7 31) (= true_term (is STAR_32_37_26 T_int)) (= STAR_32_37_26 72) (= true_term (is BYTETYPE_31_35_26 T_int)) (= BYTETYPE_31_35_26 102) (= true_term (is CLASSDECL_33_17_7 T_int)) (= CLASSDECL_33_17_7 3) (= true_term (is CONSTRUCTORINVOCATION_33_44_7 T_int)) (= CONSTRUCTORINVOCATION_33_44_7 30) (= true_term (is MOD_32_36_26 T_int)) (= MOD_32_36_26 71) (= true_term (is TYPESIG_118_6_28 T_int)) (= TYPESIG_118_6_28 184) (= true_term (is NULLTYPE_31_34_26 T_int)) (= NULLTYPE_31_34_26 101) (= true_term (is ONDEMANDIMPORTDECL_33_16_7 T_int)) (= ONDEMANDIMPORTDECL_33_16_7 2) (= true_term (is TRYCATCHSTMT_33_43_7 T_int)) (= TRYCATCHSTMT_33_43_7 29) (= true_term (is DIV_32_35_26 T_int)) (= DIV_32_35_26 70) (= true_term (is VOIDTYPE_31_33_26 T_int)) (= VOIDTYPE_31_33_26 100) (= true_term (is SINGLETYPEIMPORTDECL_33_15_7 T_int)) (= SINGLETYPEIMPORTDECL_33_15_7 1) (= true_term (is TRYFINALLYSTMT_33_42_7 T_int)) (= TRYFINALLYSTMT_33_42_7 28) (= true_term (is SUB_32_34_26 T_int)) (= SUB_32_34_26 69) (= true_term (is DOUBLETYPE_31_32_26 T_int)) (= DOUBLETYPE_31_32_26 99) (= true_term (is MIN_VALUE_105_39_30 T_int)) (= MIN_VALUE_105_39_30 neg2147483648) (= true_term (is COMPILATIONUNIT_33_14_7 T_int)) (= COMPILATIONUNIT_33_14_7 0) (= true_term (is SWITCHLABEL_33_41_7 T_int)) (= SWITCHLABEL_33_41_7 27) (= true_term (is ADD_32_33_26 T_int)) (= ADD_32_33_26 68) (= true_term (is FLOATTYPE_31_31_26 T_int)) (= FLOATTYPE_31_31_26 98) (= true_term (is otherStrings_119_193_30 ?v_1)) (not (= otherStrings_119_193_30 null)) (= (typeof otherStrings_119_193_30) ?v_1) (= (arrayLength otherStrings_119_193_30) 15) (= true_term (is SKIPSTMT_33_40_7 T_int)) (= SKIPSTMT_33_40_7 26) (= true_term (is URSHIFT_32_32_26 T_int)) (= URSHIFT_32_32_26 67) (= true_term (is COMPOUNDNAME_33_67_7 T_int)) (= COMPOUNDNAME_33_67_7 53) (= true_term (is CHARTYPE_31_30_26 T_int)) (= CHARTYPE_31_30_26 97) (= true_term (is FORSTMT_33_39_7 T_int)) (= FORSTMT_33_39_7 25) (= true_term (is RSHIFT_32_31_26 T_int)) (= RSHIFT_32_31_26 66) (= true_term (is SIMPLENAME_33_66_7 T_int)) (= SIMPLENAME_33_66_7 52) (= true_term (is LONGTYPE_31_29_26 T_int)) (= LONGTYPE_31_29_26 96) (= true_term (is IFSTMT_33_38_7 T_int)) (= IFSTMT_33_38_7 24) (= true_term (is LSHIFT_32_30_26 T_int)) (= LSHIFT_32_30_26 65) (= true_term (is ARRAYTYPE_33_65_7 T_int)) (= ARRAYTYPE_33_65_7 51) (= true_term (is INTTYPE_31_28_26 T_int)) (= INTTYPE_31_28_26 95) (= true_term (is POSTFIXDEC_32_63_26 T_int)) (= POSTFIXDEC_32_63_26 92) (= true_term (is LABELSTMT_33_37_7 T_int)) (= LABELSTMT_33_37_7 23) (= true_term (is LT_32_29_26 T_int)) (= LT_32_29_26 64) (= true_term (is TYPENAME_33_64_7 T_int)) (= TYPENAME_33_64_7 50) (= true_term (is BOOLEANTYPE_31_27_26 T_int)) (= BOOLEANTYPE_31_27_26 94) (= true_term (is POSTFIXINC_32_62_26 T_int)) (= POSTFIXINC_32_62_26 91) (= true_term (is CONTINUESTMT_33_36_7 T_int)) (= CONTINUESTMT_33_36_7 22) (= true_term (is LE_32_28_26 T_int)) (= LE_32_28_26 63) (= true_term (is SUPEROBJECTDESIGNATOR_33_63_7 T_int)) (= SUPEROBJECTDESIGNATOR_33_63_7 49) (= true_term (is IDENT_31_25_26 T_int)) (= IDENT_31_25_26 93) (= true_term (is DEC_32_59_26 T_int)) (= DEC_32_59_26 90) (= true_term (is BREAKSTMT_33_35_7 T_int)) (= BREAKSTMT_33_35_7 21) (= true_term (is GT_32_27_26 T_int)) (= GT_32_27_26 62) (= true_term (is TYPEOBJECTDESIGNATOR_33_62_7 T_int)) (= TYPEOBJECTDESIGNATOR_33_62_7 48) (= true_term (is INC_32_58_26 T_int)) (= INC_32_58_26 89) (= true_term (is THROWSTMT_33_34_7 T_int)) (= THROWSTMT_33_34_7 20) (= true_term (is GE_32_26_26 T_int)) (= GE_32_26_26 61) (= true_term (is EXPROBJECTDESIGNATOR_33_61_7 T_int)) (= EXPROBJECTDESIGNATOR_33_61_7 47) (= true_term (is BITNOT_32_57_26 T_int)) (= BITNOT_32_57_26 88) (= true_term (is RETURNSTMT_33_33_7 T_int)) (= RETURNSTMT_33_33_7 19) (= true_term (is punctuationCodes_119_164_19 ?v_0)) (not (= punctuationCodes_119_164_19 null)) (= (typeof punctuationCodes_119_164_19) ?v_0) (= (arrayLength punctuationCodes_119_164_19) 48) (= true_term (is punctuationStrings_119_134_22 ?v_1)) (not (= punctuationStrings_119_134_22 null)) (= (typeof punctuationStrings_119_134_22) ?v_1) (= (arrayLength punctuationStrings_119_134_22) 48) (= true_term (is EQ_32_25_26 T_int)) (= EQ_32_25_26 60) (= true_term (is CLASSLITERAL_33_60_7 T_int)) (= CLASSLITERAL_33_60_7 46) (= true_term (is NOT_32_56_26 T_int)) (= NOT_32_56_26 87) (= true_term (is EVALSTMT_33_32_7 T_int)) (= EVALSTMT_33_32_7 18) (= true_term (is NE_32_24_26 T_int)) (= NE_32_24_26 59) (= true_term (is METHODINVOCATION_33_59_7 T_int)) (= METHODINVOCATION_33_59_7 45) (= true_term (is LAST_KEYWORD_119_103_26 T_int)) (= LAST_KEYWORD_119_103_26 183) (= true_term (is UNARYSUB_32_55_26 T_int)) (= UNARYSUB_32_55_26 86) (= true_term (is MIN_VALUE_107_38_29 T_long)) (= MIN_VALUE_107_38_29 neg9223372036854775808) (= true_term (is keywordStrings_119_181_30 ?v_1)) (not (= keywordStrings_119_181_30 null)) (= (typeof keywordStrings_119_181_30) ?v_1) (= (arrayLength keywordStrings_119_181_30) 51) (= true_term (is SYNCHRONIZESTMT_33_31_7 T_int)) (= SYNCHRONIZESTMT_33_31_7 17) (= true_term (is NULL_119_82_26 T_int)) (= NULL_119_82_26 163) (= true_term (is BITAND_32_23_26 T_int)) (= BITAND_32_23_26 58) (= true_term (is AMBIGUOUSMETHODINVOCATION_33_58_7 T_int)) (= AMBIGUOUSMETHODINVOCATION_33_58_7 44) (= true_term (is UNARYADD_32_54_26 T_int)) (= UNARYADD_32_54_26 85) (= true_term (is DOSTMT_33_30_7 T_int)) (= DOSTMT_33_30_7 16) (= true_term (is BITXOR_32_22_26 T_int)) (= BITXOR_32_22_26 57) (= true_term (is FIELDACCESS_33_57_7 T_int)) (= FIELDACCESS_33_57_7 43) (= true_term (is ASGBITXOR_32_51_26 T_int)) (= ASGBITXOR_32_51_26 84) (= true_term (is WHILESTMT_33_29_7 T_int)) (= WHILESTMT_33_29_7 15) (= true_term (is BITOR_32_21_26 T_int)) (= BITOR_32_21_26 56) (= true_term (is VARIABLEACCESS_33_56_7 T_int)) (= VARIABLEACCESS_33_56_7 42) (= true_term (is NULL_116_60_26 T_int)) (= NULL_116_60_26 0) (= true_term (is ASGBITOR_32_50_26 T_int)) (= ASGBITOR_32_50_26 83) (= true_term (is CLASSDECLSTMT_33_28_7 T_int)) (= CLASSDECLSTMT_33_28_7 14) (= true_term (is AMBIGUOUSVARIABLEACCESS_33_55_7 T_int)) (= AMBIGUOUSVARIABLEACCESS_33_55_7 41) (= true_term (is ASGBITAND_32_49_26 T_int)) (= ASGBITAND_32_49_26 82)))) +(declare-fun S_1068_58 () Int) +(declare-fun S_1068_13 () Int) +(declare-fun loc_pre_71_29_13 () Int) +(declare-fun loc_71_29_13 () Int) +(declare-fun loc_pre_68_33_13 () Int) +(declare-fun loc_68_33_13 () Int) +(declare-fun VARDECLSTMT_pre_33_27_7 () Int) +(declare-fun name_pre_96_20_28 () Int) +(declare-fun name_96_20_28 () Int) +(declare-fun tag_pre_117_30_13 () Int) +(declare-fun tag_117_30_13 () Int) +(declare-fun label_pre_58_15_34 () Int) +(declare-fun label_58_15_34 () Int) +(declare-fun type_pre_87_32_32 () Int) +(declare-fun type_87_32_32 () Int) +(declare-fun locOp_pre_93_43_13 () Int) +(declare-fun locOp_93_43_13 () Int) +(declare-fun locOpenParen_pre_101_28_13 () Int) +(declare-fun locOpenParen_101_28_13 () Int) +(declare-fun name_pre_100_25_28 () Int) +(declare-fun name_100_25_28 () Int) +(declare-fun args_pre_70_51_31 () Int) +(declare-fun args_70_51_31 () Int) +(declare-fun AND_pre_32_20_26 () Int) +(declare-fun PARENEXPR_pre_33_54_7 () Int) +(declare-fun loc_pre_55_20_13 () Int) +(declare-fun loc_55_20_13 () Int) +(declare-fun ASGURSHIFT_pre_32_48_26 () Int) +(declare-fun id_pre_97_19_34 () Int) +(declare-fun id_97_19_34 () Int) +(declare-fun noTokens_pre_119_212_27 () Int) +(declare-fun count_pre_26_67_33 () Int) +(declare-fun count_26_67_33 () Int) +(declare-fun NULLLIT_pre_31_45_26 () Int) +(declare-fun modifiers_pre_24_28_13 () Int) +(declare-fun modifiers_24_28_13 () Int) +(declare-fun locGuardOpenParen_pre_49_23_13 () Int) +(declare-fun locGuardOpenParen_49_23_13 () Int) +(declare-fun type_pre_91_18_28 () Int) +(declare-fun type_91_18_28 () Int) +(declare-fun SWITCHSTMT_pre_33_26_7 () Int) +(declare-fun tmodifiers_pre_21_30_33 () Int) +(declare-fun tmodifiers_21_30_33 () Int) +(declare-fun OR_pre_32_19_26 () Int) +(declare-fun specOnly_pre_24_26_17 () Int) +(declare-fun specOnly_24_26_17 () Int) +(declare-fun CASTEXPR_pre_33_53_7 () Int) +(declare-fun pmodifiers_pre_76_26_27 () Int) +(declare-fun pmodifiers_76_26_27 () Int) +(declare-fun loc_pre_90_21_13 () Int) +(declare-fun loc_90_21_13 () Int) +(declare-fun ASGRSHIFT_pre_32_47_26 () Int) +(declare-fun locCloseParen_pre_95_21_13 () Int) +(declare-fun locCloseParen_95_21_13 () Int) +(declare-fun count_pre_84_67_33 () Int) +(declare-fun count_84_67_33 () Int) +(declare-fun STRINGLIT_pre_31_44_26 () Int) +(declare-fun hasParent_pre_25_149_30 () Int) +(declare-fun hasParent_25_149_30 () Int) +(declare-fun BLOCKSTMT_pre_33_25_7 () Int) +(declare-fun modifiers_pre_76_24_13 () Int) +(declare-fun modifiers_76_24_13 () Int) +(declare-fun locFinally_pre_59_25_13 () Int) +(declare-fun locFinally_59_25_13 () Int) +(declare-fun locDot_pre_87_29_13 () Int) +(declare-fun locDot_87_29_13 () Int) +(declare-fun locDot_pre_92_23_13 () Int) +(declare-fun locDot_92_23_13 () Int) +(declare-fun locOpenParen_pre_70_48_13 () Int) +(declare-fun locOpenParen_70_48_13 () Int) +(declare-fun loc_pre_162_20_13 () Int) +(declare-fun loc_162_20_13 () Int) +(declare-fun syntax_pre_21_28_29 () Int) +(declare-fun syntax_21_28_29 () Int) +(declare-fun INSTANCEOFEXPR_pre_33_52_7 () Int) +(declare-fun ASGLSHIFT_pre_32_46_26 () Int) +(declare-fun implicit_pre_76_23_17 () Int) +(declare-fun implicit_76_23_17 () Int) +(declare-fun dims_pre_88_45_31 () Int) +(declare-fun dims_88_45_31 () Int) +(declare-fun count_pre_46_67_33 () Int) +(declare-fun count_46_67_33 () Int) +(declare-fun DOUBLELIT_pre_31_43_26 () Int) +(declare-fun TYPEMODIFIERPRAGMA_pre_119_28_26 () Int) +(declare-fun classPrefix_pre_71_25_14 () Int) +(declare-fun classPrefix_71_25_14 () Int) +(declare-fun init_pre_73_20_17 () Int) +(declare-fun init_73_20_17 () Int) +(declare-fun body_pre_68_30_28 () Int) +(declare-fun body_68_30_28 () Int) +(declare-fun FORMALPARADECL_pre_33_24_7 () Int) +(declare-fun tag_pre_85_32_13 () Int) +(declare-fun tag_85_32_13 () Int) +(declare-fun elements_pre_82_61_47 () Int) +(declare-fun elements_82_61_47 () Int) +(declare-fun locId_pre_101_25_13 () Int) +(declare-fun locId_101_25_13 () Int) +(declare-fun parent_pre_76_21_18 () Int) +(declare-fun parent_76_21_18 () Int) +(declare-fun CONDEXPR_pre_33_51_7 () Int) +(declare-fun ASGSUB_pre_32_45_26 () Int) +(declare-fun stmt_pre_55_17_33 () Int) +(declare-fun stmt_55_17_33 () Int) +(declare-fun parent_pre_73_18_18 () Int) +(declare-fun parent_73_18_18 () Int) +(declare-fun right_pre_93_40_28 () Int) +(declare-fun right_93_40_28 () Int) +(declare-fun parent_pre_24_59_18 () Int) +(declare-fun parent_24_59_18 () Int) +(declare-fun FLOATLIT_pre_31_42_26 () Int) +(declare-fun TYPEDECLELEMPRAGMA_pre_119_27_26 () Int) +(declare-fun pkgName_pre_22_15_28 () Int) +(declare-fun pkgName_22_15_28 () Int) +(declare-fun FIELDDECL_pre_33_23_7 () Int) +(declare-fun loc_pre_6_30_13 () Int) +(declare-fun loc_6_30_13 () Int) +(declare-fun NEWARRAYEXPR_pre_33_50_7 () Int) +(declare-fun elements_pre_17_61_39 () Int) +(declare-fun elements_17_61_39 () Int) +(declare-fun loc_pre_85_50_13 () Int) +(declare-fun loc_85_50_13 () Int) +(declare-fun ASGADD_pre_32_44_26 () Int) +(declare-fun type_pre_90_18_28 () Int) +(declare-fun type_90_18_28 () Int) +(declare-fun value_pre_29_91_31 () Int) +(declare-fun value_29_91_31 () Int) +(declare-fun CHARLIT_pre_31_41_26 () Int) +(declare-fun STMTPRAGMA_pre_119_26_26 () Int) +(declare-fun count_pre_61_67_33 () Int) +(declare-fun count_61_67_33 () Int) +(declare-fun expr_pre_91_15_28 () Int) +(declare-fun expr_91_15_28 () Int) +(declare-fun forUpdate_pre_68_28_31 () Int) +(declare-fun forUpdate_68_28_31 () Int) +(declare-fun LOCALVARDECL_pre_33_22_7 () Int) +(declare-fun elements_pre_155_61_39 () Int) +(declare-fun elements_155_61_39 () Int) +(declare-fun locKeyword_pre_70_45_13 () Int) +(declare-fun locKeyword_70_45_13 () Int) +(declare-fun NEWINSTANCEEXPR_pre_33_49_7 () Int) +(declare-fun count_pre_35_67_33 () Int) +(declare-fun count_35_67_33 () Int) +(declare-fun expr_pre_55_15_28 () Int) +(declare-fun expr_55_15_28 () Int) +(declare-fun ASGREM_pre_32_43_26 () Int) +(declare-fun left_pre_93_38_28 () Int) +(declare-fun left_93_38_28 () Int) +(declare-fun loc_pre_49_20_13 () Int) +(declare-fun loc_49_20_13 () Int) +(declare-fun loc_pre_59_22_13 () Int) +(declare-fun loc_59_22_13 () Int) +(declare-fun LONGLIT_pre_31_40_26 () Int) +(declare-fun MODIFIERPRAGMA_pre_119_25_26 () Int) +(declare-fun locCloseBracket_pre_86_23_13 () Int) +(declare-fun locCloseBracket_86_23_13 () Int) +(declare-fun enclosingInstance_pre_87_25_14 () Int) +(declare-fun enclosingInstance_87_25_14 () Int) +(declare-fun INITBLOCK_pre_33_21_7 () Int) +(declare-fun locOpenParen_pre_95_18_13 () Int) +(declare-fun locOpenParen_95_18_13 () Int) +(declare-fun elements_pre_14_61_42 () Int) +(declare-fun elements_14_61_42 () Int) +(declare-fun count_pre_77_67_33 () Int) +(declare-fun count_77_67_33 () Int) +(declare-fun ARRAYREFEXPR_pre_33_48_7 () Int) +(declare-fun ASGDIV_pre_32_42_26 () Int) +(declare-fun type_pre_92_20_28 () Int) +(declare-fun type_92_20_28 () Int) +(declare-fun INTLIT_pre_31_39_26 () Int) +(declare-fun locCloseBrace_pre_24_54_13 () Int) +(declare-fun locCloseBrace_24_54_13 () Int) +(declare-fun LEXICALPRAGMA_pre_119_24_26 () Int) +(declare-fun id_pre_101_20_34 () Int) +(declare-fun id_101_20_34 () Int) +(declare-fun test_pre_68_26_28 () Int) +(declare-fun test_68_26_28 () Int) +(declare-fun displayInferred_pre_4_73_26 () Int) +(declare-fun displayInferred_4_73_26 () Int) +(declare-fun METHODDECL_pre_33_20_7 () Int) +(declare-fun otherCodes_pre_119_202_27 () Int) +(declare-fun count_pre_143_67_33 () Int) +(declare-fun count_143_67_33 () Int) +(declare-fun elements_pre_23_61_37 () Int) +(declare-fun elements_23_61_37 () Int) +(declare-fun THISEXPR_pre_33_47_7 () Int) +(declare-fun ASGMUL_pre_32_41_26 () Int) +(declare-fun value_pre_85_45_16 () Int) +(declare-fun value_85_45_16 () Int) +(declare-fun elems_pre_6_27_35 () Int) +(declare-fun elems_6_27_35 () Int) +(declare-fun op_pre_93_35_13 () Int) +(declare-fun op_93_35_13 () Int) +(declare-fun parent_pre_79_18_18 () Int) +(declare-fun parent_79_18_18 () Int) +(declare-fun loc_pre_60_23_13 () Int) +(declare-fun loc_60_23_13 () Int) +(declare-fun BOOLEANLIT_pre_31_38_26 () Int) +(declare-fun CONSTRUCTORDECL_pre_33_19_7 () Int) +(declare-fun loc_pre_51_22_13 () Int) +(declare-fun loc_51_22_13 () Int) +(declare-fun locOpenBracket_pre_81_21_13 () Int) +(declare-fun locOpenBracket_81_21_13 () Int) +(declare-fun FIRST_KEYWORD_pre_119_51_26 () Int) +(declare-fun ARRAYINIT_pre_33_46_7 () Int) +(declare-fun ASSIGN_pre_32_40_26 () Int) +(declare-fun expr_pre_90_15_28 () Int) +(declare-fun expr_90_15_28 () Int) +(declare-fun INDENT_pre_4_65_22 () Int) +(declare-fun INDENT_4_65_22 () Int) +(declare-fun locDot_pre_70_41_13 () Int) +(declare-fun locDot_70_41_13 () Int) +(declare-fun ids_pre_163_19_37 () Int) +(declare-fun ids_163_19_37 () Int) +(declare-fun stmt_pre_49_17_28 () Int) +(declare-fun stmt_49_17_28 () Int) +(declare-fun finallyClause_pre_59_19_28 () Int) +(declare-fun finallyClause_59_19_28 () Int) +(declare-fun init_pre_88_35_19 () Int) +(declare-fun init_88_35_19 () Int) +(declare-fun SHORTTYPE_pre_31_36_26 () Int) +(declare-fun od_pre_101_18_40 () Int) +(declare-fun od_101_18_40 () Int) +(declare-fun forInit_pre_68_24_31 () Int) +(declare-fun forInit_68_24_31 () Int) +(declare-fun decl_pre_98_28_19 () Int) +(declare-fun decl_98_28_19 () Int) +(declare-fun INTERFACEDECL_pre_33_18_7 () Int) +(declare-fun expr_pre_95_15_28 () Int) +(declare-fun expr_95_15_28 () Int) +(declare-fun locOpenBracket_pre_86_20_13 () Int) +(declare-fun locOpenBracket_86_20_13 () Int) +(declare-fun CATCHCLAUSE_pre_33_45_7 () Int) +(declare-fun STAR_pre_32_37_26 () Int) +(declare-fun locOp_pre_94_32_13 () Int) +(declare-fun locOp_94_32_13 () Int) +(declare-fun length_pre_16_50_25 () Int) +(declare-fun length_16_50_25 () Int) +(declare-fun imports_pre_6_25_37 () Int) +(declare-fun imports_6_25_37 () Int) +(declare-fun BYTETYPE_pre_31_35_26 () Int) +(declare-fun locOpenBrace_pre_24_51_13 () Int) +(declare-fun locOpenBrace_24_51_13 () Int) +(declare-fun CLASSDECL_pre_33_17_7 () Int) +(declare-fun CONSTRUCTORINVOCATION_pre_33_44_7 () Int) +(declare-fun MOD_pre_32_36_26 () Int) +(declare-fun TYPESIG_pre_118_6_28 () Int) +(declare-fun expr_pre_49_15_28 () Int) +(declare-fun expr_49_15_28 () Int) +(declare-fun tryClause_pre_59_17_28 () Int) +(declare-fun tryClause_59_17_28 () Int) +(declare-fun NULLTYPE_pre_31_34_26 () Int) +(declare-fun count_pre_69_67_33 () Int) +(declare-fun count_69_67_33 () Int) +(declare-fun ONDEMANDIMPORTDECL_pre_33_16_7 () Int) +(declare-fun els_pre_51_19_28 () Int) +(declare-fun els_51_19_28 () Int) +(declare-fun loc_pre_50_20_13 () Int) +(declare-fun loc_50_20_13 () Int) +(declare-fun count_pre_154_67_33 () Int) +(declare-fun count_154_67_33 () Int) +(declare-fun locCloseBrace_pre_45_25_13 () Int) +(declare-fun locCloseBrace_45_25_13 () Int) +(declare-fun TRYCATCHSTMT_pre_33_43_7 () Int) +(declare-fun locType_pre_75_21_13 () Int) +(declare-fun locType_75_21_13 () Int) +(declare-fun DIV_pre_32_35_26 () Int) +(declare-fun loc_pre_44_18_13 () Int) +(declare-fun loc_44_18_13 () Int) +(declare-fun VOIDTYPE_pre_31_33_26 () Int) +(declare-fun catchClauses_pre_60_20_38 () Int) +(declare-fun catchClauses_60_20_38 () Int) +(declare-fun SINGLETYPEIMPORTDECL_pre_33_15_7 () Int) +(declare-fun lexicalPragmas_pre_6_23_26 () Int) +(declare-fun lexicalPragmas_6_23_26 () Int) +(declare-fun count_pre_38_67_33 () Int) +(declare-fun count_38_67_33 () Int) +(declare-fun loc_pre_40_18_13 () Int) +(declare-fun loc_40_18_13 () Int) +(declare-fun elements_pre_26_61_43 () Int) +(declare-fun elements_26_61_43 () Int) +(declare-fun TRYFINALLYSTMT_pre_33_42_7 () Int) +(declare-fun index_pre_86_17_28 () Int) +(declare-fun index_86_17_28 () Int) +(declare-fun SUB_pre_32_34_26 () Int) +(declare-fun expr_pre_94_29_28 () Int) +(declare-fun expr_94_29_28 () Int) +(declare-fun locCloseBrace_pre_83_24_13 () Int) +(declare-fun locCloseBrace_83_24_13 () Int) +(declare-fun loc_pre_62_22_13 () Int) +(declare-fun loc_62_22_13 () Int) +(declare-fun locId_pre_98_24_13 () Int) +(declare-fun locId_98_24_13 () Int) +(declare-fun DOUBLETYPE_pre_31_32_26 () Int) +(declare-fun MIN_VALUE_pre_105_39_30 () Int) +(declare-fun COMPILATIONUNIT_pre_33_14_7 () Int) +(declare-fun thn_pre_51_17_28 () Int) +(declare-fun thn_51_17_28 () Int) +(declare-fun elemType_pre_81_18_28 () Int) +(declare-fun elemType_81_18_28 () Int) +(declare-fun pkgName_pre_6_21_14 () Int) +(declare-fun pkgName_6_21_14 () Int) +(declare-fun enclosingInstance_pre_70_37_14 () Int) +(declare-fun enclosingInstance_70_37_14 () Int) +(declare-fun locId_pre_24_48_13 () Int) +(declare-fun locId_24_48_13 () Int) +(declare-fun elements_pre_84_61_36 () Int) +(declare-fun elements_84_61_36 () Int) +(declare-fun SWITCHLABEL_pre_33_41_7 () Int) +(declare-fun ADD_pre_32_33_26 () Int) +(declare-fun locDots_pre_163_31_29 () Int) +(declare-fun locDots_163_31_29 () Int) +(declare-fun typeName_pre_19_15_32 () Int) +(declare-fun typeName_19_15_32 () Int) +(declare-fun type_pre_88_24_28 () Int) +(declare-fun type_88_24_28 () Int) +(declare-fun type_pre_103_27_28 () Int) +(declare-fun type_103_27_28 () Int) +(declare-fun FLOATTYPE_pre_31_31_26 () Int) +(declare-fun name_pre_20_18_28 () Int) +(declare-fun name_20_18_28 () Int) +(declare-fun locId_pre_76_43_13 () Int) +(declare-fun locId_76_43_13 () Int) +(declare-fun otherStrings_pre_119_193_30 () Int) +(declare-fun stmt_pre_50_17_28 () Int) +(declare-fun stmt_50_17_28 () Int) +(declare-fun tryClause_pre_60_18_28 () Int) +(declare-fun tryClause_60_18_28 () Int) +(declare-fun elements_pre_46_61_33 () Int) +(declare-fun elements_46_61_33 () Int) +(declare-fun array_pre_86_15_28 () Int) +(declare-fun array_86_15_28 () Int) +(declare-fun SKIPSTMT_pre_33_40_7 () Int) +(declare-fun locOpenBrace_pre_45_22_13 () Int) +(declare-fun locOpenBrace_45_22_13 () Int) +(declare-fun op_pre_94_26_13 () Int) +(declare-fun op_94_26_13 () Int) +(declare-fun URSHIFT_pre_32_32_26 () Int) +(declare-fun expr_pre_44_15_28 () Int) +(declare-fun expr_44_15_28 () Int) +(declare-fun locOpenBrackets_pre_88_65_29 () Int) +(declare-fun locOpenBrackets_88_65_29 () Int) +(declare-fun COMPOUNDNAME_pre_33_67_7 () Int) +(declare-fun CHARTYPE_pre_31_30_26 () Int) +(declare-fun locId_pre_64_38_13 () Int) +(declare-fun locId_64_38_13 () Int) +(declare-fun expr_pre_51_15_28 () Int) +(declare-fun expr_51_15_28 () Int) +(declare-fun expr_pre_40_15_14 () Int) +(declare-fun expr_40_15_14 () Int) +(declare-fun FORSTMT_pre_33_39_7 () Int) +(declare-fun RSHIFT_pre_32_31_26 () Int) +(declare-fun body_pre_62_19_33 () Int) +(declare-fun body_62_19_33 () Int) +(declare-fun locOpenBrace_pre_83_21_13 () Int) +(declare-fun locOpenBrace_83_21_13 () Int) +(declare-fun id_pre_98_21_34 () Int) +(declare-fun id_98_21_34 () Int) +(declare-fun block_pre_74_28_33 () Int) +(declare-fun block_74_28_33 () Int) +(declare-fun SIMPLENAME_pre_33_66_7 () Int) +(declare-fun LONGTYPE_pre_31_29_26 () Int) +(declare-fun expr_pre_50_15_28 () Int) +(declare-fun expr_50_15_28 () Int) +(declare-fun locColon_pre_89_25_13 () Int) +(declare-fun locColon_89_25_13 () Int) +(declare-fun superClass_pre_34_15_18 () Int) +(declare-fun superClass_34_15_18 () Int) +(declare-fun returnType_pre_75_18_28 () Int) +(declare-fun returnType_75_18_28 () Int) +(declare-fun IFSTMT_pre_33_38_7 () Int) +(declare-fun elements_pre_61_61_40 () Int) +(declare-fun elements_61_61_40 () Int) +(declare-fun LSHIFT_pre_32_30_26 () Int) +(declare-fun self_pre_4_41_37 () Int) +(declare-fun self_4_41_37 () Int) +(declare-fun loc_pre_24_45_13 () Int) +(declare-fun loc_24_45_13 () Int) +(declare-fun ARRAYTYPE_pre_33_65_7 () Int) +(declare-fun INTTYPE_pre_31_28_26 () Int) +(declare-fun POSTFIXDEC_pre_32_63_26 () Int) +(declare-fun locOpenParen_pre_87_52_13 () Int) +(declare-fun locOpenParen_87_52_13 () Int) +(declare-fun elements_pre_35_61_37 () Int) +(declare-fun elements_35_61_37 () Int) +(declare-fun loc_pre_76_40_13 () Int) +(declare-fun loc_76_40_13 () Int) +(declare-fun LABELSTMT_pre_33_37_7 () Int) +(declare-fun stmts_pre_45_19_31 () Int) +(declare-fun stmts_45_19_31 () Int) +(declare-fun LT_pre_32_29_26 () Int) +(declare-fun arg_pre_62_17_38 () Int) +(declare-fun arg_62_17_38 () Int) +(declare-fun od_pre_98_19_40 () Int) +(declare-fun od_98_19_40 () Int) +(declare-fun pmodifiers_pre_74_26_27 () Int) +(declare-fun pmodifiers_74_26_27 () Int) +(declare-fun elements_pre_77_61_43 () Int) +(declare-fun elements_77_61_43 () Int) +(declare-fun TYPENAME_pre_33_64_7 () Int) +(declare-fun BOOLEANTYPE_pre_31_27_26 () Int) +(declare-fun POSTFIXINC_pre_32_62_26 () Int) +(declare-fun type_pre_64_35_28 () Int) +(declare-fun type_64_35_28 () Int) +(declare-fun init_pre_67_19_17 () Int) +(declare-fun init_67_19_17 () Int) +(declare-fun modifiers_pre_74_24_13 () Int) +(declare-fun modifiers_74_24_13 () Int) +(declare-fun CONTINUESTMT_pre_33_36_7 () Int) +(declare-fun LE_pre_32_28_26 () Int) +(declare-fun elems_pre_83_18_34 () Int) +(declare-fun elems_83_18_34 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_pre_33_63_7 () Int) +(declare-fun parent_pre_74_22_18 () Int) +(declare-fun parent_74_22_18 () Int) +(declare-fun IDENT_pre_31_25_26 () Int) +(declare-fun DEC_pre_32_59_26 () Int) +(declare-fun elements_pre_143_61_39 () Int) +(declare-fun elements_143_61_39 () Int) +(declare-fun count_pre_82_67_33 () Int) +(declare-fun count_82_67_33 () Int) +(declare-fun loc_pre_47_29_13 () Int) +(declare-fun loc_47_29_13 () Int) +(declare-fun tokenType_pre_37_90_8 () Int) +(declare-fun tokenType_37_90_8 () Int) +(declare-fun BREAKSTMT_pre_33_35_7 () Int) +(declare-fun loc_pre_43_18_13 () Int) +(declare-fun loc_43_18_13 () Int) +(declare-fun locQuestion_pre_89_22_13 () Int) +(declare-fun locQuestion_89_22_13 () Int) +(declare-fun GT_pre_32_27_26 () Int) +(declare-fun elems_pre_24_41_39 () Int) +(declare-fun elems_24_41_39 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_pre_33_62_7 () Int) +(declare-fun INC_pre_32_58_26 () Int) +(declare-fun loc_pre_87_49_13 () Int) +(declare-fun loc_87_49_13 () Int) +(declare-fun count_pre_17_67_33 () Int) +(declare-fun count_17_67_33 () Int) +(declare-fun id_pre_75_15_34 () Int) +(declare-fun id_75_15_34 () Int) +(declare-fun THROWSTMT_pre_33_34_7 () Int) +(declare-fun superCall_pre_70_24_17 () Int) +(declare-fun superCall_70_24_17 () Int) +(declare-fun GE_pre_32_26_26 () Int) +(declare-fun decl_pre_97_26_38 () Int) +(declare-fun decl_97_26_38 () Int) +(declare-fun EXPROBJECTDESIGNATOR_pre_33_61_7 () Int) +(declare-fun BITNOT_pre_32_57_26 () Int) +(declare-fun count_pre_155_67_33 () Int) +(declare-fun count_155_67_33 () Int) +(declare-fun RETURNSTMT_pre_33_33_7 () Int) +(declare-fun punctuationCodes_pre_119_164_19 () Int) +(declare-fun count_pre_14_67_33 () Int) +(declare-fun count_14_67_33 () Int) +(declare-fun punctuationStrings_pre_119_134_22 () Int) +(declare-fun EQ_pre_32_25_26 () Int) +(declare-fun loc_pre_53_18_13 () Int) +(declare-fun loc_53_18_13 () Int) +(declare-fun locDot_pre_99_21_13 () Int) +(declare-fun locDot_99_21_13 () Int) +(declare-fun CLASSLITERAL_pre_33_60_7 () Int) +(declare-fun locSuper_pre_161_20_13 () Int) +(declare-fun locSuper_161_20_13 () Int) +(declare-fun NOT_pre_32_56_26 () Int) +(declare-fun loc_pre_160_16_13 () Int) +(declare-fun loc_160_16_13 () Int) +(declare-fun locCloseParen_pre_91_24_13 () Int) +(declare-fun locCloseParen_91_24_13 () Int) +(declare-fun args_pre_100_32_31 () Int) +(declare-fun args_100_32_31 () Int) +(declare-fun decl_pre_101_34_20 () Int) +(declare-fun decl_101_34_20 () Int) +(declare-fun id_pre_64_32_34 () Int) +(declare-fun id_64_32_34 () Int) +(declare-fun expr_pre_47_26_14 () Int) +(declare-fun expr_47_26_14 () Int) +(declare-fun decl_pre_66_15_36 () Int) +(declare-fun decl_66_15_36 () Int) +(declare-fun locOpenParen_pre_55_23_13 () Int) +(declare-fun locOpenParen_55_23_13 () Int) +(declare-fun EVALSTMT_pre_33_32_7 () Int) +(declare-fun elements_pre_69_61_33 () Int) +(declare-fun elements_69_61_33 () Int) +(declare-fun owner_pre_5_35_28 () Int) +(declare-fun owner_5_35_28 () Int) +(declare-fun expr_pre_43_15_28 () Int) +(declare-fun expr_43_15_28 () Int) +(declare-fun NE_pre_32_24_26 () Int) +(declare-fun locId_pre_58_20_13 () Int) +(declare-fun locId_58_20_13 () Int) +(declare-fun elements_pre_154_61_38 () Int) +(declare-fun elements_154_61_38 () Int) +(declare-fun METHODINVOCATION_pre_33_59_7 () Int) +(declare-fun els_pre_89_19_28 () Int) +(declare-fun els_89_19_28 () Int) +(declare-fun LAST_KEYWORD_pre_119_103_26 () Int) +(declare-fun UNARYSUB_pre_32_55_26 () Int) +(declare-fun MIN_VALUE_pre_107_38_29 () Int) +(declare-fun anonDecl_pre_87_45_19 () Int) +(declare-fun anonDecl_87_45_19 () Int) +(declare-fun count_pre_23_67_33 () Int) +(declare-fun count_23_67_33 () Int) +(declare-fun loc_pre_18_18_13 () Int) +(declare-fun loc_18_18_13 () Int) +(declare-fun superInterfaces_pre_24_34_35 () Int) +(declare-fun superInterfaces_24_34_35 () Int) +(declare-fun keywordStrings_pre_119_181_30 () Int) +(declare-fun locOpenBrace_pre_76_36_13 () Int) +(declare-fun locOpenBrace_76_36_13 () Int) +(declare-fun SYNCHRONIZESTMT_pre_33_31_7 () Int) +(declare-fun NULL_pre_119_82_26 () Int) +(declare-fun BITAND_pre_32_23_26 () Int) +(declare-fun count_pre_29_99_33 () Int) +(declare-fun count_29_99_33 () Int) +(declare-fun elements_pre_38_61_41 () Int) +(declare-fun elements_38_61_41 () Int) +(declare-fun body_pre_76_34_19 () Int) +(declare-fun body_76_34_19 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_pre_33_58_7 () Int) +(declare-fun UNARYADD_pre_32_54_26 () Int) +(declare-fun pmodifiers_pre_64_30_27 () Int) +(declare-fun pmodifiers_64_30_27 () Int) +(declare-fun locOpenParen_pre_100_30_13 () Int) +(declare-fun locOpenParen_100_30_13 () Int) +(declare-fun locFirstSemi_pre_68_36_13 () Int) +(declare-fun locFirstSemi_68_36_13 () Int) +(declare-fun loc_pre_117_35_13 () Int) +(declare-fun loc_117_35_13 () Int) +(declare-fun raises_pre_76_32_35 () Int) +(declare-fun raises_76_32_35 () Int) +(declare-fun inst_pre_4_29_44 () Int) +(declare-fun inst_4_29_44 () Int) +(declare-fun DOSTMT_pre_33_30_7 () Int) +(declare-fun expr_pre_57_15_28 () Int) +(declare-fun expr_57_15_28 () Int) +(declare-fun BITXOR_pre_32_22_26 () Int) +(declare-fun modifiers_pre_64_28_13 () Int) +(declare-fun modifiers_64_28_13 () Int) +(declare-fun label_pre_53_15_20 () Int) +(declare-fun label_53_15_20 () Int) +(declare-fun FIELDACCESS_pre_33_57_7 () Int) +(declare-fun thn_pre_89_17_28 () Int) +(declare-fun thn_89_17_28 () Int) +(declare-fun ASGBITXOR_pre_32_51_26 () Int) +(declare-fun loc_pre_97_22_13 () Int) +(declare-fun loc_97_22_13 () Int) +(declare-fun locIds_pre_163_25_29 () Int) +(declare-fun locIds_163_25_29 () Int) +(declare-fun id_pre_24_32_34 () Int) +(declare-fun id_24_32_34 () Int) +(declare-fun locOpenParen_pre_91_21_13 () Int) +(declare-fun locOpenParen_91_21_13 () Int) +(declare-fun WHILESTMT_pre_33_29_7 () Int) +(declare-fun BITOR_pre_32_21_26 () Int) +(declare-fun stmt_pre_58_17_28 () Int) +(declare-fun stmt_58_17_28 () Int) +(declare-fun args_pre_101_30_31 () Int) +(declare-fun args_101_30_31 () Int) +(declare-fun args_pre_87_34_31 () Int) +(declare-fun args_87_34_31 () Int) +(declare-fun VARIABLEACCESS_pre_33_56_7 () Int) +(declare-fun NULL_pre_116_60_26 () Int) +(declare-fun ASGBITOR_pre_32_50_26 () Int) +(declare-fun inferred_pre_71_33_17 () Int) +(declare-fun inferred_71_33_17 () Int) +(declare-fun expr_pre_102_22_28 () Int) +(declare-fun expr_102_22_28 () Int) +(declare-fun decl_pre_65_15_33 () Int) +(declare-fun decl_65_15_33 () Int) +(declare-fun args_pre_76_30_41 () Int) +(declare-fun args_76_30_41 () Int) +(declare-fun CLASSDECLSTMT_pre_33_28_7 () Int) +(declare-fun test_pre_89_15_28 () Int) +(declare-fun test_89_15_28 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_pre_33_55_7 () Int) +(declare-fun ASGBITAND_pre_32_49_26 () Int) +(declare-fun loc_pre_88_49_13 () Int) +(declare-fun loc_88_49_13 () Int) +(declare-fun pmodifiers_pre_24_30_27 () Int) +(declare-fun pmodifiers_24_30_27 () Int) +(declare-fun elems_pre () Int) +(declare-fun elems () Int) +(declare-fun LS () Int) +(declare-fun alloc_pre () Int) +(declare-fun this () Int) +(declare-fun o_1067_33 () Int) +(declare-fun lp_1067_50 () Int) +(declare-fun RES_1068_42_1068_42 () Int) +(declare-fun EC_1068_42_1068_42 () Int) +(declare-fun ecReturn () Int) +(declare-fun s_1068_4_1068_4_4_381_50 () Int) +(declare-fun EC_1068_4_1068_4 () Int) +(declare-fun RES_1069_18_1069_18 () Int) +(declare-fun EC_1069_18_1069_18 () Int) +(declare-fun EC_1069_4_1069_4 () Int) +(assert (let ((?v_0 (array T_int)) (?v_1 (array T_java_lang_String)) (?v_6 (not (= o_1067_33 null))) (?v_2 (not (= lp_1067_50 null)))) (let ((?v_8 (not ?v_2)) (?v_11 (= true_term (is RES_1068_42_1068_42 T_int))) (?v_3 (= EC_1068_42_1068_42 ecReturn)) (?v_4 (= true_term (is lp_1067_50 T_javafe_ast_Type))) (?v_5 (not (= RES_1068_42_1068_42 NULL_116_60_26)))) (let ((?v_12 (=> (and ?v_3 (not (and ?v_4 ?v_2))) ?v_5)) (?v_13 (=> (and ?v_3 ?v_4 ?v_2 (= true_term (S_select syntax_21_28_29 (cast lp_1067_50 T_javafe_ast_Type)))) ?v_5)) (?v_7 (= s_1068_4_1068_4_4_381_50 (stringCat (stringCat S_1068_13 RES_1068_42_1068_42) S_1068_58))) (?v_14 (= EC_1068_4_1068_4 ecReturn)) (?v_15 (= true_term (is RES_1069_18_1069_18 T_java_lang_String))) (?v_16 (= true_term (isAllocated RES_1069_18_1069_18 alloc))) (?v_9 (= EC_1069_18_1069_18 ecReturn)) (?v_10 (not (= RES_1069_18_1069_18 null)))) (let ((?v_17 (=> ?v_9 ?v_10))) (not (=> (and true (not (= S_1068_58 null)) (= (typeof S_1068_58) T_java_lang_String) (not (= S_1068_13 null)) (= (typeof S_1068_13) T_java_lang_String) (< neg9223372036854775808 neg2147483648) (< neg2147483648 (- 1000000))) (=> (and (= loc_pre_71_29_13 loc_71_29_13) (= loc_71_29_13 (asField loc_71_29_13 T_int)) (= loc_pre_68_33_13 loc_68_33_13) (= loc_68_33_13 (asField loc_68_33_13 T_int)) (= VARDECLSTMT_pre_33_27_7 VARDECLSTMT_33_27_7) (= true_term (is VARDECLSTMT_33_27_7 T_int)) (= name_pre_96_20_28 name_96_20_28) (= name_96_20_28 (asField name_96_20_28 T_javafe_ast_Name)) (< (fClosedTime name_96_20_28) alloc) (forall ((?s Int)) (=> (not (= ?s null)) (not (= (S_select name_96_20_28 ?s) null)))) (= tag_pre_117_30_13 tag_117_30_13) (= tag_117_30_13 (asField tag_117_30_13 T_int)) (= label_pre_58_15_34 label_58_15_34) (= label_58_15_34 (asField label_58_15_34 T_javafe_ast_Identifier)) (< (fClosedTime label_58_15_34) alloc) (forall ((?s_1_ Int)) (=> (not (= ?s_1_ null)) (not (= (S_select label_58_15_34 ?s_1_) null)))) (= type_pre_87_32_32 type_87_32_32) (= type_87_32_32 (asField type_87_32_32 T_javafe_ast_TypeName)) (< (fClosedTime type_87_32_32) alloc) (forall ((?s_2_ Int)) (=> (not (= ?s_2_ null)) (not (= (S_select type_87_32_32 ?s_2_) null)))) (= locOp_pre_93_43_13 locOp_93_43_13) (= locOp_93_43_13 (asField locOp_93_43_13 T_int)) (= locOpenParen_pre_101_28_13 locOpenParen_101_28_13) (= locOpenParen_101_28_13 (asField locOpenParen_101_28_13 T_int)) (= name_pre_100_25_28 name_100_25_28) (= name_100_25_28 (asField name_100_25_28 T_javafe_ast_Name)) (< (fClosedTime name_100_25_28) alloc) (forall ((?s_3_ Int)) (=> (not (= ?s_3_ null)) (not (= (S_select name_100_25_28 ?s_3_) null)))) (= args_pre_70_51_31 args_70_51_31) (= args_70_51_31 (asField args_70_51_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_70_51_31) alloc) (forall ((?s_4_ Int)) (=> (not (= ?s_4_ null)) (not (= (S_select args_70_51_31 ?s_4_) null)))) (= AND_pre_32_20_26 AND_32_20_26) (= true_term (is AND_32_20_26 T_int)) (= PARENEXPR_pre_33_54_7 PARENEXPR_33_54_7) (= true_term (is PARENEXPR_33_54_7 T_int)) (= loc_pre_55_20_13 loc_55_20_13) (= loc_55_20_13 (asField loc_55_20_13 T_int)) (= ASGURSHIFT_pre_32_48_26 ASGURSHIFT_32_48_26) (= true_term (is ASGURSHIFT_32_48_26 T_int)) (= id_pre_97_19_34 id_97_19_34) (= id_97_19_34 (asField id_97_19_34 T_javafe_ast_Identifier)) (< (fClosedTime id_97_19_34) alloc) (forall ((?s_5_ Int)) (=> (not (= ?s_5_ null)) (not (= (S_select id_97_19_34 ?s_5_) null)))) (= noTokens_pre_119_212_27 noTokens_119_212_27) (= true_term (is noTokens_119_212_27 T_int)) (= count_pre_26_67_33 count_26_67_33) (= count_26_67_33 (asField count_26_67_33 T_int)) (= NULLLIT_pre_31_45_26 NULLLIT_31_45_26) (= true_term (is NULLLIT_31_45_26 T_int)) (= modifiers_pre_24_28_13 modifiers_24_28_13) (= modifiers_24_28_13 (asField modifiers_24_28_13 T_int)) (= locGuardOpenParen_pre_49_23_13 locGuardOpenParen_49_23_13) (= locGuardOpenParen_49_23_13 (asField locGuardOpenParen_49_23_13 T_int)) (= type_pre_91_18_28 type_91_18_28) (= type_91_18_28 (asField type_91_18_28 T_javafe_ast_Type)) (< (fClosedTime type_91_18_28) alloc) (forall ((?s_6_ Int)) (=> (not (= ?s_6_ null)) (not (= (S_select type_91_18_28 ?s_6_) null)))) (= SWITCHSTMT_pre_33_26_7 SWITCHSTMT_33_26_7) (= true_term (is SWITCHSTMT_33_26_7 T_int)) (= tmodifiers_pre_21_30_33 tmodifiers_21_30_33) (= tmodifiers_21_30_33 (asField tmodifiers_21_30_33 T_javafe_ast_TypeModifierPragmaVec)) (< (fClosedTime tmodifiers_21_30_33) alloc) (= OR_pre_32_19_26 OR_32_19_26) (= true_term (is OR_32_19_26 T_int)) (= specOnly_pre_24_26_17 specOnly_24_26_17) (= specOnly_24_26_17 (asField specOnly_24_26_17 T_boolean)) (= CASTEXPR_pre_33_53_7 CASTEXPR_33_53_7) (= true_term (is CASTEXPR_33_53_7 T_int)) (= pmodifiers_pre_76_26_27 pmodifiers_76_26_27) (= pmodifiers_76_26_27 (asField pmodifiers_76_26_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_76_26_27) alloc) (= loc_pre_90_21_13 loc_90_21_13) (= loc_90_21_13 (asField loc_90_21_13 T_int)) (= ASGRSHIFT_pre_32_47_26 ASGRSHIFT_32_47_26) (= true_term (is ASGRSHIFT_32_47_26 T_int)) (= locCloseParen_pre_95_21_13 locCloseParen_95_21_13) (= locCloseParen_95_21_13 (asField locCloseParen_95_21_13 T_int)) (= count_pre_84_67_33 count_84_67_33) (= count_84_67_33 (asField count_84_67_33 T_int)) (= STRINGLIT_pre_31_44_26 STRINGLIT_31_44_26) (= true_term (is STRINGLIT_31_44_26 T_int)) (= hasParent_pre_25_149_30 hasParent_25_149_30) (= hasParent_25_149_30 (asField hasParent_25_149_30 T_boolean)) (= BLOCKSTMT_pre_33_25_7 BLOCKSTMT_33_25_7) (= true_term (is BLOCKSTMT_33_25_7 T_int)) (= modifiers_pre_76_24_13 modifiers_76_24_13) (= modifiers_76_24_13 (asField modifiers_76_24_13 T_int)) (= locFinally_pre_59_25_13 locFinally_59_25_13) (= locFinally_59_25_13 (asField locFinally_59_25_13 T_int)) (= locDot_pre_87_29_13 locDot_87_29_13) (= locDot_87_29_13 (asField locDot_87_29_13 T_int)) (= locDot_pre_92_23_13 locDot_92_23_13) (= locDot_92_23_13 (asField locDot_92_23_13 T_int)) (= locOpenParen_pre_70_48_13 locOpenParen_70_48_13) (= locOpenParen_70_48_13 (asField locOpenParen_70_48_13 T_int)) (= loc_pre_162_20_13 loc_162_20_13) (= loc_162_20_13 (asField loc_162_20_13 T_int)) (= syntax_pre_21_28_29 syntax_21_28_29) (= syntax_21_28_29 (asField syntax_21_28_29 T_boolean)) (= INSTANCEOFEXPR_pre_33_52_7 INSTANCEOFEXPR_33_52_7) (= true_term (is INSTANCEOFEXPR_33_52_7 T_int)) (= ASGLSHIFT_pre_32_46_26 ASGLSHIFT_32_46_26) (= true_term (is ASGLSHIFT_32_46_26 T_int)) (= implicit_pre_76_23_17 implicit_76_23_17) (= implicit_76_23_17 (asField implicit_76_23_17 T_boolean)) (= dims_pre_88_45_31 dims_88_45_31) (= dims_88_45_31 (asField dims_88_45_31 T_javafe_ast_ExprVec)) (< (fClosedTime dims_88_45_31) alloc) (forall ((?s_7_ Int)) (=> (not (= ?s_7_ null)) (not (= (S_select dims_88_45_31 ?s_7_) null)))) (= count_pre_46_67_33 count_46_67_33) (= count_46_67_33 (asField count_46_67_33 T_int)) (= DOUBLELIT_pre_31_43_26 DOUBLELIT_31_43_26) (= true_term (is DOUBLELIT_31_43_26 T_int)) (= TYPEMODIFIERPRAGMA_pre_119_28_26 TYPEMODIFIERPRAGMA_119_28_26) (= true_term (is TYPEMODIFIERPRAGMA_119_28_26 T_int)) (= classPrefix_pre_71_25_14 classPrefix_71_25_14) (= classPrefix_71_25_14 (asField classPrefix_71_25_14 T_javafe_ast_Type)) (< (fClosedTime classPrefix_71_25_14) alloc) (= init_pre_73_20_17 init_73_20_17) (= init_73_20_17 (asField init_73_20_17 T_javafe_ast_VarInit)) (< (fClosedTime init_73_20_17) alloc) (= body_pre_68_30_28 body_68_30_28) (= body_68_30_28 (asField body_68_30_28 T_javafe_ast_Stmt)) (< (fClosedTime body_68_30_28) alloc) (forall ((?s_8_ Int)) (=> (not (= ?s_8_ null)) (not (= (S_select body_68_30_28 ?s_8_) null)))) (= FORMALPARADECL_pre_33_24_7 FORMALPARADECL_33_24_7) (= true_term (is FORMALPARADECL_33_24_7 T_int)) (= tag_pre_85_32_13 tag_85_32_13) (= tag_85_32_13 (asField tag_85_32_13 T_int)) (= elements_pre_82_61_47 elements_82_61_47) (= elements_82_61_47 (asField elements_82_61_47 (array T_javafe_ast_TypeModifierPragma))) (< (fClosedTime elements_82_61_47) alloc) (forall ((?s_9_ Int)) (=> (not (= ?s_9_ null)) (not (= (S_select elements_82_61_47 ?s_9_) null)))) (= locId_pre_101_25_13 locId_101_25_13) (= locId_101_25_13 (asField locId_101_25_13 T_int)) (= parent_pre_76_21_18 parent_76_21_18) (= parent_76_21_18 (asField parent_76_21_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_76_21_18) alloc) (= CONDEXPR_pre_33_51_7 CONDEXPR_33_51_7) (= true_term (is CONDEXPR_33_51_7 T_int)) (= ASGSUB_pre_32_45_26 ASGSUB_32_45_26) (= true_term (is ASGSUB_32_45_26 T_int)) (= stmt_pre_55_17_33 stmt_55_17_33) (= stmt_55_17_33 (asField stmt_55_17_33 T_javafe_ast_BlockStmt)) (< (fClosedTime stmt_55_17_33) alloc) (forall ((?s_10_ Int)) (=> (not (= ?s_10_ null)) (not (= (S_select stmt_55_17_33 ?s_10_) null)))) (= parent_pre_73_18_18 parent_73_18_18) (= parent_73_18_18 (asField parent_73_18_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_73_18_18) alloc) (= right_pre_93_40_28 right_93_40_28) (= right_93_40_28 (asField right_93_40_28 T_javafe_ast_Expr)) (< (fClosedTime right_93_40_28) alloc) (forall ((?s_11_ Int)) (=> (not (= ?s_11_ null)) (not (= (S_select right_93_40_28 ?s_11_) null)))) (= parent_pre_24_59_18 parent_24_59_18) (= parent_24_59_18 (asField parent_24_59_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_24_59_18) alloc) (= FLOATLIT_pre_31_42_26 FLOATLIT_31_42_26) (= true_term (is FLOATLIT_31_42_26 T_int)) (= TYPEDECLELEMPRAGMA_pre_119_27_26 TYPEDECLELEMPRAGMA_119_27_26) (= true_term (is TYPEDECLELEMPRAGMA_119_27_26 T_int)) (= pkgName_pre_22_15_28 pkgName_22_15_28) (= pkgName_22_15_28 (asField pkgName_22_15_28 T_javafe_ast_Name)) (< (fClosedTime pkgName_22_15_28) alloc) (forall ((?s_12_ Int)) (=> (not (= ?s_12_ null)) (not (= (S_select pkgName_22_15_28 ?s_12_) null)))) (= FIELDDECL_pre_33_23_7 FIELDDECL_33_23_7) (= true_term (is FIELDDECL_33_23_7 T_int)) (= loc_pre_6_30_13 loc_6_30_13) (= loc_6_30_13 (asField loc_6_30_13 T_int)) (= NEWARRAYEXPR_pre_33_50_7 NEWARRAYEXPR_33_50_7) (= true_term (is NEWARRAYEXPR_33_50_7 T_int)) (= elements_pre_17_61_39 elements_17_61_39) (= elements_17_61_39 (asField elements_17_61_39 (array T_javafe_ast_ImportDecl))) (< (fClosedTime elements_17_61_39) alloc) (forall ((?s_13_ Int)) (=> (not (= ?s_13_ null)) (not (= (S_select elements_17_61_39 ?s_13_) null)))) (= loc_pre_85_50_13 loc_85_50_13) (= loc_85_50_13 (asField loc_85_50_13 T_int)) (= ASGADD_pre_32_44_26 ASGADD_32_44_26) (= true_term (is ASGADD_32_44_26 T_int)) (= type_pre_90_18_28 type_90_18_28) (= type_90_18_28 (asField type_90_18_28 T_javafe_ast_Type)) (< (fClosedTime type_90_18_28) alloc) (forall ((?s_14_ Int)) (=> (not (= ?s_14_ null)) (not (= (S_select type_90_18_28 ?s_14_) null)))) (= value_pre_29_91_31 value_29_91_31) (= value_29_91_31 (asField value_29_91_31 (array T_char))) (< (fClosedTime value_29_91_31) alloc) (forall ((?s_15_ Int)) (=> (not (= ?s_15_ null)) (not (= (S_select value_29_91_31 ?s_15_) null)))) (= CHARLIT_pre_31_41_26 CHARLIT_31_41_26) (= true_term (is CHARLIT_31_41_26 T_int)) (= STMTPRAGMA_pre_119_26_26 STMTPRAGMA_119_26_26) (= true_term (is STMTPRAGMA_119_26_26 T_int)) (= count_pre_61_67_33 count_61_67_33) (= count_61_67_33 (asField count_61_67_33 T_int)) (= expr_pre_91_15_28 expr_91_15_28) (= expr_91_15_28 (asField expr_91_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_91_15_28) alloc) (forall ((?s_16_ Int)) (=> (not (= ?s_16_ null)) (not (= (S_select expr_91_15_28 ?s_16_) null)))) (= forUpdate_pre_68_28_31 forUpdate_68_28_31) (= forUpdate_68_28_31 (asField forUpdate_68_28_31 T_javafe_ast_ExprVec)) (< (fClosedTime forUpdate_68_28_31) alloc) (forall ((?s_17_ Int)) (=> (not (= ?s_17_ null)) (not (= (S_select forUpdate_68_28_31 ?s_17_) null)))) (= LOCALVARDECL_pre_33_22_7 LOCALVARDECL_33_22_7) (= true_term (is LOCALVARDECL_33_22_7 T_int)) (= elements_pre_155_61_39 elements_155_61_39) (= elements_155_61_39 (asField elements_155_61_39 (array T_javafe_ast_MethodDecl))) (< (fClosedTime elements_155_61_39) alloc) (forall ((?s_18_ Int)) (=> (not (= ?s_18_ null)) (not (= (S_select elements_155_61_39 ?s_18_) null)))) (= locKeyword_pre_70_45_13 locKeyword_70_45_13) (= locKeyword_70_45_13 (asField locKeyword_70_45_13 T_int)) (= NEWINSTANCEEXPR_pre_33_49_7 NEWINSTANCEEXPR_33_49_7) (= true_term (is NEWINSTANCEEXPR_33_49_7 T_int)) (= count_pre_35_67_33 count_35_67_33) (= count_35_67_33 (asField count_35_67_33 T_int)) (= expr_pre_55_15_28 expr_55_15_28) (= expr_55_15_28 (asField expr_55_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_55_15_28) alloc) (forall ((?s_19_ Int)) (=> (not (= ?s_19_ null)) (not (= (S_select expr_55_15_28 ?s_19_) null)))) (= ASGREM_pre_32_43_26 ASGREM_32_43_26) (= true_term (is ASGREM_32_43_26 T_int)) (= left_pre_93_38_28 left_93_38_28) (= left_93_38_28 (asField left_93_38_28 T_javafe_ast_Expr)) (< (fClosedTime left_93_38_28) alloc) (forall ((?s_20_ Int)) (=> (not (= ?s_20_ null)) (not (= (S_select left_93_38_28 ?s_20_) null)))) (= loc_pre_49_20_13 loc_49_20_13) (= loc_49_20_13 (asField loc_49_20_13 T_int)) (= loc_pre_59_22_13 loc_59_22_13) (= loc_59_22_13 (asField loc_59_22_13 T_int)) (= LONGLIT_pre_31_40_26 LONGLIT_31_40_26) (= true_term (is LONGLIT_31_40_26 T_int)) (= MODIFIERPRAGMA_pre_119_25_26 MODIFIERPRAGMA_119_25_26) (= true_term (is MODIFIERPRAGMA_119_25_26 T_int)) (= locCloseBracket_pre_86_23_13 locCloseBracket_86_23_13) (= locCloseBracket_86_23_13 (asField locCloseBracket_86_23_13 T_int)) (= enclosingInstance_pre_87_25_14 enclosingInstance_87_25_14) (= enclosingInstance_87_25_14 (asField enclosingInstance_87_25_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_87_25_14) alloc) (= INITBLOCK_pre_33_21_7 INITBLOCK_33_21_7) (= true_term (is INITBLOCK_33_21_7 T_int)) (= locOpenParen_pre_95_18_13 locOpenParen_95_18_13) (= locOpenParen_95_18_13 (asField locOpenParen_95_18_13 T_int)) (= elements_pre_14_61_42 elements_14_61_42) (= elements_14_61_42 (asField elements_14_61_42 (array T_javafe_ast_LexicalPragma))) (< (fClosedTime elements_14_61_42) alloc) (forall ((?s_21_ Int)) (=> (not (= ?s_21_ null)) (not (= (S_select elements_14_61_42 ?s_21_) null)))) (= count_pre_77_67_33 count_77_67_33) (= count_77_67_33 (asField count_77_67_33 T_int)) (= ARRAYREFEXPR_pre_33_48_7 ARRAYREFEXPR_33_48_7) (= true_term (is ARRAYREFEXPR_33_48_7 T_int)) (= ASGDIV_pre_32_42_26 ASGDIV_32_42_26) (= true_term (is ASGDIV_32_42_26 T_int)) (= type_pre_92_20_28 type_92_20_28) (= type_92_20_28 (asField type_92_20_28 T_javafe_ast_Type)) (< (fClosedTime type_92_20_28) alloc) (forall ((?s_22_ Int)) (=> (not (= ?s_22_ null)) (not (= (S_select type_92_20_28 ?s_22_) null)))) (= INTLIT_pre_31_39_26 INTLIT_31_39_26) (= true_term (is INTLIT_31_39_26 T_int)) (= locCloseBrace_pre_24_54_13 locCloseBrace_24_54_13) (= locCloseBrace_24_54_13 (asField locCloseBrace_24_54_13 T_int)) (= LEXICALPRAGMA_pre_119_24_26 LEXICALPRAGMA_119_24_26) (= true_term (is LEXICALPRAGMA_119_24_26 T_int)) (= id_pre_101_20_34 id_101_20_34) (= id_101_20_34 (asField id_101_20_34 T_javafe_ast_Identifier)) (< (fClosedTime id_101_20_34) alloc) (forall ((?s_23_ Int)) (=> (not (= ?s_23_ null)) (not (= (S_select id_101_20_34 ?s_23_) null)))) (= test_pre_68_26_28 test_68_26_28) (= test_68_26_28 (asField test_68_26_28 T_javafe_ast_Expr)) (< (fClosedTime test_68_26_28) alloc) (forall ((?s_24_ Int)) (=> (not (= ?s_24_ null)) (not (= (S_select test_68_26_28 ?s_24_) null)))) (= displayInferred_pre_4_73_26 displayInferred_4_73_26) (= true_term (is displayInferred_4_73_26 T_boolean)) (= METHODDECL_pre_33_20_7 METHODDECL_33_20_7) (= true_term (is METHODDECL_33_20_7 T_int)) (= otherCodes_pre_119_202_27 otherCodes_119_202_27) (= true_term (is otherCodes_119_202_27 ?v_0)) (= true_term (isAllocated otherCodes_119_202_27 alloc)) (= count_pre_143_67_33 count_143_67_33) (= count_143_67_33 (asField count_143_67_33 T_int)) (= elements_pre_23_61_37 elements_23_61_37) (= elements_23_61_37 (asField elements_23_61_37 (array T_javafe_ast_TypeDecl))) (< (fClosedTime elements_23_61_37) alloc) (forall ((?s_25_ Int)) (=> (not (= ?s_25_ null)) (not (= (S_select elements_23_61_37 ?s_25_) null)))) (= THISEXPR_pre_33_47_7 THISEXPR_33_47_7) (= true_term (is THISEXPR_33_47_7 T_int)) (= ASGMUL_pre_32_41_26 ASGMUL_32_41_26) (= true_term (is ASGMUL_32_41_26 T_int)) (= value_pre_85_45_16 value_85_45_16) (= value_85_45_16 (asField value_85_45_16 T_java_lang_Object)) (< (fClosedTime value_85_45_16) alloc) (= elems_pre_6_27_35 elems_6_27_35) (= elems_6_27_35 (asField elems_6_27_35 T_javafe_ast_TypeDeclVec)) (< (fClosedTime elems_6_27_35) alloc) (forall ((?s_26_ Int)) (=> (not (= ?s_26_ null)) (not (= (S_select elems_6_27_35 ?s_26_) null)))) (= op_pre_93_35_13 op_93_35_13) (= op_93_35_13 (asField op_93_35_13 T_int)) (= parent_pre_79_18_18 parent_79_18_18) (= parent_79_18_18 (asField parent_79_18_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_79_18_18) alloc) (= loc_pre_60_23_13 loc_60_23_13) (= loc_60_23_13 (asField loc_60_23_13 T_int)) (= BOOLEANLIT_pre_31_38_26 BOOLEANLIT_31_38_26) (= true_term (is BOOLEANLIT_31_38_26 T_int)) (= CONSTRUCTORDECL_pre_33_19_7 CONSTRUCTORDECL_33_19_7) (= true_term (is CONSTRUCTORDECL_33_19_7 T_int)) (= loc_pre_51_22_13 loc_51_22_13) (= loc_51_22_13 (asField loc_51_22_13 T_int)) (= locOpenBracket_pre_81_21_13 locOpenBracket_81_21_13) (= locOpenBracket_81_21_13 (asField locOpenBracket_81_21_13 T_int)) (= FIRST_KEYWORD_pre_119_51_26 FIRST_KEYWORD_119_51_26) (= true_term (is FIRST_KEYWORD_119_51_26 T_int)) (= ARRAYINIT_pre_33_46_7 ARRAYINIT_33_46_7) (= true_term (is ARRAYINIT_33_46_7 T_int)) (= ASSIGN_pre_32_40_26 ASSIGN_32_40_26) (= true_term (is ASSIGN_32_40_26 T_int)) (= expr_pre_90_15_28 expr_90_15_28) (= expr_90_15_28 (asField expr_90_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_90_15_28) alloc) (forall ((?s_27_ Int)) (=> (not (= ?s_27_ null)) (not (= (S_select expr_90_15_28 ?s_27_) null)))) (= INDENT_pre_4_65_22 INDENT_4_65_22) (= true_term (is INDENT_4_65_22 T_int)) (= locDot_pre_70_41_13 locDot_70_41_13) (= locDot_70_41_13 (asField locDot_70_41_13 T_int)) (= ids_pre_163_19_37 ids_163_19_37) (= ids_163_19_37 (asField ids_163_19_37 T_javafe_ast_IdentifierVec)) (< (fClosedTime ids_163_19_37) alloc) (forall ((?s_28_ Int)) (=> (not (= ?s_28_ null)) (not (= (S_select ids_163_19_37 ?s_28_) null)))) (= stmt_pre_49_17_28 stmt_49_17_28) (= stmt_49_17_28 (asField stmt_49_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_49_17_28) alloc) (forall ((?s_29_ Int)) (=> (not (= ?s_29_ null)) (not (= (S_select stmt_49_17_28 ?s_29_) null)))) (= finallyClause_pre_59_19_28 finallyClause_59_19_28) (= finallyClause_59_19_28 (asField finallyClause_59_19_28 T_javafe_ast_Stmt)) (< (fClosedTime finallyClause_59_19_28) alloc) (forall ((?s_30_ Int)) (=> (not (= ?s_30_ null)) (not (= (S_select finallyClause_59_19_28 ?s_30_) null)))) (= init_pre_88_35_19 init_88_35_19) (= init_88_35_19 (asField init_88_35_19 T_javafe_ast_ArrayInit)) (< (fClosedTime init_88_35_19) alloc) (= SHORTTYPE_pre_31_36_26 SHORTTYPE_31_36_26) (= true_term (is SHORTTYPE_31_36_26 T_int)) (= od_pre_101_18_40 od_101_18_40) (= od_101_18_40 (asField od_101_18_40 T_javafe_ast_ObjectDesignator)) (< (fClosedTime od_101_18_40) alloc) (forall ((?s_31_ Int)) (=> (not (= ?s_31_ null)) (not (= (S_select od_101_18_40 ?s_31_) null)))) (= forInit_pre_68_24_31 forInit_68_24_31) (= forInit_68_24_31 (asField forInit_68_24_31 T_javafe_ast_StmtVec)) (< (fClosedTime forInit_68_24_31) alloc) (forall ((?s_32_ Int)) (=> (not (= ?s_32_ null)) (not (= (S_select forInit_68_24_31 ?s_32_) null)))) (= decl_pre_98_28_19 decl_98_28_19) (= decl_98_28_19 (asField decl_98_28_19 T_javafe_ast_FieldDecl)) (< (fClosedTime decl_98_28_19) alloc) (= INTERFACEDECL_pre_33_18_7 INTERFACEDECL_33_18_7) (= true_term (is INTERFACEDECL_33_18_7 T_int)) (= expr_pre_95_15_28 expr_95_15_28) (= expr_95_15_28 (asField expr_95_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_95_15_28) alloc) (forall ((?s_33_ Int)) (=> (not (= ?s_33_ null)) (not (= (S_select expr_95_15_28 ?s_33_) null)))) (= locOpenBracket_pre_86_20_13 locOpenBracket_86_20_13) (= locOpenBracket_86_20_13 (asField locOpenBracket_86_20_13 T_int)) (= CATCHCLAUSE_pre_33_45_7 CATCHCLAUSE_33_45_7) (= true_term (is CATCHCLAUSE_33_45_7 T_int)) (= STAR_pre_32_37_26 STAR_32_37_26) (= true_term (is STAR_32_37_26 T_int)) (= locOp_pre_94_32_13 locOp_94_32_13) (= locOp_94_32_13 (asField locOp_94_32_13 T_int)) (= length_pre_16_50_25 length_16_50_25) (= length_16_50_25 (asField length_16_50_25 T_int)) (= imports_pre_6_25_37 imports_6_25_37) (= imports_6_25_37 (asField imports_6_25_37 T_javafe_ast_ImportDeclVec)) (< (fClosedTime imports_6_25_37) alloc) (forall ((?s_34_ Int)) (=> (not (= ?s_34_ null)) (not (= (S_select imports_6_25_37 ?s_34_) null)))) (= BYTETYPE_pre_31_35_26 BYTETYPE_31_35_26) (= true_term (is BYTETYPE_31_35_26 T_int)) (= locOpenBrace_pre_24_51_13 locOpenBrace_24_51_13) (= locOpenBrace_24_51_13 (asField locOpenBrace_24_51_13 T_int)) (= CLASSDECL_pre_33_17_7 CLASSDECL_33_17_7) (= true_term (is CLASSDECL_33_17_7 T_int)) (= CONSTRUCTORINVOCATION_pre_33_44_7 CONSTRUCTORINVOCATION_33_44_7) (= true_term (is CONSTRUCTORINVOCATION_33_44_7 T_int)) (= MOD_pre_32_36_26 MOD_32_36_26) (= true_term (is MOD_32_36_26 T_int)) (= TYPESIG_pre_118_6_28 TYPESIG_118_6_28) (= true_term (is TYPESIG_118_6_28 T_int)) (= expr_pre_49_15_28 expr_49_15_28) (= expr_49_15_28 (asField expr_49_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_49_15_28) alloc) (forall ((?s_35_ Int)) (=> (not (= ?s_35_ null)) (not (= (S_select expr_49_15_28 ?s_35_) null)))) (= tryClause_pre_59_17_28 tryClause_59_17_28) (= tryClause_59_17_28 (asField tryClause_59_17_28 T_javafe_ast_Stmt)) (< (fClosedTime tryClause_59_17_28) alloc) (forall ((?s_36_ Int)) (=> (not (= ?s_36_ null)) (not (= (S_select tryClause_59_17_28 ?s_36_) null)))) (= NULLTYPE_pre_31_34_26 NULLTYPE_31_34_26) (= true_term (is NULLTYPE_31_34_26 T_int)) (= count_pre_69_67_33 count_69_67_33) (= count_69_67_33 (asField count_69_67_33 T_int)) (= ONDEMANDIMPORTDECL_pre_33_16_7 ONDEMANDIMPORTDECL_33_16_7) (= true_term (is ONDEMANDIMPORTDECL_33_16_7 T_int)) (= els_pre_51_19_28 els_51_19_28) (= els_51_19_28 (asField els_51_19_28 T_javafe_ast_Stmt)) (< (fClosedTime els_51_19_28) alloc) (forall ((?s_37_ Int)) (=> (not (= ?s_37_ null)) (not (= (S_select els_51_19_28 ?s_37_) null)))) (= loc_pre_50_20_13 loc_50_20_13) (= loc_50_20_13 (asField loc_50_20_13 T_int)) (= count_pre_154_67_33 count_154_67_33) (= count_154_67_33 (asField count_154_67_33 T_int)) (= locCloseBrace_pre_45_25_13 locCloseBrace_45_25_13) (= locCloseBrace_45_25_13 (asField locCloseBrace_45_25_13 T_int)) (= TRYCATCHSTMT_pre_33_43_7 TRYCATCHSTMT_33_43_7) (= true_term (is TRYCATCHSTMT_33_43_7 T_int)) (= locType_pre_75_21_13 locType_75_21_13) (= locType_75_21_13 (asField locType_75_21_13 T_int)) (= DIV_pre_32_35_26 DIV_32_35_26) (= true_term (is DIV_32_35_26 T_int)) (= loc_pre_44_18_13 loc_44_18_13) (= loc_44_18_13 (asField loc_44_18_13 T_int)) (= VOIDTYPE_pre_31_33_26 VOIDTYPE_31_33_26) (= true_term (is VOIDTYPE_31_33_26 T_int)) (= catchClauses_pre_60_20_38 catchClauses_60_20_38) (= catchClauses_60_20_38 (asField catchClauses_60_20_38 T_javafe_ast_CatchClauseVec)) (< (fClosedTime catchClauses_60_20_38) alloc) (forall ((?s_38_ Int)) (=> (not (= ?s_38_ null)) (not (= (S_select catchClauses_60_20_38 ?s_38_) null)))) (= SINGLETYPEIMPORTDECL_pre_33_15_7 SINGLETYPEIMPORTDECL_33_15_7) (= true_term (is SINGLETYPEIMPORTDECL_33_15_7 T_int)) (= lexicalPragmas_pre_6_23_26 lexicalPragmas_6_23_26) (= lexicalPragmas_6_23_26 (asField lexicalPragmas_6_23_26 T_javafe_ast_LexicalPragmaVec)) (< (fClosedTime lexicalPragmas_6_23_26) alloc) (= count_pre_38_67_33 count_38_67_33) (= count_38_67_33 (asField count_38_67_33 T_int)) (= loc_pre_40_18_13 loc_40_18_13) (= loc_40_18_13 (asField loc_40_18_13 T_int)) (= elements_pre_26_61_43 elements_26_61_43) (= elements_26_61_43 (asField elements_26_61_43 (array T_javafe_ast_ModifierPragma))) (< (fClosedTime elements_26_61_43) alloc) (forall ((?s_39_ Int)) (=> (not (= ?s_39_ null)) (not (= (S_select elements_26_61_43 ?s_39_) null)))) (= TRYFINALLYSTMT_pre_33_42_7 TRYFINALLYSTMT_33_42_7) (= true_term (is TRYFINALLYSTMT_33_42_7 T_int)) (= index_pre_86_17_28 index_86_17_28) (= index_86_17_28 (asField index_86_17_28 T_javafe_ast_Expr)) (< (fClosedTime index_86_17_28) alloc) (forall ((?s_40_ Int)) (=> (not (= ?s_40_ null)) (not (= (S_select index_86_17_28 ?s_40_) null)))) (= SUB_pre_32_34_26 SUB_32_34_26) (= true_term (is SUB_32_34_26 T_int)) (= expr_pre_94_29_28 expr_94_29_28) (= expr_94_29_28 (asField expr_94_29_28 T_javafe_ast_Expr)) (< (fClosedTime expr_94_29_28) alloc) (forall ((?s_41_ Int)) (=> (not (= ?s_41_ null)) (not (= (S_select expr_94_29_28 ?s_41_) null)))) (= locCloseBrace_pre_83_24_13 locCloseBrace_83_24_13) (= locCloseBrace_83_24_13 (asField locCloseBrace_83_24_13 T_int)) (= loc_pre_62_22_13 loc_62_22_13) (= loc_62_22_13 (asField loc_62_22_13 T_int)) (= locId_pre_98_24_13 locId_98_24_13) (= locId_98_24_13 (asField locId_98_24_13 T_int)) (= DOUBLETYPE_pre_31_32_26 DOUBLETYPE_31_32_26) (= true_term (is DOUBLETYPE_31_32_26 T_int)) (= MIN_VALUE_pre_105_39_30 MIN_VALUE_105_39_30) (= true_term (is MIN_VALUE_105_39_30 T_int)) (= COMPILATIONUNIT_pre_33_14_7 COMPILATIONUNIT_33_14_7) (= true_term (is COMPILATIONUNIT_33_14_7 T_int)) (= thn_pre_51_17_28 thn_51_17_28) (= thn_51_17_28 (asField thn_51_17_28 T_javafe_ast_Stmt)) (< (fClosedTime thn_51_17_28) alloc) (forall ((?s_42_ Int)) (=> (not (= ?s_42_ null)) (not (= (S_select thn_51_17_28 ?s_42_) null)))) (= elemType_pre_81_18_28 elemType_81_18_28) (= elemType_81_18_28 (asField elemType_81_18_28 T_javafe_ast_Type)) (< (fClosedTime elemType_81_18_28) alloc) (forall ((?s_43_ Int)) (=> (not (= ?s_43_ null)) (not (= (S_select elemType_81_18_28 ?s_43_) null)))) (= pkgName_pre_6_21_14 pkgName_6_21_14) (= pkgName_6_21_14 (asField pkgName_6_21_14 T_javafe_ast_Name)) (< (fClosedTime pkgName_6_21_14) alloc) (= enclosingInstance_pre_70_37_14 enclosingInstance_70_37_14) (= enclosingInstance_70_37_14 (asField enclosingInstance_70_37_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_70_37_14) alloc) (= locId_pre_24_48_13 locId_24_48_13) (= locId_24_48_13 (asField locId_24_48_13 T_int)) (= elements_pre_84_61_36 elements_84_61_36) (= elements_84_61_36 (asField elements_84_61_36 (array T_javafe_ast_VarInit))) (< (fClosedTime elements_84_61_36) alloc) (forall ((?s_44_ Int)) (=> (not (= ?s_44_ null)) (not (= (S_select elements_84_61_36 ?s_44_) null)))) (= SWITCHLABEL_pre_33_41_7 SWITCHLABEL_33_41_7) (= true_term (is SWITCHLABEL_33_41_7 T_int)) (= ADD_pre_32_33_26 ADD_32_33_26) (= true_term (is ADD_32_33_26 T_int)) (= locDots_pre_163_31_29 locDots_163_31_29) (= locDots_163_31_29 (asField locDots_163_31_29 ?v_0)) (< (fClosedTime locDots_163_31_29) alloc) (forall ((?s_45_ Int)) (=> (not (= ?s_45_ null)) (not (= (S_select locDots_163_31_29 ?s_45_) null)))) (= typeName_pre_19_15_32 typeName_19_15_32) (= typeName_19_15_32 (asField typeName_19_15_32 T_javafe_ast_TypeName)) (< (fClosedTime typeName_19_15_32) alloc) (forall ((?s_46_ Int)) (=> (not (= ?s_46_ null)) (not (= (S_select typeName_19_15_32 ?s_46_) null)))) (= type_pre_88_24_28 type_88_24_28) (= type_88_24_28 (asField type_88_24_28 T_javafe_ast_Type)) (< (fClosedTime type_88_24_28) alloc) (forall ((?s_47_ Int)) (=> (not (= ?s_47_ null)) (not (= (S_select type_88_24_28 ?s_47_) null)))) (= type_pre_103_27_28 type_103_27_28) (= type_103_27_28 (asField type_103_27_28 T_javafe_ast_Type)) (< (fClosedTime type_103_27_28) alloc) (forall ((?s_48_ Int)) (=> (not (= ?s_48_ null)) (not (= (S_select type_103_27_28 ?s_48_) null)))) (= FLOATTYPE_pre_31_31_26 FLOATTYPE_31_31_26) (= true_term (is FLOATTYPE_31_31_26 T_int)) (= name_pre_20_18_28 name_20_18_28) (= name_20_18_28 (asField name_20_18_28 T_javafe_ast_Name)) (< (fClosedTime name_20_18_28) alloc) (forall ((?s_49_ Int)) (=> (not (= ?s_49_ null)) (not (= (S_select name_20_18_28 ?s_49_) null)))) (= locId_pre_76_43_13 locId_76_43_13) (= locId_76_43_13 (asField locId_76_43_13 T_int)) (= otherStrings_pre_119_193_30 otherStrings_119_193_30) (= true_term (is otherStrings_119_193_30 ?v_1)) (= true_term (isAllocated otherStrings_119_193_30 alloc)) (= stmt_pre_50_17_28 stmt_50_17_28) (= stmt_50_17_28 (asField stmt_50_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_50_17_28) alloc) (forall ((?s_50_ Int)) (=> (not (= ?s_50_ null)) (not (= (S_select stmt_50_17_28 ?s_50_) null)))) (= tryClause_pre_60_18_28 tryClause_60_18_28) (= tryClause_60_18_28 (asField tryClause_60_18_28 T_javafe_ast_Stmt)) (< (fClosedTime tryClause_60_18_28) alloc) (forall ((?s_51_ Int)) (=> (not (= ?s_51_ null)) (not (= (S_select tryClause_60_18_28 ?s_51_) null)))) (= elements_pre_46_61_33 elements_46_61_33) (= elements_46_61_33 (asField elements_46_61_33 (array T_javafe_ast_Stmt))) (< (fClosedTime elements_46_61_33) alloc) (forall ((?s_52_ Int)) (=> (not (= ?s_52_ null)) (not (= (S_select elements_46_61_33 ?s_52_) null)))) (= array_pre_86_15_28 array_86_15_28) (= array_86_15_28 (asField array_86_15_28 T_javafe_ast_Expr)) (< (fClosedTime array_86_15_28) alloc) (forall ((?s_53_ Int)) (=> (not (= ?s_53_ null)) (not (= (S_select array_86_15_28 ?s_53_) null)))) (= SKIPSTMT_pre_33_40_7 SKIPSTMT_33_40_7) (= true_term (is SKIPSTMT_33_40_7 T_int)) (= locOpenBrace_pre_45_22_13 locOpenBrace_45_22_13) (= locOpenBrace_45_22_13 (asField locOpenBrace_45_22_13 T_int)) (= op_pre_94_26_13 op_94_26_13) (= op_94_26_13 (asField op_94_26_13 T_int)) (= URSHIFT_pre_32_32_26 URSHIFT_32_32_26) (= true_term (is URSHIFT_32_32_26 T_int)) (= expr_pre_44_15_28 expr_44_15_28) (= expr_44_15_28 (asField expr_44_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_44_15_28) alloc) (forall ((?s_54_ Int)) (=> (not (= ?s_54_ null)) (not (= (S_select expr_44_15_28 ?s_54_) null)))) (= locOpenBrackets_pre_88_65_29 locOpenBrackets_88_65_29) (= locOpenBrackets_88_65_29 (asField locOpenBrackets_88_65_29 ?v_0)) (< (fClosedTime locOpenBrackets_88_65_29) alloc) (forall ((?s_55_ Int)) (=> (not (= ?s_55_ null)) (not (= (S_select locOpenBrackets_88_65_29 ?s_55_) null)))) (= COMPOUNDNAME_pre_33_67_7 COMPOUNDNAME_33_67_7) (= true_term (is COMPOUNDNAME_33_67_7 T_int)) (= CHARTYPE_pre_31_30_26 CHARTYPE_31_30_26) (= true_term (is CHARTYPE_31_30_26 T_int)) (= locId_pre_64_38_13 locId_64_38_13) (= locId_64_38_13 (asField locId_64_38_13 T_int)) (= expr_pre_51_15_28 expr_51_15_28) (= expr_51_15_28 (asField expr_51_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_51_15_28) alloc) (forall ((?s_56_ Int)) (=> (not (= ?s_56_ null)) (not (= (S_select expr_51_15_28 ?s_56_) null)))) (= expr_pre_40_15_14 expr_40_15_14) (= expr_40_15_14 (asField expr_40_15_14 T_javafe_ast_Expr)) (< (fClosedTime expr_40_15_14) alloc) (= FORSTMT_pre_33_39_7 FORSTMT_33_39_7) (= true_term (is FORSTMT_33_39_7 T_int)) (= RSHIFT_pre_32_31_26 RSHIFT_32_31_26) (= true_term (is RSHIFT_32_31_26 T_int)) (= body_pre_62_19_33 body_62_19_33) (= body_62_19_33 (asField body_62_19_33 T_javafe_ast_BlockStmt)) (< (fClosedTime body_62_19_33) alloc) (forall ((?s_57_ Int)) (=> (not (= ?s_57_ null)) (not (= (S_select body_62_19_33 ?s_57_) null)))) (= locOpenBrace_pre_83_21_13 locOpenBrace_83_21_13) (= locOpenBrace_83_21_13 (asField locOpenBrace_83_21_13 T_int)) (= id_pre_98_21_34 id_98_21_34) (= id_98_21_34 (asField id_98_21_34 T_javafe_ast_Identifier)) (< (fClosedTime id_98_21_34) alloc) (forall ((?s_58_ Int)) (=> (not (= ?s_58_ null)) (not (= (S_select id_98_21_34 ?s_58_) null)))) (= block_pre_74_28_33 block_74_28_33) (= block_74_28_33 (asField block_74_28_33 T_javafe_ast_BlockStmt)) (< (fClosedTime block_74_28_33) alloc) (forall ((?s_59_ Int)) (=> (not (= ?s_59_ null)) (not (= (S_select block_74_28_33 ?s_59_) null)))) (= SIMPLENAME_pre_33_66_7 SIMPLENAME_33_66_7) (= true_term (is SIMPLENAME_33_66_7 T_int)) (= LONGTYPE_pre_31_29_26 LONGTYPE_31_29_26) (= true_term (is LONGTYPE_31_29_26 T_int)) (= expr_pre_50_15_28 expr_50_15_28) (= expr_50_15_28 (asField expr_50_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_50_15_28) alloc) (forall ((?s_60_ Int)) (=> (not (= ?s_60_ null)) (not (= (S_select expr_50_15_28 ?s_60_) null)))) (= locColon_pre_89_25_13 locColon_89_25_13) (= locColon_89_25_13 (asField locColon_89_25_13 T_int)) (= superClass_pre_34_15_18 superClass_34_15_18) (= superClass_34_15_18 (asField superClass_34_15_18 T_javafe_ast_TypeName)) (< (fClosedTime superClass_34_15_18) alloc) (= returnType_pre_75_18_28 returnType_75_18_28) (= returnType_75_18_28 (asField returnType_75_18_28 T_javafe_ast_Type)) (< (fClosedTime returnType_75_18_28) alloc) (forall ((?s_61_ Int)) (=> (not (= ?s_61_ null)) (not (= (S_select returnType_75_18_28 ?s_61_) null)))) (= IFSTMT_pre_33_38_7 IFSTMT_33_38_7) (= true_term (is IFSTMT_33_38_7 T_int)) (= elements_pre_61_61_40 elements_61_61_40) (= elements_61_61_40 (asField elements_61_61_40 (array T_javafe_ast_CatchClause))) (< (fClosedTime elements_61_61_40) alloc) (forall ((?s_62_ Int)) (=> (not (= ?s_62_ null)) (not (= (S_select elements_61_61_40 ?s_62_) null)))) (= LSHIFT_pre_32_30_26 LSHIFT_32_30_26) (= true_term (is LSHIFT_32_30_26 T_int)) (= self_pre_4_41_37 self_4_41_37) (= self_4_41_37 (asField self_4_41_37 T_javafe_ast_PrettyPrint)) (< (fClosedTime self_4_41_37) alloc) (forall ((?s_63_ Int)) (=> (not (= ?s_63_ null)) (not (= (S_select self_4_41_37 ?s_63_) null)))) (= loc_pre_24_45_13 loc_24_45_13) (= loc_24_45_13 (asField loc_24_45_13 T_int)) (= ARRAYTYPE_pre_33_65_7 ARRAYTYPE_33_65_7) (= true_term (is ARRAYTYPE_33_65_7 T_int)) (= INTTYPE_pre_31_28_26 INTTYPE_31_28_26) (= true_term (is INTTYPE_31_28_26 T_int)) (= POSTFIXDEC_pre_32_63_26 POSTFIXDEC_32_63_26) (= true_term (is POSTFIXDEC_32_63_26 T_int)) (= locOpenParen_pre_87_52_13 locOpenParen_87_52_13) (= locOpenParen_87_52_13 (asField locOpenParen_87_52_13 T_int)) (= elements_pre_35_61_37 elements_35_61_37) (= elements_35_61_37 (asField elements_35_61_37 (array T_javafe_ast_TypeName))) (< (fClosedTime elements_35_61_37) alloc) (forall ((?s_64_ Int)) (=> (not (= ?s_64_ null)) (not (= (S_select elements_35_61_37 ?s_64_) null)))) (= loc_pre_76_40_13 loc_76_40_13) (= loc_76_40_13 (asField loc_76_40_13 T_int)) (= LABELSTMT_pre_33_37_7 LABELSTMT_33_37_7) (= true_term (is LABELSTMT_33_37_7 T_int)) (= stmts_pre_45_19_31 stmts_45_19_31) (= stmts_45_19_31 (asField stmts_45_19_31 T_javafe_ast_StmtVec)) (< (fClosedTime stmts_45_19_31) alloc) (forall ((?s_65_ Int)) (=> (not (= ?s_65_ null)) (not (= (S_select stmts_45_19_31 ?s_65_) null)))) (= LT_pre_32_29_26 LT_32_29_26) (= true_term (is LT_32_29_26 T_int)) (= arg_pre_62_17_38 arg_62_17_38) (= arg_62_17_38 (asField arg_62_17_38 T_javafe_ast_FormalParaDecl)) (< (fClosedTime arg_62_17_38) alloc) (forall ((?s_66_ Int)) (=> (not (= ?s_66_ null)) (not (= (S_select arg_62_17_38 ?s_66_) null)))) (= od_pre_98_19_40 od_98_19_40) (= od_98_19_40 (asField od_98_19_40 T_javafe_ast_ObjectDesignator)) (< (fClosedTime od_98_19_40) alloc) (forall ((?s_67_ Int)) (=> (not (= ?s_67_ null)) (not (= (S_select od_98_19_40 ?s_67_) null)))) (= pmodifiers_pre_74_26_27 pmodifiers_74_26_27) (= pmodifiers_74_26_27 (asField pmodifiers_74_26_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_74_26_27) alloc) (= elements_pre_77_61_43 elements_77_61_43) (= elements_77_61_43 (asField elements_77_61_43 (array T_javafe_ast_FormalParaDecl))) (< (fClosedTime elements_77_61_43) alloc) (forall ((?s_68_ Int)) (=> (not (= ?s_68_ null)) (not (= (S_select elements_77_61_43 ?s_68_) null)))) (= TYPENAME_pre_33_64_7 TYPENAME_33_64_7) (= true_term (is TYPENAME_33_64_7 T_int)) (= BOOLEANTYPE_pre_31_27_26 BOOLEANTYPE_31_27_26) (= true_term (is BOOLEANTYPE_31_27_26 T_int)) (= POSTFIXINC_pre_32_62_26 POSTFIXINC_32_62_26) (= true_term (is POSTFIXINC_32_62_26 T_int)) (= type_pre_64_35_28 type_64_35_28) (= type_64_35_28 (asField type_64_35_28 T_javafe_ast_Type)) (< (fClosedTime type_64_35_28) alloc) (forall ((?s_69_ Int)) (=> (not (= ?s_69_ null)) (not (= (S_select type_64_35_28 ?s_69_) null)))) (= init_pre_67_19_17 init_67_19_17) (= init_67_19_17 (asField init_67_19_17 T_javafe_ast_VarInit)) (< (fClosedTime init_67_19_17) alloc) (= modifiers_pre_74_24_13 modifiers_74_24_13) (= modifiers_74_24_13 (asField modifiers_74_24_13 T_int)) (= CONTINUESTMT_pre_33_36_7 CONTINUESTMT_33_36_7) (= true_term (is CONTINUESTMT_33_36_7 T_int)) (= LE_pre_32_28_26 LE_32_28_26) (= true_term (is LE_32_28_26 T_int)) (= elems_pre_83_18_34 elems_83_18_34) (= elems_83_18_34 (asField elems_83_18_34 T_javafe_ast_VarInitVec)) (< (fClosedTime elems_83_18_34) alloc) (forall ((?s_70_ Int)) (=> (not (= ?s_70_ null)) (not (= (S_select elems_83_18_34 ?s_70_) null)))) (= SUPEROBJECTDESIGNATOR_pre_33_63_7 SUPEROBJECTDESIGNATOR_33_63_7) (= true_term (is SUPEROBJECTDESIGNATOR_33_63_7 T_int)) (= parent_pre_74_22_18 parent_74_22_18) (= parent_74_22_18 (asField parent_74_22_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_74_22_18) alloc) (= IDENT_pre_31_25_26 IDENT_31_25_26) (= true_term (is IDENT_31_25_26 T_int)) (= DEC_pre_32_59_26 DEC_32_59_26) (= true_term (is DEC_32_59_26 T_int)) (= elements_pre_143_61_39 elements_143_61_39) (= elements_143_61_39 (asField elements_143_61_39 (array T_javafe_ast_Identifier))) (< (fClosedTime elements_143_61_39) alloc) (forall ((?s_71_ Int)) (=> (not (= ?s_71_ null)) (not (= (S_select elements_143_61_39 ?s_71_) null)))) (= count_pre_82_67_33 count_82_67_33) (= count_82_67_33 (asField count_82_67_33 T_int)) (= loc_pre_47_29_13 loc_47_29_13) (= loc_47_29_13 (asField loc_47_29_13 T_int)) (= tokenType_pre_37_90_8 tokenType_37_90_8) (= tokenType_37_90_8 (asField tokenType_37_90_8 T_int)) (= BREAKSTMT_pre_33_35_7 BREAKSTMT_33_35_7) (= true_term (is BREAKSTMT_33_35_7 T_int)) (= loc_pre_43_18_13 loc_43_18_13) (= loc_43_18_13 (asField loc_43_18_13 T_int)) (= locQuestion_pre_89_22_13 locQuestion_89_22_13) (= locQuestion_89_22_13 (asField locQuestion_89_22_13 T_int)) (= GT_pre_32_27_26 GT_32_27_26) (= true_term (is GT_32_27_26 T_int)) (= elems_pre_24_41_39 elems_24_41_39) (= elems_24_41_39 (asField elems_24_41_39 T_javafe_ast_TypeDeclElemVec)) (< (fClosedTime elems_24_41_39) alloc) (forall ((?s_72_ Int)) (=> (not (= ?s_72_ null)) (not (= (S_select elems_24_41_39 ?s_72_) null)))) (= TYPEOBJECTDESIGNATOR_pre_33_62_7 TYPEOBJECTDESIGNATOR_33_62_7) (= true_term (is TYPEOBJECTDESIGNATOR_33_62_7 T_int)) (= INC_pre_32_58_26 INC_32_58_26) (= true_term (is INC_32_58_26 T_int)) (= loc_pre_87_49_13 loc_87_49_13) (= loc_87_49_13 (asField loc_87_49_13 T_int)) (= count_pre_17_67_33 count_17_67_33) (= count_17_67_33 (asField count_17_67_33 T_int)) (= id_pre_75_15_34 id_75_15_34) (= id_75_15_34 (asField id_75_15_34 T_javafe_ast_Identifier)) (< (fClosedTime id_75_15_34) alloc) (forall ((?s_73_ Int)) (=> (not (= ?s_73_ null)) (not (= (S_select id_75_15_34 ?s_73_) null)))) (= THROWSTMT_pre_33_34_7 THROWSTMT_33_34_7) (= true_term (is THROWSTMT_33_34_7 T_int)) (= superCall_pre_70_24_17 superCall_70_24_17) (= superCall_70_24_17 (asField superCall_70_24_17 T_boolean)) (= GE_pre_32_26_26 GE_32_26_26) (= true_term (is GE_32_26_26 T_int)) (= decl_pre_97_26_38 decl_97_26_38) (= decl_97_26_38 (asField decl_97_26_38 T_javafe_ast_GenericVarDecl)) (< (fClosedTime decl_97_26_38) alloc) (forall ((?s_74_ Int)) (=> (not (= ?s_74_ null)) (not (= (S_select decl_97_26_38 ?s_74_) null)))) (= EXPROBJECTDESIGNATOR_pre_33_61_7 EXPROBJECTDESIGNATOR_33_61_7) (= true_term (is EXPROBJECTDESIGNATOR_33_61_7 T_int)) (= BITNOT_pre_32_57_26 BITNOT_32_57_26) (= true_term (is BITNOT_32_57_26 T_int)) (= count_pre_155_67_33 count_155_67_33) (= count_155_67_33 (asField count_155_67_33 T_int)) (= RETURNSTMT_pre_33_33_7 RETURNSTMT_33_33_7) (= true_term (is RETURNSTMT_33_33_7 T_int)) (= punctuationCodes_pre_119_164_19 punctuationCodes_119_164_19) (= true_term (is punctuationCodes_119_164_19 ?v_0)) (= true_term (isAllocated punctuationCodes_119_164_19 alloc)) (= count_pre_14_67_33 count_14_67_33) (= count_14_67_33 (asField count_14_67_33 T_int)) (= punctuationStrings_pre_119_134_22 punctuationStrings_119_134_22) (= true_term (is punctuationStrings_119_134_22 ?v_1)) (= true_term (isAllocated punctuationStrings_119_134_22 alloc)) (= EQ_pre_32_25_26 EQ_32_25_26) (= true_term (is EQ_32_25_26 T_int)) (= loc_pre_53_18_13 loc_53_18_13) (= loc_53_18_13 (asField loc_53_18_13 T_int)) (= locDot_pre_99_21_13 locDot_99_21_13) (= locDot_99_21_13 (asField locDot_99_21_13 T_int)) (= CLASSLITERAL_pre_33_60_7 CLASSLITERAL_33_60_7) (= true_term (is CLASSLITERAL_33_60_7 T_int)) (= locSuper_pre_161_20_13 locSuper_161_20_13) (= locSuper_161_20_13 (asField locSuper_161_20_13 T_int)) (= NOT_pre_32_56_26 NOT_32_56_26) (= true_term (is NOT_32_56_26 T_int)) (= loc_pre_160_16_13 loc_160_16_13) (= loc_160_16_13 (asField loc_160_16_13 T_int)) (= locCloseParen_pre_91_24_13 locCloseParen_91_24_13) (= locCloseParen_91_24_13 (asField locCloseParen_91_24_13 T_int)) (= args_pre_100_32_31 args_100_32_31) (= args_100_32_31 (asField args_100_32_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_100_32_31) alloc) (forall ((?s_75_ Int)) (=> (not (= ?s_75_ null)) (not (= (S_select args_100_32_31 ?s_75_) null)))) (= decl_pre_101_34_20 decl_101_34_20) (= decl_101_34_20 (asField decl_101_34_20 T_javafe_ast_MethodDecl)) (< (fClosedTime decl_101_34_20) alloc) (= id_pre_64_32_34 id_64_32_34) (= id_64_32_34 (asField id_64_32_34 T_javafe_ast_Identifier)) (< (fClosedTime id_64_32_34) alloc) (forall ((?s_76_ Int)) (=> (not (= ?s_76_ null)) (not (= (S_select id_64_32_34 ?s_76_) null)))) (= expr_pre_47_26_14 expr_47_26_14) (= expr_47_26_14 (asField expr_47_26_14 T_javafe_ast_Expr)) (< (fClosedTime expr_47_26_14) alloc) (= decl_pre_66_15_36 decl_66_15_36) (= decl_66_15_36 (asField decl_66_15_36 T_javafe_ast_LocalVarDecl)) (< (fClosedTime decl_66_15_36) alloc) (forall ((?s_77_ Int)) (=> (not (= ?s_77_ null)) (not (= (S_select decl_66_15_36 ?s_77_) null)))) (= locOpenParen_pre_55_23_13 locOpenParen_55_23_13) (= locOpenParen_55_23_13 (asField locOpenParen_55_23_13 T_int)) (= EVALSTMT_pre_33_32_7 EVALSTMT_33_32_7) (= true_term (is EVALSTMT_33_32_7 T_int)) (= elements_pre_69_61_33 elements_69_61_33) (= elements_69_61_33 (asField elements_69_61_33 (array T_javafe_ast_Expr))) (< (fClosedTime elements_69_61_33) alloc) (forall ((?s_78_ Int)) (=> (not (= ?s_78_ null)) (not (= (S_select elements_69_61_33 ?s_78_) null)))) (= owner_pre_5_35_28 owner_5_35_28) (= owner_5_35_28 (asField owner_5_35_28 T_java_lang_Object)) (< (fClosedTime owner_5_35_28) alloc) (= expr_pre_43_15_28 expr_43_15_28) (= expr_43_15_28 (asField expr_43_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_43_15_28) alloc) (forall ((?s_79_ Int)) (=> (not (= ?s_79_ null)) (not (= (S_select expr_43_15_28 ?s_79_) null)))) (= NE_pre_32_24_26 NE_32_24_26) (= true_term (is NE_32_24_26 T_int)) (= locId_pre_58_20_13 locId_58_20_13) (= locId_58_20_13 (asField locId_58_20_13 T_int)) (= elements_pre_154_61_38 elements_154_61_38) (= elements_154_61_38 (asField elements_154_61_38 (array T_javafe_ast_FieldDecl))) (< (fClosedTime elements_154_61_38) alloc) (forall ((?s_80_ Int)) (=> (not (= ?s_80_ null)) (not (= (S_select elements_154_61_38 ?s_80_) null)))) (= METHODINVOCATION_pre_33_59_7 METHODINVOCATION_33_59_7) (= true_term (is METHODINVOCATION_33_59_7 T_int)) (= els_pre_89_19_28 els_89_19_28) (= els_89_19_28 (asField els_89_19_28 T_javafe_ast_Expr)) (< (fClosedTime els_89_19_28) alloc) (forall ((?s_81_ Int)) (=> (not (= ?s_81_ null)) (not (= (S_select els_89_19_28 ?s_81_) null)))) (= LAST_KEYWORD_pre_119_103_26 LAST_KEYWORD_119_103_26) (= true_term (is LAST_KEYWORD_119_103_26 T_int)) (= UNARYSUB_pre_32_55_26 UNARYSUB_32_55_26) (= true_term (is UNARYSUB_32_55_26 T_int)) (= MIN_VALUE_pre_107_38_29 MIN_VALUE_107_38_29) (= true_term (is MIN_VALUE_107_38_29 T_long)) (= anonDecl_pre_87_45_19 anonDecl_87_45_19) (= anonDecl_87_45_19 (asField anonDecl_87_45_19 T_javafe_ast_ClassDecl)) (< (fClosedTime anonDecl_87_45_19) alloc) (= count_pre_23_67_33 count_23_67_33) (= count_23_67_33 (asField count_23_67_33 T_int)) (= loc_pre_18_18_13 loc_18_18_13) (= loc_18_18_13 (asField loc_18_18_13 T_int)) (= superInterfaces_pre_24_34_35 superInterfaces_24_34_35) (= superInterfaces_24_34_35 (asField superInterfaces_24_34_35 T_javafe_ast_TypeNameVec)) (< (fClosedTime superInterfaces_24_34_35) alloc) (forall ((?s_82_ Int)) (=> (not (= ?s_82_ null)) (not (= (S_select superInterfaces_24_34_35 ?s_82_) null)))) (= keywordStrings_pre_119_181_30 keywordStrings_119_181_30) (= true_term (is keywordStrings_119_181_30 ?v_1)) (= true_term (isAllocated keywordStrings_119_181_30 alloc)) (= locOpenBrace_pre_76_36_13 locOpenBrace_76_36_13) (= locOpenBrace_76_36_13 (asField locOpenBrace_76_36_13 T_int)) (= SYNCHRONIZESTMT_pre_33_31_7 SYNCHRONIZESTMT_33_31_7) (= true_term (is SYNCHRONIZESTMT_33_31_7 T_int)) (= NULL_pre_119_82_26 NULL_119_82_26) (= true_term (is NULL_119_82_26 T_int)) (= BITAND_pre_32_23_26 BITAND_32_23_26) (= true_term (is BITAND_32_23_26 T_int)) (= count_pre_29_99_33 count_29_99_33) (= count_29_99_33 (asField count_29_99_33 T_int)) (= elements_pre_38_61_41 elements_38_61_41) (= elements_38_61_41 (asField elements_38_61_41 (array T_javafe_ast_TypeDeclElem))) (< (fClosedTime elements_38_61_41) alloc) (forall ((?s_83_ Int)) (=> (not (= ?s_83_ null)) (not (= (S_select elements_38_61_41 ?s_83_) null)))) (= body_pre_76_34_19 body_76_34_19) (= body_76_34_19 (asField body_76_34_19 T_javafe_ast_BlockStmt)) (< (fClosedTime body_76_34_19) alloc) (= AMBIGUOUSMETHODINVOCATION_pre_33_58_7 AMBIGUOUSMETHODINVOCATION_33_58_7) (= true_term (is AMBIGUOUSMETHODINVOCATION_33_58_7 T_int)) (= UNARYADD_pre_32_54_26 UNARYADD_32_54_26) (= true_term (is UNARYADD_32_54_26 T_int)) (= pmodifiers_pre_64_30_27 pmodifiers_64_30_27) (= pmodifiers_64_30_27 (asField pmodifiers_64_30_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_64_30_27) alloc) (= locOpenParen_pre_100_30_13 locOpenParen_100_30_13) (= locOpenParen_100_30_13 (asField locOpenParen_100_30_13 T_int)) (= locFirstSemi_pre_68_36_13 locFirstSemi_68_36_13) (= locFirstSemi_68_36_13 (asField locFirstSemi_68_36_13 T_int)) (= loc_pre_117_35_13 loc_117_35_13) (= loc_117_35_13 (asField loc_117_35_13 T_int)) (= raises_pre_76_32_35 raises_76_32_35) (= raises_76_32_35 (asField raises_76_32_35 T_javafe_ast_TypeNameVec)) (< (fClosedTime raises_76_32_35) alloc) (forall ((?s_84_ Int)) (=> (not (= ?s_84_ null)) (not (= (S_select raises_76_32_35 ?s_84_) null)))) (= inst_pre_4_29_44 inst_4_29_44) (= true_term (is inst_4_29_44 T_javafe_ast_PrettyPrint)) (= true_term (isAllocated inst_4_29_44 alloc)) (not (= inst_4_29_44 null)) (= DOSTMT_pre_33_30_7 DOSTMT_33_30_7) (= true_term (is DOSTMT_33_30_7 T_int)) (= expr_pre_57_15_28 expr_57_15_28) (= expr_57_15_28 (asField expr_57_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_57_15_28) alloc) (forall ((?s_85_ Int)) (=> (not (= ?s_85_ null)) (not (= (S_select expr_57_15_28 ?s_85_) null)))) (= BITXOR_pre_32_22_26 BITXOR_32_22_26) (= true_term (is BITXOR_32_22_26 T_int)) (= modifiers_pre_64_28_13 modifiers_64_28_13) (= modifiers_64_28_13 (asField modifiers_64_28_13 T_int)) (= label_pre_53_15_20 label_53_15_20) (= label_53_15_20 (asField label_53_15_20 T_javafe_ast_Identifier)) (< (fClosedTime label_53_15_20) alloc) (= FIELDACCESS_pre_33_57_7 FIELDACCESS_33_57_7) (= true_term (is FIELDACCESS_33_57_7 T_int)) (= thn_pre_89_17_28 thn_89_17_28) (= thn_89_17_28 (asField thn_89_17_28 T_javafe_ast_Expr)) (< (fClosedTime thn_89_17_28) alloc) (forall ((?s_86_ Int)) (=> (not (= ?s_86_ null)) (not (= (S_select thn_89_17_28 ?s_86_) null)))) (= ASGBITXOR_pre_32_51_26 ASGBITXOR_32_51_26) (= true_term (is ASGBITXOR_32_51_26 T_int)) (= loc_pre_97_22_13 loc_97_22_13) (= loc_97_22_13 (asField loc_97_22_13 T_int)) (= locIds_pre_163_25_29 locIds_163_25_29) (= locIds_163_25_29 (asField locIds_163_25_29 ?v_0)) (< (fClosedTime locIds_163_25_29) alloc) (forall ((?s_87_ Int)) (=> (not (= ?s_87_ null)) (not (= (S_select locIds_163_25_29 ?s_87_) null)))) (= id_pre_24_32_34 id_24_32_34) (= id_24_32_34 (asField id_24_32_34 T_javafe_ast_Identifier)) (< (fClosedTime id_24_32_34) alloc) (forall ((?s_88_ Int)) (=> (not (= ?s_88_ null)) (not (= (S_select id_24_32_34 ?s_88_) null)))) (= locOpenParen_pre_91_21_13 locOpenParen_91_21_13) (= locOpenParen_91_21_13 (asField locOpenParen_91_21_13 T_int)) (= WHILESTMT_pre_33_29_7 WHILESTMT_33_29_7) (= true_term (is WHILESTMT_33_29_7 T_int)) (= BITOR_pre_32_21_26 BITOR_32_21_26) (= true_term (is BITOR_32_21_26 T_int)) (= stmt_pre_58_17_28 stmt_58_17_28) (= stmt_58_17_28 (asField stmt_58_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_58_17_28) alloc) (forall ((?s_89_ Int)) (=> (not (= ?s_89_ null)) (not (= (S_select stmt_58_17_28 ?s_89_) null)))) (= args_pre_101_30_31 args_101_30_31) (= args_101_30_31 (asField args_101_30_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_101_30_31) alloc) (forall ((?s_90_ Int)) (=> (not (= ?s_90_ null)) (not (= (S_select args_101_30_31 ?s_90_) null)))) (= args_pre_87_34_31 args_87_34_31) (= args_87_34_31 (asField args_87_34_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_87_34_31) alloc) (forall ((?s_91_ Int)) (=> (not (= ?s_91_ null)) (not (= (S_select args_87_34_31 ?s_91_) null)))) (= VARIABLEACCESS_pre_33_56_7 VARIABLEACCESS_33_56_7) (= true_term (is VARIABLEACCESS_33_56_7 T_int)) (= NULL_pre_116_60_26 NULL_116_60_26) (= true_term (is NULL_116_60_26 T_int)) (= ASGBITOR_pre_32_50_26 ASGBITOR_32_50_26) (= true_term (is ASGBITOR_32_50_26 T_int)) (= inferred_pre_71_33_17 inferred_71_33_17) (= inferred_71_33_17 (asField inferred_71_33_17 T_boolean)) (= expr_pre_102_22_28 expr_102_22_28) (= expr_102_22_28 (asField expr_102_22_28 T_javafe_ast_Expr)) (< (fClosedTime expr_102_22_28) alloc) (forall ((?s_92_ Int)) (=> (not (= ?s_92_ null)) (not (= (S_select expr_102_22_28 ?s_92_) null)))) (= decl_pre_65_15_33 decl_65_15_33) (= decl_65_15_33 (asField decl_65_15_33 T_javafe_ast_ClassDecl)) (< (fClosedTime decl_65_15_33) alloc) (forall ((?s_93_ Int)) (=> (not (= ?s_93_ null)) (not (= (S_select decl_65_15_33 ?s_93_) null)))) (= args_pre_76_30_41 args_76_30_41) (= args_76_30_41 (asField args_76_30_41 T_javafe_ast_FormalParaDeclVec)) (< (fClosedTime args_76_30_41) alloc) (forall ((?s_94_ Int)) (=> (not (= ?s_94_ null)) (not (= (S_select args_76_30_41 ?s_94_) null)))) (= CLASSDECLSTMT_pre_33_28_7 CLASSDECLSTMT_33_28_7) (= true_term (is CLASSDECLSTMT_33_28_7 T_int)) (= test_pre_89_15_28 test_89_15_28) (= test_89_15_28 (asField test_89_15_28 T_javafe_ast_Expr)) (< (fClosedTime test_89_15_28) alloc) (forall ((?s_95_ Int)) (=> (not (= ?s_95_ null)) (not (= (S_select test_89_15_28 ?s_95_) null)))) (= AMBIGUOUSVARIABLEACCESS_pre_33_55_7 AMBIGUOUSVARIABLEACCESS_33_55_7) (= true_term (is AMBIGUOUSVARIABLEACCESS_33_55_7 T_int)) (= ASGBITAND_pre_32_49_26 ASGBITAND_32_49_26) (= true_term (is ASGBITAND_32_49_26 T_int)) (= loc_pre_88_49_13 loc_88_49_13) (= loc_88_49_13 (asField loc_88_49_13 T_int)) (= pmodifiers_pre_24_30_27 pmodifiers_24_30_27) (= pmodifiers_24_30_27 (asField pmodifiers_24_30_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_24_30_27) alloc) (= elems_pre elems) (= elems (asElems elems)) (< (eClosedTime elems) alloc) (= LS (asLockSet LS)) (= alloc_pre alloc)) (not (and (= true_term (is this T_javafe_ast_StandardPrettyPrint)) (= true_term (isAllocated this alloc)) (not (= this null)) (= true_term (is o_1067_33 T_java_io_OutputStream)) (= true_term (isAllocated o_1067_33 alloc)) (= true_term (is lp_1067_50 T_javafe_ast_LexicalPragma)) (= true_term (isAllocated lp_1067_50 alloc)) ?v_6 ?v_2 (or ?v_8 (and ?v_2 ?v_11 ?v_3 ?v_12 ?v_13 (or (and ?v_7 (not (and ?v_6 (not (= s_1068_4_1068_4_4_381_50 null))))) (and ?v_7 ?v_14 (or ?v_8 (and ?v_2 ?v_15 ?v_16 ?v_9 ?v_17 (not (and ?v_6 ?v_10))))))) (and ?v_2 ?v_11 ?v_3 ?v_12 ?v_13 ?v_7 ?v_14 ?v_2 ?v_15 ?v_16 ?v_9 ?v_17 (= EC_1069_4_1069_4 ecReturn) (not (= ecReturn ecReturn)))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/javafe.ast.StmtVec.009.smt2 b/test/regress/regress0/quantifiers/javafe.ast.StmtVec.009.smt2 new file mode 100644 index 000000000..1c3aa1d8b --- /dev/null +++ b/test/regress/regress0/quantifiers/javafe.ast.StmtVec.009.smt2 @@ -0,0 +1,398 @@ +(set-logic AUFLIA) +(set-info :source | + Simplify front end test suite. + This benchmark was translated by Michal Moskal. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun after_133.8_133.8 () Int) +(declare-fun integralOr (Int Int) Int) +(declare-fun els_81.27 () Int) +(declare-fun arrayShapeMore (Int Int) Int) +(declare-fun count_150.3 () Int) +(declare-fun tmp0_cor_166.15 () Int) +(declare-fun tmp1_elements_179.1 () Int) +(declare-fun integralAnd (Int Int) Int) +(declare-fun T_.TYPE () Int) +(declare-fun EC_167.11_167.11 () Int) +(declare-fun EC_178.11_178.11 () Int) +(declare-fun elements_83.6 () Int) +(declare-fun currentStackBottom_pre_19.87.33 () Int) +(declare-fun index_164.36 () Int) +(declare-fun intFirst () Int) +(declare-fun after_113.8_113.8 () Int) +(declare-fun elementType_pre_19.43.27 () Int) +(declare-fun eClosedTime (Int) Int) +(declare-fun int_m9223372036854775808 () Int) +(declare-fun RES_167.11_167.11 () Int) +(declare-fun RES_121.14_121.14 () Int) +(declare-fun int_m2147483648 () Int) +(declare-fun T_java.lang.Comparable () Int) +(declare-fun EC_81.32_81.32 () Int) +(declare-fun arrayPosition (Int) Int) +(declare-fun after_81.32_81.32 () Int) +(declare-fun RES_91.29_91.29 () Int) +(declare-fun EC_169.20_169.20 () Int) +(declare-fun after_151.3_151.3_19.296.17 () Int) +(declare-fun select1 (Int Int) Int) +(declare-fun select2 (Int Int Int) Int) +(declare-fun T_java.util.EscjavaKeyValue () Int) +(declare-fun cnt_91.24 () Int) +(declare-fun elems_1_ () Int) +(declare-fun owner_84.18 () Int) +(declare-fun T_long () Int) +(declare-fun T_javafe.util.StackVector () Int) +(declare-fun count_123.8 () Int) +(declare-fun lockLE (Int Int) Bool) +(declare-fun classLiteral (Int) Int) +(declare-fun after_86.8_86.8_9.342.17 () Int) +(declare-fun elements_61.33 () Int) +(declare-fun count_82.6 () Int) +(declare-fun T_java.lang.RuntimeException () Int) +(declare-fun RES_147.12_147.12 () Int) +(declare-fun lockLT (Int Int) Bool) +(declare-fun elems_2_ () Int) +(declare-fun RES_107.8_107.8 () Int) +(declare-fun elements_zero () Int) +(declare-fun T_float () Int) +(declare-fun elements_19.72.21 () Int) +(declare-fun alloc () Int) +(declare-fun RES_122.18_122.18 () Int) +(declare-fun asChild (Int Int) Int) +(declare-fun CONCVARSYM (Int) Int) +(declare-fun T_int () Int) +(declare-fun int_2147483647 () Int) +(declare-fun elementCount_pre_19.79.33 () Int) +(declare-fun int_9223372036854775807 () Int) +(declare-fun this () Int) +(declare-fun T_byte () Int) +(declare-fun T_java.lang.System () Int) +(declare-fun store1 (Int Int Int) Int) +(declare-fun store2 (Int Int Int Int) Int) +(declare-fun RES_148.13_148.13 () Int) +(declare-fun elementType_12.65.27 () Int) +(declare-fun owner_pre_4.35.28 () Int) +(declare-fun containsNull_12.70.29 () Int) +(declare-fun elements_pre_19.72.21 () Int) +(declare-fun max (Int) Int) +(declare-fun currentStackBottom_19.87.33 () Int) +(declare-fun T_java.util.List () Int) +(declare-fun objectToBeConstructed () Int) +(declare-fun T_java.util.Map () Int) +(declare-fun elementData_10.79.35 () Int) +(declare-fun EC_91.29_91.29 () Int) +(declare-fun integralDiv (Int Int) Int) +(declare-fun after_151.3_151.3_19.298.17 () Int) +(declare-fun T_java.util.AbstractCollection () Int) +(declare-fun elems_86.8_9.342.17 () Int) +(declare-fun T_java.lang.Class () Int) +(declare-fun obj_169.20_169.20_23.30.38 () Int) +(declare-fun after_151.3_151.3_19.298.31 () Int) +(declare-fun vectorCount_19.97.33 () Int) +(declare-fun T_java.lang.Object () Int) +(declare-fun tmp1_elements_84.9 () Int) +(declare-fun tmp1_cond_92.36 () Int) +(declare-fun RES_178.11_178.11 () Int) +(declare-fun tmp3_elements_86.25 () Int) +(declare-fun longLast () Int) +(declare-fun termConditional (Int Int Int) Int) +(declare-fun vectorCount_151.3_19.296.17 () Int) +(declare-fun elements_92.6 () Int) +(declare-fun T_java.util.Dictionary () Int) +(declare-fun vec_120.38 () Int) +(declare-fun elements_pre_61.33 () Int) +(declare-fun bool_false () Int) +(declare-fun Smt.true () Int) +(declare-fun EC_149.3_149.3 () Int) +(declare-fun asLockSet (Int) Int) +(declare-fun integralMod (Int Int) Int) +(declare-fun count_67.33_1_ () Int) +(declare-fun Smt.false () Int) +(declare-fun typeof (Int) Int) +(declare-fun int_18446744073709551615 () Int) +(declare-fun owner_4.35.28 () Int) +(declare-fun count_112.35 () Int) +(declare-fun elementCount_pre_10.90.35 () Int) +(declare-fun x_175.40 () Int) +(declare-fun stringCat (Int Int) Int) +(declare-fun T_java.util.Vector () Int) +(declare-fun tmp0_cor_177.5 () Int) +(declare-fun T_boolean () Int) +(declare-fun longFirst () Int) +(declare-fun T_java.util.Hashtable () Int) +(declare-fun T_java.util.Properties () Int) +(declare-fun after_91.29_91.29 () Int) +(declare-fun arrayFresh (Int Int Int Int Int Int Int) Bool) +(declare-fun tmp0_new_Stmt___92.17 () Int) +(declare-fun RES () Int) +(declare-fun EC_86.8_86.8 () Int) +(declare-fun count_95.6 () Int) +(declare-fun EC_107.8_107.8 () Int) +(declare-fun elementCount_19.79.33 () Int) +(declare-fun after_107.8_107.8 () Int) +(declare-fun intLast () Int) +(declare-fun arrayType () Int) +(declare-fun boolEq (Int Int) Bool) +(declare-fun arrayLength (Int) Int) +(declare-fun cast (Int Int) Int) +(declare-fun tmp0_cor_166.5 () Int) +(declare-fun asElems (Int) Int) +(declare-fun s_145.71 () Int) +(declare-fun T_char () Int) +(declare-fun RES_133.8_133.8 () Int) +(declare-fun owner_93.18 () Int) +(declare-fun dst_149.3_149.3_19.228.40 () Int) +(declare-fun count_pre_67.33 () Int) +(declare-fun elementType_pre_12.65.27 () Int) +(declare-fun T_javafe.ast.ASTNode () Int) +(declare-fun ecThrow () Int) +(declare-fun elementCount_151.3_19.298.17 () Int) +(declare-fun divides (Int Int) Int) +(declare-fun RES_113.8_113.8 () Int) +(declare-fun length_86.8_86.8_9.360.44 () Int) +(declare-fun anArray_124.5_124.5_10.188.45 () Int) +(declare-fun elementType_19.43.27 () Int) +(declare-fun T_javafe.util.Assert () Int) +(declare-fun InRange (Int Int) Bool) +(declare-fun count_67.33 () Int) +(declare-fun RES_81.32_81.32 () Int) +(declare-fun tmp0_cor_177.15 () Int) +(declare-fun elems_149.3_19.225.17 () Int) +(declare-fun tmp2_elements_93.9 () Int) +(declare-fun elementData_pre_10.79.35 () Int) +(declare-fun refEQ (Int Int) Int) +(declare-fun after_149.3_149.3_19.225.17 () Int) +(declare-fun is (Int Int) Int) +(declare-fun index_175.48 () Int) +(declare-fun vectorCount_pre_19.97.33 () Int) +(declare-fun integralEQ (Int Int) Int) +(declare-fun T_java.lang.ArrayIndexOutOfBoundsException () Int) +(declare-fun containsNull_pre_12.70.29 () Int) +(declare-fun boolNE (Int Int) Bool) +(declare-fun isNewArray (Int) Int) +(declare-fun elems_pre () Int) +(declare-fun T_javafe.ast.Stmt () Int) +(declare-fun intShiftL (Int Int) Int) +(declare-fun nonnullelements (Int Int) Bool) +(declare-fun T_java.util.AbstractList () Int) +(declare-fun elementCount_10.90.35 () Int) +(declare-fun multiply (Int Int) Int) +(declare-fun integralGE (Int Int) Int) +(declare-fun T_short () Int) +(declare-fun EC_151.3_151.3 () Int) +(declare-fun alloc_pre () Int) +(declare-fun integralGT (Int Int) Int) +(declare-fun EC () Int) +(declare-fun elements_61.33_1_ () Int) +(declare-fun EC_121.14_121.14 () Int) +(declare-fun boolAnd (Int Int) Bool) +(declare-fun EC_113.8_113.8 () Int) +(declare-fun T_java.util.Collection () Int) +(declare-fun arrayShapeOne (Int) Int) +(declare-fun T_double () Int) +(declare-fun longShiftL (Int Int) Int) +(declare-fun T_java.io.Serializable () Int) +(declare-fun boolOr (Int Int) Bool) +(declare-fun int_4294967295 () Int) +(declare-fun modulo (Int Int) Int) +(declare-fun EC_124.5_124.5 () Int) +(declare-fun T_java.lang.StringBuffer () Int) +(declare-fun after_122.18_122.18 () Int) +(declare-fun EC_147.12_147.12 () Int) +(declare-fun null () Int) +(declare-fun T_java.lang.Exception () Int) +(declare-fun T_java.lang.Throwable () Int) +(declare-fun currentStackBottom_151.3_19.298.31 () Int) +(declare-fun T_java.lang.String () Int) +(declare-fun EC_122.18_122.18 () Int) +(declare-fun asField (Int Int) Int) +(declare-fun after_148.13_148.13 () Int) +(declare-fun T_javafe.ast.StmtVec () Int) +(declare-fun T_java.lang.IndexOutOfBoundsException () Int) +(declare-fun boolImplies (Int Int) Bool) +(declare-fun integralLE (Int Int) Int) +(declare-fun RES_1_ () Int) +(declare-fun integralLT (Int Int) Int) +(declare-fun vAllocTime (Int) Int) +(declare-fun EC_148.13_148.13 () Int) +(declare-fun T_java.lang.Cloneable () Int) +(declare-fun boolNot (Int) Bool) +(declare-fun refNE (Int Int) Int) +(declare-fun integralXor (Int Int) Int) +(declare-fun classDown (Int Int) Int) +(declare-fun els_132.38 () Int) +(declare-fun integralNE (Int Int) Int) +(declare-fun arrayParent (Int) Int) +(declare-fun elemtype (Int) Int) +(declare-fun fClosedTime (Int) Int) +(declare-fun alloc_1_ () Int) +(declare-fun array (Int) Int) +(declare-fun LS () Int) +(declare-fun ecReturn () Int) +(declare-fun isAllocated (Int Int) Bool) +(declare-fun after_167.11_167.11 () Int) +(declare-fun after_178.11_178.11 () Int) +(declare-fun elems () Int) +(declare-fun subtypes (Int Int) Bool) +(declare-fun tmp0_new_Stmt___83.17 () Int) +(declare-fun EC_133.8_133.8 () Int) +(assert (subtypes T_java.lang.Exception T_java.lang.Throwable)) +(assert (= T_java.lang.Exception (asChild T_java.lang.Exception T_java.lang.Throwable))) +(assert (subtypes T_javafe.ast.Stmt T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.Stmt (asChild T_javafe.ast.Stmt T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.util.Assert T_java.lang.Object)) +(assert (= T_javafe.util.Assert (asChild T_javafe.util.Assert T_java.lang.Object))) +(assert (subtypes T_java.util.Properties T_java.util.Hashtable)) +(assert (= T_java.util.Properties (asChild T_java.util.Properties T_java.util.Hashtable))) +(assert (subtypes T_java.lang.Cloneable T_java.lang.Object)) +(assert (subtypes T_java.lang.IndexOutOfBoundsException T_java.lang.RuntimeException)) +(assert (= T_java.lang.IndexOutOfBoundsException (asChild T_java.lang.IndexOutOfBoundsException T_java.lang.RuntimeException))) +(assert (subtypes T_java.util.Dictionary T_java.lang.Object)) +(assert (= T_java.util.Dictionary (asChild T_java.util.Dictionary T_java.lang.Object))) +(assert (subtypes T_java.util.Dictionary T_java.util.EscjavaKeyValue)) +(assert (subtypes T_java.lang.ArrayIndexOutOfBoundsException T_java.lang.IndexOutOfBoundsException)) +(assert (= T_java.lang.ArrayIndexOutOfBoundsException (asChild T_java.lang.ArrayIndexOutOfBoundsException T_java.lang.IndexOutOfBoundsException))) +(assert (subtypes T_java.util.Map T_java.lang.Object)) +(assert (subtypes T_java.util.Map T_java.util.EscjavaKeyValue)) +(assert (subtypes T_java.io.Serializable T_java.lang.Object)) +(assert (subtypes T_java.lang.StringBuffer T_java.lang.Object)) +(assert (= T_java.lang.StringBuffer (asChild T_java.lang.StringBuffer T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_java.lang.StringBuffer) (= ?t T_java.lang.StringBuffer)) :pattern ((subtypes ?t T_java.lang.StringBuffer)) ))) +(assert (subtypes T_java.lang.StringBuffer T_java.io.Serializable)) +(assert (subtypes T_javafe.ast.StmtVec T_java.lang.Object)) +(assert (= T_javafe.ast.StmtVec (asChild T_javafe.ast.StmtVec T_java.lang.Object))) +(assert (subtypes T_java.util.AbstractCollection T_java.lang.Object)) +(assert (= T_java.util.AbstractCollection (asChild T_java.util.AbstractCollection T_java.lang.Object))) +(assert (subtypes T_java.util.AbstractCollection T_java.util.Collection)) +(assert (subtypes T_java.util.Vector T_java.util.AbstractList)) +(assert (= T_java.util.Vector (asChild T_java.util.Vector T_java.util.AbstractList))) +(assert (subtypes T_java.util.Vector T_java.util.List)) +(assert (subtypes T_java.util.Vector T_java.lang.Cloneable)) +(assert (subtypes T_java.util.Vector T_java.io.Serializable)) +(assert (subtypes T_java.util.Hashtable T_java.util.Dictionary)) +(assert (= T_java.util.Hashtable (asChild T_java.util.Hashtable T_java.util.Dictionary))) +(assert (subtypes T_java.util.Hashtable T_java.util.Map)) +(assert (subtypes T_java.util.Hashtable T_java.lang.Cloneable)) +(assert (subtypes T_java.util.Hashtable T_java.io.Serializable)) +(assert (subtypes T_java.lang.System T_java.lang.Object)) +(assert (= T_java.lang.System (asChild T_java.lang.System T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_java.lang.System) (= ?t T_java.lang.System)) :pattern ((subtypes ?t T_java.lang.System)) ))) +(assert (subtypes T_javafe.util.StackVector T_java.lang.Object)) +(assert (= T_javafe.util.StackVector (asChild T_javafe.util.StackVector T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_javafe.util.StackVector) (= ?t T_javafe.util.StackVector)) :pattern ((subtypes ?t T_javafe.util.StackVector)) ))) +(assert (subtypes T_java.lang.String T_java.lang.Object)) +(assert (= T_java.lang.String (asChild T_java.lang.String T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_java.lang.String) (= ?t T_java.lang.String)) :pattern ((subtypes ?t T_java.lang.String)) ))) +(assert (subtypes T_java.lang.String T_java.io.Serializable)) +(assert (subtypes T_java.lang.String T_java.lang.Comparable)) +(assert (subtypes T_java.util.AbstractList T_java.util.AbstractCollection)) +(assert (= T_java.util.AbstractList (asChild T_java.util.AbstractList T_java.util.AbstractCollection))) +(assert (subtypes T_java.util.AbstractList T_java.util.List)) +(assert (subtypes T_java.util.List T_java.lang.Object)) +(assert (subtypes T_java.util.List T_java.util.Collection)) +(assert (subtypes T_java.lang.Throwable T_java.lang.Object)) +(assert (= T_java.lang.Throwable (asChild T_java.lang.Throwable T_java.lang.Object))) +(assert (subtypes T_java.lang.Throwable T_java.io.Serializable)) +(assert (subtypes T_java.util.Collection T_java.lang.Object)) +(assert (subtypes T_java.lang.RuntimeException T_java.lang.Exception)) +(assert (= T_java.lang.RuntimeException (asChild T_java.lang.RuntimeException T_java.lang.Exception))) +(assert (subtypes T_java.util.EscjavaKeyValue T_java.lang.Object)) +(assert (subtypes T_java.lang.Comparable T_java.lang.Object)) +(assert (subtypes T_javafe.ast.ASTNode T_java.lang.Object)) +(assert (= T_javafe.ast.ASTNode (asChild T_javafe.ast.ASTNode T_java.lang.Object))) +(assert (subtypes T_javafe.ast.ASTNode T_java.lang.Cloneable)) +(assert (distinct arrayType T_boolean T_char T_byte T_short T_int T_long T_float T_double T_.TYPE T_java.lang.Exception T_javafe.ast.Stmt T_javafe.util.Assert T_java.util.Properties T_java.lang.Cloneable T_java.lang.IndexOutOfBoundsException T_java.util.Dictionary T_java.lang.ArrayIndexOutOfBoundsException T_java.util.Map T_java.io.Serializable T_java.lang.StringBuffer T_javafe.ast.StmtVec T_java.util.AbstractCollection T_java.util.Vector T_java.util.Hashtable T_java.lang.System T_javafe.util.StackVector T_java.lang.String T_java.lang.Object T_java.util.AbstractList T_java.util.List T_java.lang.Throwable T_java.util.Collection T_java.lang.RuntimeException T_java.util.EscjavaKeyValue T_java.lang.Comparable T_javafe.ast.ASTNode)) +(assert (forall ((?n Int)) (! (=> (and (<= 0 ?n) (< ?n 63)) (<= 1 (longShiftL 1 ?n))) :pattern ((longShiftL 1 ?n)) ))) +(assert (forall ((?n Int)) (! (=> (and (<= 0 ?n) (< ?n 31)) (<= 1 (intShiftL 1 ?n))) :pattern ((intShiftL 1 ?n)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (and (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralXor ?x ?y))) :pattern ((integralXor ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (integralDiv ?x ?y))) (=> (and (<= 0 ?x) (< 0 ?y)) (and (<= 0 ?v_0) (<= ?v_0 ?x)))) :pattern ((integralDiv ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (integralOr ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= ?x ?v_0) (<= ?y ?v_0)))) :pattern ((integralOr ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (<= 0 ?y) (<= (integralAnd ?x ?y) ?y)) :pattern ((integralAnd ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (<= 0 ?x) (<= (integralAnd ?x ?y) ?x)) :pattern ((integralAnd ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralAnd ?x ?y))) :pattern ((integralAnd ?x ?y)) ))) +(assert (forall ((?t Int)) (! (let ((?v_0 (classLiteral ?t))) (and (not (= ?v_0 null)) (= Smt.true (is ?v_0 T_java.lang.Class)) (isAllocated ?v_0 alloc))) :pattern ((classLiteral ?t)) ))) +(assert (forall ((?x Int) (?e Int)) (= (nonnullelements ?x ?e) (and (not (= ?x null)) (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i (arrayLength ?x))) (not (= (select1 (select1 ?e ?x) ?i) null)))))))) +(assert (forall ((?b Int) (?x Int) (?y Int)) (! (=> (not (= ?b Smt.true)) (= (termConditional ?b ?x ?y) ?y)) :pattern ((termConditional ?b ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (termConditional Smt.true ?x ?y) ?x) :pattern ((termConditional Smt.true ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (refNE ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((refNE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (refEQ ?x ?y) Smt.true) (= ?x ?y)) :pattern ((refEQ ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralNE ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((integralNE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralLT ?x ?y) Smt.true) (< ?x ?y)) :pattern ((integralLT ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralLE ?x ?y) Smt.true) (<= ?x ?y)) :pattern ((integralLE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralGT ?x ?y) Smt.true) (> ?x ?y)) :pattern ((integralGT ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralGE ?x ?y) Smt.true) (>= ?x ?y)) :pattern ((integralGE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (stringCat ?x ?y))) (and (not (= ?v_0 null)) (subtypes (typeof ?v_0) T_java.lang.String))) :pattern ((stringCat ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralEQ ?x ?y) Smt.true) (= ?x ?y)) :pattern ((integralEQ ?x ?y)) ))) +(assert (forall ((?a Int) (?b Int)) (= (boolOr ?a ?b) (or (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?a Int)) (= (boolNot ?a) (not (= ?a Smt.true))))) +(assert (forall ((?a Int) (?b Int)) (= (boolNE ?a ?b) (not (= (= ?a Smt.true) (= ?b Smt.true)))))) +(assert (forall ((?a Int) (?b Int)) (= (boolImplies ?a ?b) (=> (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?a Int) (?b Int)) (= (boolEq ?a ?b) (= (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?a Int) (?b Int)) (= (boolAnd ?a ?b) (and (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (multiply ?x ?y))) (= (multiply (integralDiv ?v_0 ?y) ?y) ?v_0)))) +(assert (forall ((?i Int) (?j Int)) (= (integralMod (+ ?j ?i) ?j) (integralMod ?i ?j)))) +(assert (forall ((?i Int) (?j Int)) (= (integralMod (+ ?i ?j) ?j) (integralMod ?i ?j)))) +(assert (forall ((?i Int) (?j Int)) (! (let ((?v_0 (integralMod ?i ?j))) (=> (< ?j 0) (and (< ?j ?v_0) (<= ?v_0 0)))) :pattern ((integralMod ?i ?j)) ))) +(assert (forall ((?i Int) (?j Int)) (! (let ((?v_0 (integralMod ?i ?j))) (=> (< 0 ?j) (and (<= 0 ?v_0) (< ?v_0 ?j)))) :pattern ((integralMod ?i ?j)) ))) +(assert (forall ((?i Int) (?j Int)) (! (= (+ (multiply (integralDiv ?i ?j) ?j) (integralMod ?i ?j)) ?i) :pattern ((integralMod ?i ?j)) :pattern ((integralDiv ?i ?j)) ))) +(assert (forall ((?s Int)) (! (=> (= Smt.true (isNewArray ?s)) (subtypes (typeof ?s) arrayType)) :pattern ((isNewArray ?s)) ))) +(assert (forall ((?t Int)) (! (subtypes (array ?t) arrayType) :pattern ((array ?t)) ))) +(assert (= arrayType (asChild arrayType T_java.lang.Object))) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?T Int) (?v Int)) (! (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v) (and (<= ?a0 (vAllocTime ?a)) (isAllocated ?a ?b0) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (! (= (select1 (select1 ?e ?a) ?i) ?v) :pattern ((select1 (select1 ?e ?a) ?i)) )))) :pattern ((arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v)) ))) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?s Int) (?T Int) (?v Int)) (! (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v) (and (<= ?a0 (vAllocTime ?a)) (isAllocated ?a ?b0) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (! (let ((?v_0 (select1 (select1 ?e ?a) ?i))) (and (arrayFresh ?v_0 ?a0 ?b0 ?e ?s (elemtype ?T) ?v) (= (arrayParent ?v_0) ?a) (= (arrayPosition ?v_0) ?i))) :pattern ((select1 (select1 ?e ?a) ?i)) )))) :pattern ((arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v)) ))) +(assert (forall ((?a Int)) (! (let ((?v_0 (arrayLength ?a))) (and (<= 0 ?v_0) (= Smt.true (is ?v_0 T_int)))) :pattern ((arrayLength ?a)) ))) +(assert (forall ((?x Int)) (! (=> (subtypes (typeof ?x) T_java.lang.Object) (lockLE null ?x)) :pattern ((lockLE null ?x)) :pattern ((lockLT null ?x)) :pattern ((lockLE ?x null)) :pattern ((lockLT ?x null)) ))) +(assert (forall ((?S Int) (?mu Int)) (let ((?v_0 (asLockSet ?S))) (=> (= (select1 ?v_0 ?mu) Smt.true) (lockLE ?mu (max ?v_0)))))) +(assert (forall ((?x Int) (?y Int)) (= (lockLT ?x ?y) (< ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (lockLE ?x ?y) (<= ?x ?y)))) +(assert (forall ((?S Int)) (! (= (select1 (asLockSet ?S) null) Smt.true) :pattern ((asLockSet ?S)) ))) +(assert (forall ((?S Int)) (let ((?v_0 (asLockSet ?S))) (= (select1 ?v_0 (max ?v_0)) Smt.true)))) +(assert (forall ((?a Int) (?e Int) (?i Int) (?a0 Int)) (! (=> (and (< (eClosedTime ?e) ?a0) (isAllocated ?a ?a0)) (isAllocated (select1 (select1 ?e ?a) ?i) ?a0)) :pattern ((isAllocated (select1 (select1 ?e ?a) ?i) ?a0)) ))) +(assert (forall ((?x Int) (?f Int) (?a0 Int)) (! (=> (and (< (fClosedTime ?f) ?a0) (isAllocated ?x ?a0)) (isAllocated (select1 ?f ?x) ?a0)) :pattern ((isAllocated (select1 ?f ?x) ?a0)) ))) +(assert (forall ((?x Int) (?a0 Int)) (= (isAllocated ?x ?a0) (< (vAllocTime ?x) ?a0)))) +(assert (forall ((?e Int) (?a Int) (?i Int)) (! (= Smt.true (is (select1 (select1 (asElems ?e) ?a) ?i) (elemtype (typeof ?a)))) :pattern ((select1 (select1 (asElems ?e) ?a) ?i)) ))) +(assert (forall ((?f Int) (?t Int) (?x Int)) (! (= Smt.true (is (select1 (asField ?f ?t) ?x) ?t)) :pattern ((select1 (asField ?f ?t) ?x)) ))) +(assert (forall ((?x Int) (?t Int)) (! (=> (subtypes ?t T_java.lang.Object) (= (= Smt.true (is ?x ?t)) (or (= ?x null) (subtypes (typeof ?x) ?t)))) :pattern ((subtypes ?t T_java.lang.Object) (is ?x ?t)) ))) +(assert (< intLast longLast)) +(assert (< 1000000 intLast)) +(assert (< intFirst (- 1000000))) +(assert (< longFirst intFirst)) +(assert (forall ((?x Int)) (! (= (= Smt.true (is ?x T_long)) (and (<= longFirst ?x) (<= ?x longLast))) :pattern ((is ?x T_long)) ))) +(assert (forall ((?x Int)) (! (= (= Smt.true (is ?x T_int)) (and (<= intFirst ?x) (<= ?x intLast))) :pattern ((is ?x T_int)) ))) +(assert (forall ((?x Int)) (= (= Smt.true (is ?x T_short)) (and (<= (- 32768) ?x) (<= ?x 32767))))) +(assert (forall ((?x Int)) (= (= Smt.true (is ?x T_byte)) (and (<= (- 128) ?x) (<= ?x 127))))) +(assert (forall ((?x Int)) (! (= (= Smt.true (is ?x T_char)) (and (<= 0 ?x) (<= ?x 65535))) :pattern ((is ?x T_char)) ))) +(assert (distinct bool_false Smt.true)) +(assert (forall ((?x Int) (?t Int)) (! (=> (= Smt.true (is ?x ?t)) (= (cast ?x ?t) ?x)) :pattern ((cast ?x ?t)) ))) +(assert (forall ((?x Int) (?t Int)) (! (= Smt.true (is (cast ?x ?t) ?t)) :pattern ((cast ?x ?t)) ))) +(assert (forall ((?t0 Int) (?t1 Int)) (! (let ((?v_0 (elemtype ?t0))) (= (subtypes ?t0 (array ?t1)) (and (= ?t0 (array ?v_0)) (subtypes ?v_0 ?t1)))) :pattern ((subtypes ?t0 (array ?t1))) ))) +(assert (forall ((?t Int)) (! (= (elemtype (array ?t)) ?t) :pattern ((elemtype (array ?t))) ))) +(assert (forall ((?t Int)) (! (subtypes (array ?t) T_java.lang.Cloneable) :pattern ((array ?t)) ))) +(assert (subtypes T_java.lang.Cloneable T_java.lang.Object)) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (let ((?v_0 (asChild ?t1 ?t2))) (=> (subtypes ?t0 ?v_0) (= (classDown ?t2 ?t0) ?v_0))))) +(assert (forall ((?t Int)) (! (=> (subtypes T_double ?t) (= ?t T_double)) :pattern ((subtypes T_double ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_float ?t) (= ?t T_float)) :pattern ((subtypes T_float ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_long ?t) (= ?t T_long)) :pattern ((subtypes T_long ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_int ?t) (= ?t T_int)) :pattern ((subtypes T_int ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_short ?t) (= ?t T_short)) :pattern ((subtypes T_short ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_byte ?t) (= ?t T_byte)) :pattern ((subtypes T_byte ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_char ?t) (= ?t T_char)) :pattern ((subtypes T_char ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_boolean ?t) (= ?t T_boolean)) :pattern ((subtypes T_boolean ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_double) (= ?t T_double)) :pattern ((subtypes ?t T_double)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_float) (= ?t T_float)) :pattern ((subtypes ?t T_float)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_long) (= ?t T_long)) :pattern ((subtypes ?t T_long)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_int) (= ?t T_int)) :pattern ((subtypes ?t T_int)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_short) (= ?t T_short)) :pattern ((subtypes ?t T_short)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_byte) (= ?t T_byte)) :pattern ((subtypes ?t T_byte)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_char) (= ?t T_char)) :pattern ((subtypes ?t T_char)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_boolean) (= ?t T_boolean)) :pattern ((subtypes ?t T_boolean)) ))) +(assert (forall ((?t0 Int) (?t1 Int)) (! (=> (and (subtypes ?t0 ?t1) (subtypes ?t1 ?t0)) (= ?t0 ?t1)) :pattern ((subtypes ?t0 ?t1) (subtypes ?t1 ?t0)) ))) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (! (=> (and (subtypes ?t0 ?t1) (subtypes ?t1 ?t2)) (subtypes ?t0 ?t2)) :pattern ((subtypes ?t0 ?t1) (subtypes ?t1 ?t2)) ))) +(assert (subtypes T_java.lang.Object T_java.lang.Object)) +(assert (forall ((?t Int)) (! (subtypes ?t ?t) :pattern ((subtypes ?t ?t)) ))) +(assert (forall ((?m Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (select1 (store1 ?m ?i ?x) ?j) (select1 ?m ?j))))) +(assert (forall ((?m Int) (?i Int) (?x Int)) (= (select1 (store1 ?m ?i ?x) ?i) ?x))) +(assert (let ((?v_0 (array T_java.lang.Object)) (?v_6 (<= 0 index_175.48)) (?v_2 (select1 count_67.33 this)) (?v_1 (< index_175.48 0)) (?v_3 (= Smt.true Smt.true))) (let ((?v_8 (or (and ?v_1 ?v_3 (= tmp0_cor_177.15 Smt.true)) (and (not ?v_1) (= tmp0_cor_177.5 (integralGE index_175.48 ?v_2)) (= tmp0_cor_177.15 tmp0_cor_177.5)))) (?v_5 (= Smt.true tmp0_cor_177.15)) (?v_12 (< alloc after_178.11_178.11)) (?v_4 (not (= RES_178.11_178.11 null))) (?v_13 (not (isAllocated RES_178.11_178.11 alloc))) (?v_14 (= Smt.true (is RES_178.11_178.11 T_java.lang.ArrayIndexOutOfBoundsException))) (?v_15 (isAllocated RES_178.11_178.11 after_178.11_178.11)) (?v_16 (= EC_178.11_178.11 ecReturn)) (?v_17 (= (select1 owner_4.35.28 RES_178.11_178.11) null)) (?v_18 (= (typeof RES_178.11_178.11) T_java.lang.ArrayIndexOutOfBoundsException))) (let ((?v_9 (not ?v_5)) (?v_10 (= tmp1_elements_179.1 (select1 elements_61.33 this))) (?v_7 (< index_175.48 (arrayLength tmp1_elements_179.1))) (?v_11 (= Smt.true (is x_175.40 (elemtype (typeof tmp1_elements_179.1))))) (?v_19 (= EC ecReturn))) (not (=> (distinct ecReturn ecThrow) (=> (and (= elementCount_pre_19.79.33 elementCount_19.79.33) (= elementCount_19.79.33 (asField elementCount_19.79.33 T_int)) (= elementData_pre_10.79.35 elementData_10.79.35) (= elementData_10.79.35 (asField elementData_10.79.35 ?v_0)) (< (fClosedTime elementData_10.79.35) alloc) (forall ((?s Int)) (=> (not (= ?s null)) (not (= (select1 elementData_10.79.35 ?s) null)))) (= count_pre_67.33 count_67.33) (= count_67.33 (asField count_67.33 T_int)) (= owner_pre_4.35.28 owner_4.35.28) (= owner_4.35.28 (asField owner_4.35.28 T_java.lang.Object)) (< (fClosedTime owner_4.35.28) alloc) (= elementType_pre_19.43.27 elementType_19.43.27) (= elementType_19.43.27 (asField elementType_19.43.27 T_.TYPE)) (= containsNull_pre_12.70.29 containsNull_12.70.29) (= containsNull_12.70.29 (asField containsNull_12.70.29 T_boolean)) (= elements_pre_19.72.21 elements_19.72.21) (= elements_19.72.21 (asField elements_19.72.21 ?v_0)) (< (fClosedTime elements_19.72.21) alloc) (= elements_pre_61.33 elements_61.33) (= elements_61.33 (asField elements_61.33 (array T_javafe.ast.Stmt))) (< (fClosedTime elements_61.33) alloc) (forall ((?s_1_ Int)) (=> (not (= ?s_1_ null)) (not (= (select1 elements_61.33 ?s_1_) null)))) (= elementType_pre_12.65.27 elementType_12.65.27) (= elementType_12.65.27 (asField elementType_12.65.27 T_.TYPE)) (= elementCount_pre_10.90.35 elementCount_10.90.35) (= elementCount_10.90.35 (asField elementCount_10.90.35 T_int)) (= currentStackBottom_pre_19.87.33 currentStackBottom_19.87.33) (= currentStackBottom_19.87.33 (asField currentStackBottom_19.87.33 T_int)) (= vectorCount_pre_19.97.33 vectorCount_19.97.33) (= vectorCount_19.97.33 (asField vectorCount_19.97.33 T_int)) (= elems_pre elems) (= elems (asElems elems)) (< (eClosedTime elems) alloc) (= LS (asLockSet LS)) (= alloc_pre alloc)) (not (and (= Smt.true (is this T_javafe.ast.StmtVec)) (isAllocated this alloc) (not (= this null)) (= Smt.true (is x_175.40 T_javafe.ast.Stmt)) (isAllocated x_175.40 alloc) (= Smt.true (is index_175.48 T_int)) ?v_6 (< index_175.48 ?v_2) (not (= x_175.40 null)) (forall ((?brokenObj Int)) (=> (and (= Smt.true (is ?brokenObj T_javafe.ast.StmtVec)) (not (= ?brokenObj null))) (forall ((?i_62.31 Int)) (=> (and (<= 0 ?i_62.31) (< ?i_62.31 (select1 count_67.33 ?brokenObj))) (not (= (select1 (select1 elems (select1 elements_61.33 ?brokenObj)) ?i_62.31) null)))))) (forall ((?brokenObj_1_ Int)) (=> (and (= Smt.true (is ?brokenObj_1_ T_javafe.ast.StmtVec)) (not (= ?brokenObj_1_ null))) (<= (select1 count_67.33 ?brokenObj_1_) (arrayLength (select1 elements_61.33 ?brokenObj_1_))))) (forall ((?brokenObj_2_ Int)) (=> (and (= Smt.true (is ?brokenObj_2_ T_javafe.ast.StmtVec)) (not (= ?brokenObj_2_ null))) (<= 0 (select1 count_67.33 ?brokenObj_2_)))) (forall ((?brokenObj_3_ Int)) (=> (and (= Smt.true (is ?brokenObj_3_ T_javafe.ast.StmtVec)) (not (= ?brokenObj_3_ null))) (= (select1 owner_4.35.28 (select1 elements_61.33 ?brokenObj_3_)) ?brokenObj_3_))) (forall ((?brokenObj_4_ Int)) (=> (and (= Smt.true (is ?brokenObj_4_ T_javafe.ast.StmtVec)) (not (= ?brokenObj_4_ null))) (= (typeof (select1 elements_61.33 ?brokenObj_4_)) (array T_javafe.ast.Stmt)))) (or (and ?v_8 (or (and ?v_5 ?v_3 ?v_12 ?v_4 ?v_13 ?v_14 ?v_15 ?v_16 ?v_17 ?v_18 (not ?v_4)) (and ?v_9 ?v_3 ?v_10 (or (not ?v_6) (and ?v_6 (or (not ?v_7) (and ?v_7 (not ?v_11)))))))) (and (or (and ?v_8 ?v_9 ?v_3 ?v_10 ?v_6 ?v_7 ?v_11 (= elems_1_ (store1 elems tmp1_elements_179.1 (store1 (select1 elems tmp1_elements_179.1) index_175.48 x_175.40))) (= elems_2_ elems_1_) ?v_19 (= alloc_1_ alloc)) (and ?v_8 ?v_5 ?v_3 ?v_12 ?v_4 ?v_13 ?v_14 ?v_15 ?v_16 ?v_17 ?v_18 ?v_4 ?v_3 (= elems_2_ elems) (= EC ecThrow) (= alloc_1_ after_178.11_178.11))) (or (not ?v_19) (and ?v_19 (not (forall ((?brokenObj Int)) (=> (and (= Smt.true (is ?brokenObj T_javafe.ast.StmtVec)) (isAllocated ?brokenObj alloc_1_) (not (= ?brokenObj null))) (forall ((?i_62.31 Int)) (=> (and (<= 0 ?i_62.31) (< ?i_62.31 (select1 count_67.33 ?brokenObj))) (not (= (select1 (select1 elems_2_ (select1 elements_61.33 ?brokenObj)) ?i_62.31) null)))))))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/javafe.ast.WhileStmt.447.smt2 b/test/regress/regress0/quantifiers/javafe.ast.WhileStmt.447.smt2 new file mode 100644 index 000000000..9a5c07194 --- /dev/null +++ b/test/regress/regress0/quantifiers/javafe.ast.WhileStmt.447.smt2 @@ -0,0 +1,737 @@ +(set-logic AUFLIA) +(set-info :source | Simplify Theorem Prover Benchmark Suite |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun true_term () Int) +(declare-fun false_term () Int) +(assert (= true_term 1)) +(assert (= false_term 0)) +(declare-fun S_select (Int Int) Int) +(declare-fun S_store (Int Int Int) Int) +(assert (forall ((?m Int) (?i Int) (?x Int)) (= (S_select (S_store ?m ?i ?x) ?i) ?x))) +(assert (forall ((?m Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (S_select (S_store ?m ?i ?x) ?j) (S_select ?m ?j))))) +(declare-fun PO_LT (Int Int) Int) +(assert (forall ((?t Int)) (= (PO_LT ?t ?t) true_term))) +(declare-fun T_java_lang_Object () Int) +(assert (= (PO_LT T_java_lang_Object T_java_lang_Object) true_term)) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t2) true_term)) (= (PO_LT ?t0 ?t2) true_term)))) +(assert (forall ((?t0 Int) (?t1 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t0) true_term)) (= ?t0 ?t1)))) +(declare-fun T_boolean () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_boolean) true_term) (= ?t T_boolean)))) +(declare-fun T_char () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_char) true_term) (= ?t T_char)))) +(declare-fun T_byte () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_byte) true_term) (= ?t T_byte)))) +(declare-fun T_short () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_short) true_term) (= ?t T_short)))) +(declare-fun T_int () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_int) true_term) (= ?t T_int)))) +(declare-fun T_long () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_long) true_term) (= ?t T_long)))) +(declare-fun T_float () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_float) true_term) (= ?t T_float)))) +(declare-fun T_double () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_double) true_term) (= ?t T_double)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_boolean ?t) true_term) (= ?t T_boolean)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_char ?t) true_term) (= ?t T_char)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_byte ?t) true_term) (= ?t T_byte)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_short ?t) true_term) (= ?t T_short)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_int ?t) true_term) (= ?t T_int)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_long ?t) true_term) (= ?t T_long)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_float ?t) true_term) (= ?t T_float)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_double ?t) true_term) (= ?t T_double)))) +(declare-fun asChild (Int Int) Int) +(declare-fun classDown (Int Int) Int) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (let ((?v_0 (asChild ?t1 ?t2))) (=> (= (PO_LT ?t0 ?v_0) true_term) (= (classDown ?t2 ?t0) ?v_0))))) +(declare-fun T_java_lang_Cloneable () Int) +(assert (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term)) +(declare-fun array (Int) Int) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) T_java_lang_Cloneable) true_term))) +(declare-fun elemtype (Int) Int) +(assert (forall ((?t Int)) (= (elemtype (array ?t)) ?t))) +(assert (forall ((?t0 Int) (?t1 Int)) (let ((?v_0 (elemtype ?t0))) (= (= (PO_LT ?t0 (array ?t1)) true_term) (and (= ?t0 (array ?v_0)) (= (PO_LT ?v_0 ?t1) true_term)))))) +(declare-fun is (Int Int) Int) +(declare-fun cast (Int Int) Int) +(assert (forall ((?x Int) (?t Int)) (= (is (cast ?x ?t) ?t) true_term))) +(assert (forall ((?x Int) (?t Int)) (=> (= (is ?x ?t) true_term) (= (cast ?x ?t) ?x)))) +(assert true) +(assert (forall ((?x Int)) (= (= (is ?x T_char) true_term) (and (<= 0 ?x) (<= ?x 65535))))) +(assert (forall ((?x Int)) (= (= (is ?x T_byte) true_term) (and (<= (- 128) ?x) (<= ?x 127))))) +(assert (forall ((?x Int)) (= (= (is ?x T_short) true_term) (and (<= (- 32768) ?x) (<= ?x 32767))))) +(declare-fun intFirst () Int) +(declare-fun intLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_int) true_term) (and (<= intFirst ?x) (<= ?x intLast))))) +(declare-fun longFirst () Int) +(declare-fun longLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_long) true_term) (and (<= longFirst ?x) (<= ?x longLast))))) +(assert (< longFirst intFirst)) +(assert (< intFirst (- 1000000))) +(assert (< 1000000 intLast)) +(assert (< intLast longLast)) +(declare-fun null () Int) +(declare-fun typeof (Int) Int) +(assert (forall ((?x Int) (?t Int)) (=> (= (PO_LT ?t T_java_lang_Object) true_term) (= (= (is ?x ?t) true_term) (or (= ?x null) (= (PO_LT (typeof ?x) ?t) true_term)))))) +(declare-fun asField (Int Int) Int) +(assert (forall ((?f Int) (?t Int) (?x Int)) (= (is (S_select (asField ?f ?t) ?x) ?t) true_term))) +(declare-fun asElems (Int) Int) +(assert (forall ((?e Int) (?a Int) (?i Int)) (= (is (S_select (S_select (asElems ?e) ?a) ?i) (elemtype (typeof ?a))) true_term))) +(declare-fun vAllocTime (Int) Int) +(declare-fun isAllocated (Int Int) Int) +(assert (forall ((?x Int) (?a0 Int)) (= (= (isAllocated ?x ?a0) true_term) (< (vAllocTime ?x) ?a0)))) +(declare-fun fClosedTime (Int) Int) +(assert (forall ((?x Int) (?f Int) (?a0 Int)) (=> (and (< (fClosedTime ?f) ?a0) (= (isAllocated ?x ?a0) true_term)) (= (isAllocated (S_select ?f ?x) ?a0) true_term)))) +(declare-fun eClosedTime (Int) Int) +(assert (forall ((?a Int) (?e Int) (?i Int) (?a0 Int)) (=> (and (< (eClosedTime ?e) ?a0) (= (isAllocated ?a ?a0) true_term)) (= (isAllocated (S_select (S_select ?e ?a) ?i) ?a0) true_term)))) +(declare-fun asLockSet (Int) Int) +(declare-fun max (Int) Int) +(assert (forall ((?S Int)) (let ((?v_0 (asLockSet ?S))) (= (S_select ?v_0 (max ?v_0)) true_term)))) +(assert (forall ((?S Int)) (= (S_select (asLockSet ?S) null) true_term))) +(declare-fun lockLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun lockLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLT ?x ?y) true_term) (< ?x ?y)))) +(assert (forall ((?S Int) (?mu Int)) (let ((?v_0 (asLockSet ?S))) (=> (= (S_select ?v_0 ?mu) true_term) (= (lockLE ?mu (max ?v_0)) true_term))))) +(assert (forall ((?x Int)) (=> (= (PO_LT (typeof ?x) T_java_lang_Object) true_term) (= (lockLE null ?x) true_term)))) +(declare-fun arrayLength (Int) Int) +(assert (forall ((?a Int)) (let ((?v_0 (arrayLength ?a))) (and (<= 0 ?v_0) (= (is ?v_0 T_int) true_term))))) +(declare-fun arrayFresh (Int Int Int Int Int Int Int) Int) +(declare-fun arrayShapeMore (Int Int) Int) +(declare-fun arrayParent (Int) Int) +(declare-fun arrayPosition (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?s Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (let ((?v_0 (S_select (S_select ?e ?a) ?i))) (and (= (arrayFresh ?v_0 ?a0 ?b0 ?e ?s (elemtype ?T) ?v) true_term) (= (arrayParent ?v_0) ?a) (= (arrayPosition ?v_0) ?i)))))))) +(declare-fun arrayShapeOne (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (= (S_select (S_select ?e ?a) ?i) ?v)))))) +(declare-fun arrayType () Int) +(assert (= arrayType (asChild arrayType T_java_lang_Object))) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) arrayType) true_term))) +(declare-fun isNewArray (Int) Int) +(assert (forall ((?s Int)) (=> (= true_term (isNewArray ?s)) (= (PO_LT (typeof ?s) arrayType) true_term)))) +(declare-fun boolAnd (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolAnd ?a ?b) true_term) (and (= ?a true_term) (= ?b true_term))))) +(declare-fun boolEq (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolEq ?a ?b) true_term) (= (= ?a true_term) (= ?b true_term))))) +(declare-fun boolImplies (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolImplies ?a ?b) true_term) (=> (= ?a true_term) (= ?b true_term))))) +(declare-fun boolNE (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolNE ?a ?b) true_term) (not (= (= ?a true_term) (= ?b true_term)))))) +(declare-fun boolNot (Int) Int) +(assert (forall ((?a Int)) (= (= (boolNot ?a) true_term) (not (= ?a true_term))))) +(declare-fun boolOr (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolOr ?a ?b) true_term) (or (= ?a true_term) (= ?b true_term))))) +(declare-fun integralEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun stringCat (Int Int) Int) +(declare-fun T_java_lang_String () Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (stringCat ?x ?y))) (and (not (= ?v_0 null)) (= (PO_LT (typeof ?v_0) T_java_lang_String) true_term))))) +(declare-fun integralGE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGE ?x ?y) true_term) (>= ?x ?y)))) +(declare-fun integralGT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGT ?x ?y) true_term) (> ?x ?y)))) +(declare-fun integralLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun integralLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLT ?x ?y) true_term) (< ?x ?y)))) +(declare-fun integralNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun refEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun refNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun nonnullelements (Int Int) Int) +(assert (forall ((?x Int) (?e Int)) (= (= (nonnullelements ?x ?e) true_term) (and (not (= ?x null)) (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i (arrayLength ?x))) (not (= (S_select (S_select ?e ?x) ?i) null)))))))) +(declare-fun classLiteral (Int) Int) +(declare-fun T_java_lang_Class () Int) +(declare-fun alloc () Int) +(assert (forall ((?t Int)) (let ((?v_0 (classLiteral ?t))) (and (not (= ?v_0 null)) (= (is ?v_0 T_java_lang_Class) true_term) (= (isAllocated ?v_0 alloc) true_term))))) +(declare-fun integralAnd (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralAnd ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?x) (<= (integralAnd ?x ?y) ?x)))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?y) (<= (integralAnd ?x ?y) ?y)))) +(declare-fun integralOr (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (integralOr ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= ?x ?v_0) (<= ?y ?v_0)))))) +(declare-fun integralXor (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralXor ?x ?y))))) +(declare-fun intShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 31)) (<= 1 (intShiftL 1 ?n))))) +(declare-fun longShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 63)) (<= 1 (longShiftL 1 ?n))))) +(assert true) +(declare-fun T_javafe_tc_MethodDeclVec () Int) +(declare-fun T_javafe_ast_VarDeclStmt () Int) +(declare-fun T_javafe_ast_Stmt () Int) +(declare-fun T_javafe_ast_BinaryExpr () Int) +(declare-fun T_javafe_ast_Expr () Int) +(declare-fun T_java_lang_Comparable () Int) +(declare-fun T_javafe_ast_BranchStmt () Int) +(declare-fun T_javafe_ast_ClassLiteral () Int) +(declare-fun T_javafe_ast_ConstructorDecl () Int) +(declare-fun T_javafe_ast_RoutineDecl () Int) +(declare-fun T_javafe_ast_ArrayRefExpr () Int) +(declare-fun T_java_lang_Long () Int) +(declare-fun T_java_lang_Number () Int) +(declare-fun T_javafe_ast_AmbiguousMethodInvocation () Int) +(declare-fun T_javafe_tc_TypeSig () Int) +(declare-fun T_javafe_ast_Type () Int) +(declare-fun T_javafe_ast_SimpleName () Int) +(declare-fun T_javafe_ast_Name () Int) +(declare-fun T_javafe_ast_WhileStmt () Int) +(declare-fun T_javafe_ast_SwitchLabel () Int) +(declare-fun T_javafe_ast_VariableAccess () Int) +(declare-fun T_javafe_ast_DoStmt () Int) +(declare-fun T_javafe_ast_VarInit () Int) +(declare-fun T_javafe_tc_Env () Int) +(declare-fun T_javafe_ast_ASTNode () Int) +(declare-fun T_javafe_ast_OnDemandImportDecl () Int) +(declare-fun T_javafe_ast_ImportDecl () Int) +(declare-fun T_java_io_Serializable () Int) +(declare-fun T_javafe_ast_ParenExpr () Int) +(declare-fun T_javafe_ast_GenericVarDecl () Int) +(declare-fun T_javafe_ast_ContinueStmt () Int) +(declare-fun T_javafe_ast_InitBlock () Int) +(declare-fun T_javafe_ast_TypeDeclElem () Int) +(declare-fun T_javafe_ast_NewArrayExpr () Int) +(declare-fun T_javafe_ast_TypeObjectDesignator () Int) +(declare-fun T_javafe_ast_ObjectDesignator () Int) +(declare-fun T_javafe_ast_Visitor () Int) +(declare-fun T_java_lang_Exception () Int) +(declare-fun T_java_lang_Throwable () Int) +(declare-fun T_javafe_ast_ConstructorInvocation () Int) +(declare-fun T_javafe_ast_ExprVec () Int) +(declare-fun T_javafe_ast_GenericBlockStmt () Int) +(declare-fun T_javafe_ast_TryCatchStmt () Int) +(declare-fun T_javafe_ast_EvalStmt () Int) +(declare-fun T_java_util_Map () Int) +(declare-fun T_java_util_EscjavaKeyValue () Int) +(declare-fun T_java_lang_Integer () Int) +(declare-fun T_javafe_ast_FieldDecl () Int) +(declare-fun T_javafe_ast_ClassDecl () Int) +(declare-fun T_javafe_ast_TypeDecl () Int) +(declare-fun T_javafe_ast_TypeName () Int) +(declare-fun T_javafe_ast_ArrayInit () Int) +(declare-fun T_javafe_ast_InstanceOfExpr () Int) +(declare-fun T_javafe_ast_IfStmt () Int) +(declare-fun T_javafe_ast_SwitchStmt () Int) +(declare-fun T_javafe_ast_ThrowStmt () Int) +(declare-fun T_javafe_ast_ASTDecoration () Int) +(declare-fun T_javafe_ast_MethodInvocation () Int) +(declare-fun T_javafe_ast_LiteralExpr () Int) +(declare-fun T_javafe_ast_IdentifierVec () Int) +(declare-fun T_javafe_util_Location () Int) +(declare-fun T_javafe_ast_SkipStmt () Int) +(declare-fun T_javafe_ast_AmbiguousVariableAccess () Int) +(declare-fun T_javafe_ast_ClassDeclStmt () Int) +(declare-fun T_java_lang_Double () Int) +(declare-fun T_javafe_ast_UnaryExpr () Int) +(declare-fun T_javafe_ast_SuperObjectDesignator () Int) +(declare-fun T_java_lang_RuntimeException () Int) +(declare-fun T_javafe_ast_BreakStmt () Int) +(declare-fun T_javafe_ast_NewInstanceExpr () Int) +(declare-fun T_javafe_ast_MethodDecl () Int) +(declare-fun T_java_lang_Boolean () Int) +(declare-fun T_javafe_ast_OperatorTags () Int) +(declare-fun T_javafe_ast_GeneratedTags () Int) +(declare-fun T_javafe_ast_Identifier () Int) +(declare-fun T_javafe_ast_CompoundName () Int) +(declare-fun T_javafe_ast_SynchronizeStmt () Int) +(declare-fun T_javafe_ast_TryFinallyStmt () Int) +(declare-fun T_javafe_ast_FieldAccess () Int) +(declare-fun T_javafe_ast_LocalVarDecl () Int) +(declare-fun T_javafe_ast_PrimitiveType () Int) +(declare-fun T_javafe_ast_SingleTypeImportDecl () Int) +(declare-fun T_javafe_ast_LabelStmt () Int) +(declare-fun T_javafe_util_Assert () Int) +(declare-fun T_javafe_ast_CondExpr () Int) +(declare-fun T_javafe_ast_CompilationUnit () Int) +(declare-fun T_java_lang_Float () Int) +(declare-fun T_javafe_ast_VisitorArgResult () Int) +(declare-fun T_javafe_ast_CatchClause () Int) +(declare-fun T_javafe_parser_TagConstants () Int) +(declare-fun T_javafe_ast_TagConstants () Int) +(declare-fun T_javafe_ast_ExprObjectDesignator () Int) +(declare-fun T_javafe_tc_TagConstants () Int) +(declare-fun T_javafe_ast_BlockStmt () Int) +(declare-fun T_javafe_ast_ReturnStmt () Int) +(declare-fun T_javafe_tc_FieldDeclVec () Int) +(declare-fun T_java_lang_IndexOutOfBoundsException () Int) +(declare-fun T_java_util_Hashtable () Int) +(declare-fun T_java_util_Dictionary () Int) +(declare-fun T_javafe_ast_FormalParaDecl () Int) +(declare-fun T_javafe_ast_ThisExpr () Int) +(declare-fun T_javafe_ast_InterfaceDecl () Int) +(declare-fun T_javafe_ast_ArrayType () Int) +(declare-fun T_javafe_ast_CastExpr () Int) +(declare-fun T_javafe_ast_ForStmt () Int) +(declare-fun DIST_ZERO_1 () Int) +(declare-fun T__TYPE () Int) +(declare-fun VOIDTYPE_14_33_26 () Int) +(declare-fun INSTANCEOFEXPR_16_52_7 () Int) +(declare-fun AND_15_20_26 () Int) +(declare-fun ASGURSHIFT_15_48_26 () Int) +(declare-fun IFSTMT_16_38_7 () Int) +(declare-fun URSHIFT_15_32_26 () Int) +(declare-fun ARRAYTYPE_16_65_7 () Int) +(declare-fun FORMALPARADECL_16_24_7 () Int) +(declare-fun DOUBLETYPE_14_32_26 () Int) +(declare-fun CONDEXPR_16_51_7 () Int) +(declare-fun TYPEDECLELEMPRAGMA_30_27_26 () Int) +(declare-fun OR_15_19_26 () Int) +(declare-fun ASGRSHIFT_15_47_26 () Int) +(declare-fun LABELSTMT_16_37_7 () Int) +(declare-fun RSHIFT_15_31_26 () Int) +(declare-fun TYPENAME_16_64_7 () Int) +(declare-fun FIELDDECL_16_23_7 () Int) +(declare-fun FLOATTYPE_14_31_26 () Int) +(declare-fun NEWARRAYEXPR_16_50_7 () Int) +(declare-fun ASGLSHIFT_15_46_26 () Int) +(declare-fun CONTINUESTMT_16_36_7 () Int) +(declare-fun STMTPRAGMA_30_26_26 () Int) +(declare-fun LSHIFT_15_30_26 () Int) +(declare-fun NULLLIT_14_45_26 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_16_63_7 () Int) +(declare-fun LOCALVARDECL_16_22_7 () Int) +(declare-fun punctuationStrings_30_134_22 () Int) +(declare-fun POSTFIXDEC_15_63_26 () Int) +(declare-fun CHARTYPE_14_30_26 () Int) +(declare-fun NEWINSTANCEEXPR_16_49_7 () Int) +(declare-fun ASGSUB_15_45_26 () Int) +(declare-fun BREAKSTMT_16_35_7 () Int) +(declare-fun otherStrings_30_193_30 () Int) +(declare-fun LT_15_29_26 () Int) +(declare-fun MODIFIERPRAGMA_30_25_26 () Int) +(declare-fun STRINGLIT_14_44_26 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_16_62_7 () Int) +(declare-fun INITBLOCK_16_21_7 () Int) +(declare-fun noTokens_30_212_27 () Int) +(declare-fun POSTFIXINC_15_62_26 () Int) +(declare-fun LONGTYPE_14_29_26 () Int) +(declare-fun ARRAYREFEXPR_16_48_7 () Int) +(declare-fun ASGADD_15_44_26 () Int) +(declare-fun THROWSTMT_16_34_7 () Int) +(declare-fun TYPESIG_29_6_28 () Int) +(declare-fun LE_15_28_26 () Int) +(declare-fun DOUBLELIT_14_43_26 () Int) +(declare-fun EXPROBJECTDESIGNATOR_16_61_7 () Int) +(declare-fun METHODDECL_16_20_7 () Int) +(declare-fun DEC_15_59_26 () Int) +(declare-fun LEXICALPRAGMA_30_24_26 () Int) +(declare-fun INTTYPE_14_28_26 () Int) +(declare-fun THISEXPR_16_47_7 () Int) +(declare-fun ASGREM_15_43_26 () Int) +(declare-fun RETURNSTMT_16_33_7 () Int) +(declare-fun LAST_KEYWORD_30_103_26 () Int) +(declare-fun GT_15_27_26 () Int) +(declare-fun FLOATLIT_14_42_26 () Int) +(declare-fun CLASSLITERAL_16_60_7 () Int) +(declare-fun CONSTRUCTORDECL_16_19_7 () Int) +(declare-fun FIRST_KEYWORD_30_51_26 () Int) +(declare-fun INC_15_58_26 () Int) +(declare-fun BOOLEANTYPE_14_27_26 () Int) +(declare-fun ARRAYINIT_16_46_7 () Int) +(declare-fun ASGDIV_15_42_26 () Int) +(declare-fun EVALSTMT_16_32_7 () Int) +(declare-fun GE_15_26_26 () Int) +(declare-fun CHARLIT_14_41_26 () Int) +(declare-fun METHODINVOCATION_16_59_7 () Int) +(declare-fun INTERFACEDECL_16_18_7 () Int) +(declare-fun BITNOT_15_57_26 () Int) +(declare-fun IDENT_14_25_26 () Int) +(declare-fun CATCHCLAUSE_16_45_7 () Int) +(declare-fun NULL_30_82_26 () Int) +(declare-fun ASGMUL_15_41_26 () Int) +(declare-fun SYNCHRONIZESTMT_16_31_7 () Int) +(declare-fun EQ_15_25_26 () Int) +(declare-fun LONGLIT_14_40_26 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_16_58_7 () Int) +(declare-fun CLASSDECL_16_17_7 () Int) +(declare-fun NOT_15_56_26 () Int) +(declare-fun CONSTRUCTORINVOCATION_16_44_7 () Int) +(declare-fun ASSIGN_15_40_26 () Int) +(declare-fun DOSTMT_16_30_7 () Int) +(declare-fun NE_15_24_26 () Int) +(declare-fun INTLIT_14_39_26 () Int) +(declare-fun FIELDACCESS_16_57_7 () Int) +(declare-fun ONDEMANDIMPORTDECL_16_16_7 () Int) +(declare-fun UNARYSUB_15_55_26 () Int) +(declare-fun TRYCATCHSTMT_16_43_7 () Int) +(declare-fun STAR_15_37_26 () Int) +(declare-fun WHILESTMT_16_29_7 () Int) +(declare-fun BITAND_15_23_26 () Int) +(declare-fun BOOLEANLIT_14_38_26 () Int) +(declare-fun VARIABLEACCESS_16_56_7 () Int) +(declare-fun SINGLETYPEIMPORTDECL_16_15_7 () Int) +(declare-fun UNARYADD_15_54_26 () Int) +(declare-fun TRYFINALLYSTMT_16_42_7 () Int) +(declare-fun MOD_15_36_26 () Int) +(declare-fun otherCodes_30_202_27 () Int) +(declare-fun CLASSDECLSTMT_16_28_7 () Int) +(declare-fun BITXOR_15_22_26 () Int) +(declare-fun SHORTTYPE_14_36_26 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_16_55_7 () Int) +(declare-fun COMPILATIONUNIT_16_14_7 () Int) +(declare-fun ASGBITXOR_15_51_26 () Int) +(declare-fun punctuationCodes_30_164_19 () Int) +(declare-fun NULL_13_60_26 () Int) +(declare-fun SWITCHLABEL_16_41_7 () Int) +(declare-fun DIV_15_35_26 () Int) +(declare-fun VARDECLSTMT_16_27_7 () Int) +(declare-fun BITOR_15_21_26 () Int) +(declare-fun BYTETYPE_14_35_26 () Int) +(declare-fun PARENEXPR_16_54_7 () Int) +(declare-fun ASGBITOR_15_50_26 () Int) +(declare-fun SKIPSTMT_16_40_7 () Int) +(declare-fun SUB_15_34_26 () Int) +(declare-fun COMPOUNDNAME_16_67_7 () Int) +(declare-fun SWITCHSTMT_16_26_7 () Int) +(declare-fun keywordStrings_30_181_30 () Int) +(declare-fun NULLTYPE_14_34_26 () Int) +(declare-fun CASTEXPR_16_53_7 () Int) +(declare-fun ASGBITAND_15_49_26 () Int) +(declare-fun FORSTMT_16_39_7 () Int) +(declare-fun ADD_15_33_26 () Int) +(declare-fun SIMPLENAME_16_66_7 () Int) +(declare-fun BLOCKSTMT_16_25_7 () Int) +(declare-fun TYPEMODIFIERPRAGMA_30_28_26 () Int) +(assert (let ((?v_0 (array T_java_lang_String)) (?v_1 (array T_int))) (and (= (PO_LT T_javafe_tc_MethodDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_MethodDeclVec (asChild T_javafe_tc_MethodDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_VarDeclStmt (asChild T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_BinaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_BinaryExpr (asChild T_javafe_ast_BinaryExpr T_javafe_ast_Expr)) (= (PO_LT T_java_lang_Comparable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_BranchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_BranchStmt (asChild T_javafe_ast_BranchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ClassLiteral T_javafe_ast_Expr) true_term) (= T_javafe_ast_ClassLiteral (asChild T_javafe_ast_ClassLiteral T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_ConstructorDecl (asChild T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ArrayRefExpr (asChild T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr)) (= (PO_LT T_java_lang_Long T_java_lang_Number) true_term) (= T_java_lang_Long (asChild T_java_lang_Long T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Long) true_term) (= ?t T_java_lang_Long))) (= (PO_LT T_java_lang_Long T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousMethodInvocation (asChild T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_javafe_tc_TypeSig T_javafe_ast_Type) true_term) (= T_javafe_tc_TypeSig (asChild T_javafe_tc_TypeSig T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_SimpleName T_javafe_ast_Name) true_term) (= T_javafe_ast_SimpleName (asChild T_javafe_ast_SimpleName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_WhileStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_WhileStmt (asChild T_javafe_ast_WhileStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_SwitchLabel T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SwitchLabel (asChild T_javafe_ast_SwitchLabel T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_VariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_VariableAccess (asChild T_javafe_ast_VariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_DoStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_DoStmt (asChild T_javafe_ast_DoStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_Expr T_javafe_ast_VarInit) true_term) (= T_javafe_ast_Expr (asChild T_javafe_ast_Expr T_javafe_ast_VarInit)) (= (PO_LT T_javafe_tc_Env T_java_lang_Object) true_term) (= T_javafe_tc_Env (asChild T_javafe_tc_Env T_java_lang_Object)) (= (PO_LT T_javafe_ast_VarInit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_VarInit (asChild T_javafe_ast_VarInit T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_OnDemandImportDecl (asChild T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_java_lang_String T_java_lang_Object) true_term) (= T_java_lang_String (asChild T_java_lang_String T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_String) true_term) (= ?t T_java_lang_String))) (= (PO_LT T_java_lang_String T_java_io_Serializable) true_term) (= (PO_LT T_java_lang_String T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_ParenExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ParenExpr (asChild T_javafe_ast_ParenExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_GenericVarDecl (asChild T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_ContinueStmt (asChild T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_javafe_ast_Type T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Type (asChild T_javafe_ast_Type T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_InitBlock (asChild T_javafe_ast_InitBlock T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_NewArrayExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewArrayExpr (asChild T_javafe_ast_NewArrayExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_TypeObjectDesignator (asChild T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_Visitor T_java_lang_Object) true_term) (= T_javafe_ast_Visitor (asChild T_javafe_ast_Visitor T_java_lang_Object)) (= (PO_LT T_java_lang_Exception T_java_lang_Throwable) true_term) (= T_java_lang_Exception (asChild T_java_lang_Exception T_java_lang_Throwable)) (= (PO_LT T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ConstructorInvocation (asChild T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ExprVec T_java_lang_Object) true_term) (= T_javafe_ast_ExprVec (asChild T_javafe_ast_ExprVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_GenericBlockStmt (asChild T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryCatchStmt (asChild T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_EvalStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_EvalStmt (asChild T_javafe_ast_EvalStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_util_Map T_java_lang_Object) true_term) (= (PO_LT T_java_util_Map T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_java_lang_Integer T_java_lang_Number) true_term) (= T_java_lang_Integer (asChild T_java_lang_Integer T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Integer) true_term) (= ?t T_java_lang_Integer))) (= (PO_LT T_java_lang_Integer T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FieldDecl (asChild T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_ClassDecl (asChild T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_TypeName T_javafe_ast_Type) true_term) (= T_javafe_ast_TypeName (asChild T_javafe_ast_TypeName T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_ArrayInit T_javafe_ast_VarInit) true_term) (= T_javafe_ast_ArrayInit (asChild T_javafe_ast_ArrayInit T_javafe_ast_VarInit)) (= (PO_LT T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_InstanceOfExpr (asChild T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_IfStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_IfStmt (asChild T_javafe_ast_IfStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ImportDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ImportDecl (asChild T_javafe_ast_ImportDecl T_javafe_ast_ASTNode)) (= (PO_LT T_java_io_Serializable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_SwitchStmt (asChild T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ObjectDesignator (asChild T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ThrowStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ThrowStmt (asChild T_javafe_ast_ThrowStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ASTDecoration T_java_lang_Object) true_term) (= T_javafe_ast_ASTDecoration (asChild T_javafe_ast_ASTDecoration T_java_lang_Object)) (= (PO_LT T_java_lang_Number T_java_lang_Object) true_term) (= T_java_lang_Number (asChild T_java_lang_Number T_java_lang_Object)) (= (PO_LT T_java_lang_Number T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_MethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_MethodInvocation (asChild T_javafe_ast_MethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_RoutineDecl (asChild T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_LiteralExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_LiteralExpr (asChild T_javafe_ast_LiteralExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_IdentifierVec T_java_lang_Object) true_term) (= T_javafe_ast_IdentifierVec (asChild T_javafe_ast_IdentifierVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_TypeDeclElem T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_Name T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Name (asChild T_javafe_ast_Name T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_util_Location T_java_lang_Object) true_term) (= T_javafe_util_Location (asChild T_javafe_util_Location T_java_lang_Object)) (= (PO_LT T_javafe_ast_SkipStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SkipStmt (asChild T_javafe_ast_SkipStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousVariableAccess (asChild T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ClassDeclStmt (asChild T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_lang_Double T_java_lang_Number) true_term) (= T_java_lang_Double (asChild T_java_lang_Double T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Double) true_term) (= ?t T_java_lang_Double))) (= (PO_LT T_java_lang_Double T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_UnaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_UnaryExpr (asChild T_javafe_ast_UnaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_SuperObjectDesignator (asChild T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_java_lang_RuntimeException T_java_lang_Exception) true_term) (= T_java_lang_RuntimeException (asChild T_java_lang_RuntimeException T_java_lang_Exception)) (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_BreakStmt (asChild T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_java_lang_Throwable T_java_lang_Object) true_term) (= T_java_lang_Throwable (asChild T_java_lang_Throwable T_java_lang_Object)) (= (PO_LT T_java_lang_Throwable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewInstanceExpr (asChild T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_MethodDecl (asChild T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_java_lang_Boolean T_java_lang_Object) true_term) (= T_java_lang_Boolean (asChild T_java_lang_Boolean T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Boolean) true_term) (= ?t T_java_lang_Boolean))) (= (PO_LT T_java_lang_Boolean T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_OperatorTags T_java_lang_Object) true_term) (= T_javafe_ast_OperatorTags (asChild T_javafe_ast_OperatorTags T_java_lang_Object)) (= (PO_LT T_javafe_ast_OperatorTags T_javafe_ast_GeneratedTags) true_term) (= (PO_LT T_javafe_ast_Identifier T_java_lang_Object) true_term) (= T_javafe_ast_Identifier (asChild T_javafe_ast_Identifier T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_javafe_ast_Identifier) true_term) (= ?t T_javafe_ast_Identifier))) (= (PO_LT T_javafe_ast_Stmt T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Stmt (asChild T_javafe_ast_Stmt T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_CompoundName T_javafe_ast_Name) true_term) (= T_javafe_ast_CompoundName (asChild T_javafe_ast_CompoundName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SynchronizeStmt (asChild T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryFinallyStmt (asChild T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_FieldAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_FieldAccess (asChild T_javafe_ast_FieldAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Object) true_term) (= T_javafe_ast_ASTNode (asChild T_javafe_ast_ASTNode T_java_lang_Object)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Cloneable) true_term) (= (PO_LT T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_LocalVarDecl (asChild T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeDecl (asChild T_javafe_ast_TypeDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_java_util_EscjavaKeyValue T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_GeneratedTags T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_PrimitiveType T_javafe_ast_Type) true_term) (= T_javafe_ast_PrimitiveType (asChild T_javafe_ast_PrimitiveType T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_SingleTypeImportDecl (asChild T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_javafe_ast_LabelStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_LabelStmt (asChild T_javafe_ast_LabelStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_util_Assert T_java_lang_Object) true_term) (= T_javafe_util_Assert (asChild T_javafe_util_Assert T_java_lang_Object)) (= (PO_LT T_javafe_ast_CondExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CondExpr (asChild T_javafe_ast_CondExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CompilationUnit (asChild T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode)) (= (PO_LT T_java_lang_Float T_java_lang_Number) true_term) (= T_java_lang_Float (asChild T_java_lang_Float T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Float) true_term) (= ?t T_java_lang_Float))) (= (PO_LT T_java_lang_Float T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_VisitorArgResult T_java_lang_Object) true_term) (= T_javafe_ast_VisitorArgResult (asChild T_javafe_ast_VisitorArgResult T_java_lang_Object)) (= (PO_LT T_javafe_ast_CatchClause T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CatchClause (asChild T_javafe_ast_CatchClause T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_parser_TagConstants T_javafe_ast_TagConstants) true_term) (= T_javafe_parser_TagConstants (asChild T_javafe_parser_TagConstants T_javafe_ast_TagConstants)) (= (PO_LT T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_ExprObjectDesignator (asChild T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_tc_TagConstants T_javafe_parser_TagConstants) true_term) (= T_javafe_tc_TagConstants (asChild T_javafe_tc_TagConstants T_javafe_parser_TagConstants)) (= (PO_LT T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_BlockStmt (asChild T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_ReturnStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ReturnStmt (asChild T_javafe_ast_ReturnStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_tc_FieldDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_FieldDeclVec (asChild T_javafe_tc_FieldDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_TagConstants T_javafe_ast_OperatorTags) true_term) (= T_javafe_ast_TagConstants (asChild T_javafe_ast_TagConstants T_javafe_ast_OperatorTags)) (= (PO_LT T_java_lang_IndexOutOfBoundsException T_java_lang_RuntimeException) true_term) (= T_java_lang_IndexOutOfBoundsException (asChild T_java_lang_IndexOutOfBoundsException T_java_lang_RuntimeException)) (= (PO_LT T_java_util_Hashtable T_java_util_Dictionary) true_term) (= T_java_util_Hashtable (asChild T_java_util_Hashtable T_java_util_Dictionary)) (= (PO_LT T_java_util_Hashtable T_java_util_Map) true_term) (= (PO_LT T_java_util_Hashtable T_java_lang_Cloneable) true_term) (= (PO_LT T_java_util_Hashtable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FormalParaDecl (asChild T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_ThisExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ThisExpr (asChild T_javafe_ast_ThisExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_InterfaceDecl (asChild T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_ArrayType T_javafe_ast_Type) true_term) (= T_javafe_ast_ArrayType (asChild T_javafe_ast_ArrayType T_javafe_ast_Type)) (= (PO_LT T_java_util_Dictionary T_java_lang_Object) true_term) (= T_java_util_Dictionary (asChild T_java_util_Dictionary T_java_lang_Object)) (= (PO_LT T_java_util_Dictionary T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_javafe_ast_CastExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CastExpr (asChild T_javafe_ast_CastExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ForStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ForStmt (asChild T_javafe_ast_ForStmt T_javafe_ast_Stmt)) (and (= arrayType (+ DIST_ZERO_1 0)) (= T_boolean (+ DIST_ZERO_1 1)) (= T_char (+ DIST_ZERO_1 2)) (= T_byte (+ DIST_ZERO_1 3)) (= T_short (+ DIST_ZERO_1 4)) (= T_int (+ DIST_ZERO_1 5)) (= T_long (+ DIST_ZERO_1 6)) (= T_float (+ DIST_ZERO_1 7)) (= T_double (+ DIST_ZERO_1 8)) (= T__TYPE (+ DIST_ZERO_1 9)) (= T_javafe_tc_MethodDeclVec (+ DIST_ZERO_1 10)) (= T_javafe_ast_VarDeclStmt (+ DIST_ZERO_1 11)) (= T_javafe_ast_BinaryExpr (+ DIST_ZERO_1 12)) (= T_java_lang_Comparable (+ DIST_ZERO_1 13)) (= T_javafe_ast_BranchStmt (+ DIST_ZERO_1 14)) (= T_javafe_ast_ClassLiteral (+ DIST_ZERO_1 15)) (= T_javafe_ast_ConstructorDecl (+ DIST_ZERO_1 16)) (= T_javafe_ast_ArrayRefExpr (+ DIST_ZERO_1 17)) (= T_java_lang_Long (+ DIST_ZERO_1 18)) (= T_javafe_ast_AmbiguousMethodInvocation (+ DIST_ZERO_1 19)) (= T_javafe_tc_TypeSig (+ DIST_ZERO_1 20)) (= T_javafe_ast_SimpleName (+ DIST_ZERO_1 21)) (= T_javafe_ast_WhileStmt (+ DIST_ZERO_1 22)) (= T_javafe_ast_SwitchLabel (+ DIST_ZERO_1 23)) (= T_javafe_ast_VariableAccess (+ DIST_ZERO_1 24)) (= T_javafe_ast_DoStmt (+ DIST_ZERO_1 25)) (= T_javafe_ast_Expr (+ DIST_ZERO_1 26)) (= T_javafe_tc_Env (+ DIST_ZERO_1 27)) (= T_javafe_ast_VarInit (+ DIST_ZERO_1 28)) (= T_javafe_ast_OnDemandImportDecl (+ DIST_ZERO_1 29)) (= T_java_lang_String (+ DIST_ZERO_1 30)) (= T_javafe_ast_ParenExpr (+ DIST_ZERO_1 31)) (= T_javafe_ast_GenericVarDecl (+ DIST_ZERO_1 32)) (= T_javafe_ast_ContinueStmt (+ DIST_ZERO_1 33)) (= T_javafe_ast_Type (+ DIST_ZERO_1 34)) (= T_javafe_ast_InitBlock (+ DIST_ZERO_1 35)) (= T_javafe_ast_NewArrayExpr (+ DIST_ZERO_1 36)) (= T_javafe_ast_TypeObjectDesignator (+ DIST_ZERO_1 37)) (= T_javafe_ast_Visitor (+ DIST_ZERO_1 38)) (= T_java_lang_Exception (+ DIST_ZERO_1 39)) (= T_javafe_ast_ConstructorInvocation (+ DIST_ZERO_1 40)) (= T_javafe_ast_ExprVec (+ DIST_ZERO_1 41)) (= T_javafe_ast_GenericBlockStmt (+ DIST_ZERO_1 42)) (= T_javafe_ast_TryCatchStmt (+ DIST_ZERO_1 43)) (= T_javafe_ast_EvalStmt (+ DIST_ZERO_1 44)) (= T_java_util_Map (+ DIST_ZERO_1 45)) (= T_java_lang_Integer (+ DIST_ZERO_1 46)) (= T_javafe_ast_FieldDecl (+ DIST_ZERO_1 47)) (= T_javafe_ast_ClassDecl (+ DIST_ZERO_1 48)) (= T_javafe_ast_TypeName (+ DIST_ZERO_1 49)) (= T_javafe_ast_ArrayInit (+ DIST_ZERO_1 50)) (= T_javafe_ast_InstanceOfExpr (+ DIST_ZERO_1 51)) (= T_javafe_ast_IfStmt (+ DIST_ZERO_1 52)) (= T_javafe_ast_ImportDecl (+ DIST_ZERO_1 53)) (= T_java_lang_Object (+ DIST_ZERO_1 54)) (= T_java_io_Serializable (+ DIST_ZERO_1 55)) (= T_javafe_ast_SwitchStmt (+ DIST_ZERO_1 56)) (= T_javafe_ast_ObjectDesignator (+ DIST_ZERO_1 57)) (= T_javafe_ast_ThrowStmt (+ DIST_ZERO_1 58)) (= T_javafe_ast_ASTDecoration (+ DIST_ZERO_1 59)) (= T_java_lang_Number (+ DIST_ZERO_1 60)) (= T_javafe_ast_MethodInvocation (+ DIST_ZERO_1 61)) (= T_javafe_ast_RoutineDecl (+ DIST_ZERO_1 62)) (= T_javafe_ast_LiteralExpr (+ DIST_ZERO_1 63)) (= T_javafe_ast_IdentifierVec (+ DIST_ZERO_1 64)) (= T_javafe_ast_TypeDeclElem (+ DIST_ZERO_1 65)) (= T_javafe_ast_Name (+ DIST_ZERO_1 66)) (= T_javafe_util_Location (+ DIST_ZERO_1 67)) (= T_javafe_ast_SkipStmt (+ DIST_ZERO_1 68)) (= T_javafe_ast_AmbiguousVariableAccess (+ DIST_ZERO_1 69)) (= T_javafe_ast_ClassDeclStmt (+ DIST_ZERO_1 70)) (= T_java_lang_Double (+ DIST_ZERO_1 71)) (= T_javafe_ast_UnaryExpr (+ DIST_ZERO_1 72)) (= T_javafe_ast_SuperObjectDesignator (+ DIST_ZERO_1 73)) (= T_java_lang_RuntimeException (+ DIST_ZERO_1 74)) (= T_java_lang_Cloneable (+ DIST_ZERO_1 75)) (= T_javafe_ast_BreakStmt (+ DIST_ZERO_1 76)) (= T_java_lang_Throwable (+ DIST_ZERO_1 77)) (= T_javafe_ast_NewInstanceExpr (+ DIST_ZERO_1 78)) (= T_javafe_ast_MethodDecl (+ DIST_ZERO_1 79)) (= T_java_lang_Boolean (+ DIST_ZERO_1 80)) (= T_javafe_ast_OperatorTags (+ DIST_ZERO_1 81)) (= T_javafe_ast_Identifier (+ DIST_ZERO_1 82)) (= T_javafe_ast_Stmt (+ DIST_ZERO_1 83)) (= T_javafe_ast_CompoundName (+ DIST_ZERO_1 84)) (= T_javafe_ast_SynchronizeStmt (+ DIST_ZERO_1 85)) (= T_javafe_ast_TryFinallyStmt (+ DIST_ZERO_1 86)) (= T_javafe_ast_FieldAccess (+ DIST_ZERO_1 87)) (= T_javafe_ast_ASTNode (+ DIST_ZERO_1 88)) (= T_javafe_ast_LocalVarDecl (+ DIST_ZERO_1 89)) (= T_javafe_ast_TypeDecl (+ DIST_ZERO_1 90)) (= T_java_util_EscjavaKeyValue (+ DIST_ZERO_1 91)) (= T_javafe_ast_GeneratedTags (+ DIST_ZERO_1 92)) (= T_javafe_ast_PrimitiveType (+ DIST_ZERO_1 93)) (= T_javafe_ast_SingleTypeImportDecl (+ DIST_ZERO_1 94)) (= T_javafe_ast_LabelStmt (+ DIST_ZERO_1 95)) (= T_javafe_util_Assert (+ DIST_ZERO_1 96)) (= T_javafe_ast_CondExpr (+ DIST_ZERO_1 97)) (= T_javafe_ast_CompilationUnit (+ DIST_ZERO_1 98)) (= T_java_lang_Float (+ DIST_ZERO_1 99)) (= T_javafe_ast_VisitorArgResult (+ DIST_ZERO_1 100)) (= T_javafe_ast_CatchClause (+ DIST_ZERO_1 101)) (= T_javafe_parser_TagConstants (+ DIST_ZERO_1 102)) (= T_javafe_ast_ExprObjectDesignator (+ DIST_ZERO_1 103)) (= T_javafe_tc_TagConstants (+ DIST_ZERO_1 104)) (= T_javafe_ast_BlockStmt (+ DIST_ZERO_1 105)) (= T_javafe_ast_ReturnStmt (+ DIST_ZERO_1 106)) (= T_javafe_tc_FieldDeclVec (+ DIST_ZERO_1 107)) (= T_javafe_ast_TagConstants (+ DIST_ZERO_1 108)) (= T_java_lang_IndexOutOfBoundsException (+ DIST_ZERO_1 109)) (= T_java_util_Hashtable (+ DIST_ZERO_1 110)) (= T_javafe_ast_FormalParaDecl (+ DIST_ZERO_1 111)) (= T_javafe_ast_ThisExpr (+ DIST_ZERO_1 112)) (= T_javafe_ast_InterfaceDecl (+ DIST_ZERO_1 113)) (= T_javafe_ast_ArrayType (+ DIST_ZERO_1 114)) (= T_java_util_Dictionary (+ DIST_ZERO_1 115)) (= T_javafe_ast_CastExpr (+ DIST_ZERO_1 116)) (= T_javafe_ast_ForStmt (+ DIST_ZERO_1 117))) (= true_term (is VOIDTYPE_14_33_26 T_int)) (= VOIDTYPE_14_33_26 100) (= true_term (is INSTANCEOFEXPR_16_52_7 T_int)) (= INSTANCEOFEXPR_16_52_7 38) (= true_term (is AND_15_20_26 T_int)) (= AND_15_20_26 55) (= true_term (is ASGURSHIFT_15_48_26 T_int)) (= ASGURSHIFT_15_48_26 81) (= true_term (is IFSTMT_16_38_7 T_int)) (= IFSTMT_16_38_7 24) (= true_term (is URSHIFT_15_32_26 T_int)) (= URSHIFT_15_32_26 67) (= true_term (is ARRAYTYPE_16_65_7 T_int)) (= ARRAYTYPE_16_65_7 51) (= true_term (is FORMALPARADECL_16_24_7 T_int)) (= FORMALPARADECL_16_24_7 10) (= true_term (is DOUBLETYPE_14_32_26 T_int)) (= DOUBLETYPE_14_32_26 99) (= true_term (is CONDEXPR_16_51_7 T_int)) (= CONDEXPR_16_51_7 37) (= true_term (is TYPEDECLELEMPRAGMA_30_27_26 T_int)) (= TYPEDECLELEMPRAGMA_30_27_26 117) (= true_term (is OR_15_19_26 T_int)) (= OR_15_19_26 54) (= true_term (is ASGRSHIFT_15_47_26 T_int)) (= ASGRSHIFT_15_47_26 80) (= true_term (is LABELSTMT_16_37_7 T_int)) (= LABELSTMT_16_37_7 23) (= true_term (is RSHIFT_15_31_26 T_int)) (= RSHIFT_15_31_26 66) (= true_term (is TYPENAME_16_64_7 T_int)) (= TYPENAME_16_64_7 50) (= true_term (is FIELDDECL_16_23_7 T_int)) (= FIELDDECL_16_23_7 9) (= true_term (is FLOATTYPE_14_31_26 T_int)) (= FLOATTYPE_14_31_26 98) (= true_term (is NEWARRAYEXPR_16_50_7 T_int)) (= NEWARRAYEXPR_16_50_7 36) (= true_term (is ASGLSHIFT_15_46_26 T_int)) (= ASGLSHIFT_15_46_26 79) (= true_term (is CONTINUESTMT_16_36_7 T_int)) (= CONTINUESTMT_16_36_7 22) (= true_term (is STMTPRAGMA_30_26_26 T_int)) (= STMTPRAGMA_30_26_26 116) (= true_term (is LSHIFT_15_30_26 T_int)) (= LSHIFT_15_30_26 65) (= true_term (is NULLLIT_14_45_26 T_int)) (= NULLLIT_14_45_26 111) (= true_term (is SUPEROBJECTDESIGNATOR_16_63_7 T_int)) (= SUPEROBJECTDESIGNATOR_16_63_7 49) (= true_term (is LOCALVARDECL_16_22_7 T_int)) (= LOCALVARDECL_16_22_7 8) (= true_term (is punctuationStrings_30_134_22 ?v_0)) (not (= punctuationStrings_30_134_22 null)) (= (typeof punctuationStrings_30_134_22) ?v_0) (= (arrayLength punctuationStrings_30_134_22) 48) (= true_term (is POSTFIXDEC_15_63_26 T_int)) (= POSTFIXDEC_15_63_26 92) (= true_term (is CHARTYPE_14_30_26 T_int)) (= CHARTYPE_14_30_26 97) (= true_term (is NEWINSTANCEEXPR_16_49_7 T_int)) (= NEWINSTANCEEXPR_16_49_7 35) (= true_term (is ASGSUB_15_45_26 T_int)) (= ASGSUB_15_45_26 78) (= true_term (is BREAKSTMT_16_35_7 T_int)) (= BREAKSTMT_16_35_7 21) (= true_term (is otherStrings_30_193_30 ?v_0)) (not (= otherStrings_30_193_30 null)) (= (typeof otherStrings_30_193_30) ?v_0) (= (arrayLength otherStrings_30_193_30) 15) (= true_term (is LT_15_29_26 T_int)) (= LT_15_29_26 64) (= true_term (is MODIFIERPRAGMA_30_25_26 T_int)) (= MODIFIERPRAGMA_30_25_26 115) (= true_term (is STRINGLIT_14_44_26 T_int)) (= STRINGLIT_14_44_26 110) (= true_term (is TYPEOBJECTDESIGNATOR_16_62_7 T_int)) (= TYPEOBJECTDESIGNATOR_16_62_7 48) (= true_term (is INITBLOCK_16_21_7 T_int)) (= INITBLOCK_16_21_7 7) (= true_term (is noTokens_30_212_27 T_int)) (= true_term (is POSTFIXINC_15_62_26 T_int)) (= POSTFIXINC_15_62_26 91) (= true_term (is LONGTYPE_14_29_26 T_int)) (= LONGTYPE_14_29_26 96) (= true_term (is ARRAYREFEXPR_16_48_7 T_int)) (= ARRAYREFEXPR_16_48_7 34) (= true_term (is ASGADD_15_44_26 T_int)) (= ASGADD_15_44_26 77) (= true_term (is THROWSTMT_16_34_7 T_int)) (= THROWSTMT_16_34_7 20) (= true_term (is TYPESIG_29_6_28 T_int)) (= TYPESIG_29_6_28 184) (= true_term (is LE_15_28_26 T_int)) (= LE_15_28_26 63) (= true_term (is DOUBLELIT_14_43_26 T_int)) (= DOUBLELIT_14_43_26 109) (= true_term (is EXPROBJECTDESIGNATOR_16_61_7 T_int)) (= EXPROBJECTDESIGNATOR_16_61_7 47) (= true_term (is METHODDECL_16_20_7 T_int)) (= METHODDECL_16_20_7 6) (= true_term (is DEC_15_59_26 T_int)) (= DEC_15_59_26 90) (= true_term (is LEXICALPRAGMA_30_24_26 T_int)) (= LEXICALPRAGMA_30_24_26 114) (= true_term (is INTTYPE_14_28_26 T_int)) (= INTTYPE_14_28_26 95) (= true_term (is THISEXPR_16_47_7 T_int)) (= THISEXPR_16_47_7 33) (= true_term (is ASGREM_15_43_26 T_int)) (= ASGREM_15_43_26 76) (= true_term (is RETURNSTMT_16_33_7 T_int)) (= RETURNSTMT_16_33_7 19) (= true_term (is LAST_KEYWORD_30_103_26 T_int)) (= LAST_KEYWORD_30_103_26 183) (= true_term (is GT_15_27_26 T_int)) (= GT_15_27_26 62) (= true_term (is FLOATLIT_14_42_26 T_int)) (= FLOATLIT_14_42_26 108) (= true_term (is CLASSLITERAL_16_60_7 T_int)) (= CLASSLITERAL_16_60_7 46) (= true_term (is CONSTRUCTORDECL_16_19_7 T_int)) (= CONSTRUCTORDECL_16_19_7 5) (= true_term (is FIRST_KEYWORD_30_51_26 T_int)) (= FIRST_KEYWORD_30_51_26 133) (= true_term (is INC_15_58_26 T_int)) (= INC_15_58_26 89) (= true_term (is BOOLEANTYPE_14_27_26 T_int)) (= BOOLEANTYPE_14_27_26 94) (= true_term (is ARRAYINIT_16_46_7 T_int)) (= ARRAYINIT_16_46_7 32) (= true_term (is ASGDIV_15_42_26 T_int)) (= ASGDIV_15_42_26 75) (= true_term (is EVALSTMT_16_32_7 T_int)) (= EVALSTMT_16_32_7 18) (= true_term (is GE_15_26_26 T_int)) (= GE_15_26_26 61) (= true_term (is CHARLIT_14_41_26 T_int)) (= CHARLIT_14_41_26 107) (= true_term (is METHODINVOCATION_16_59_7 T_int)) (= METHODINVOCATION_16_59_7 45) (= true_term (is INTERFACEDECL_16_18_7 T_int)) (= INTERFACEDECL_16_18_7 4) (= true_term (is BITNOT_15_57_26 T_int)) (= BITNOT_15_57_26 88) (= true_term (is IDENT_14_25_26 T_int)) (= IDENT_14_25_26 93) (= true_term (is CATCHCLAUSE_16_45_7 T_int)) (= CATCHCLAUSE_16_45_7 31) (= true_term (is NULL_30_82_26 T_int)) (= NULL_30_82_26 163) (= true_term (is ASGMUL_15_41_26 T_int)) (= ASGMUL_15_41_26 74) (= true_term (is SYNCHRONIZESTMT_16_31_7 T_int)) (= SYNCHRONIZESTMT_16_31_7 17) (= true_term (is EQ_15_25_26 T_int)) (= EQ_15_25_26 60) (= true_term (is LONGLIT_14_40_26 T_int)) (= LONGLIT_14_40_26 106) (= true_term (is AMBIGUOUSMETHODINVOCATION_16_58_7 T_int)) (= AMBIGUOUSMETHODINVOCATION_16_58_7 44) (= true_term (is CLASSDECL_16_17_7 T_int)) (= CLASSDECL_16_17_7 3) (= true_term (is NOT_15_56_26 T_int)) (= NOT_15_56_26 87) (= true_term (is CONSTRUCTORINVOCATION_16_44_7 T_int)) (= CONSTRUCTORINVOCATION_16_44_7 30) (= true_term (is ASSIGN_15_40_26 T_int)) (= ASSIGN_15_40_26 73) (= true_term (is DOSTMT_16_30_7 T_int)) (= DOSTMT_16_30_7 16) (= true_term (is NE_15_24_26 T_int)) (= NE_15_24_26 59) (= true_term (is INTLIT_14_39_26 T_int)) (= INTLIT_14_39_26 105) (= true_term (is FIELDACCESS_16_57_7 T_int)) (= FIELDACCESS_16_57_7 43) (= true_term (is ONDEMANDIMPORTDECL_16_16_7 T_int)) (= ONDEMANDIMPORTDECL_16_16_7 2) (= true_term (is UNARYSUB_15_55_26 T_int)) (= UNARYSUB_15_55_26 86) (= true_term (is TRYCATCHSTMT_16_43_7 T_int)) (= TRYCATCHSTMT_16_43_7 29) (= true_term (is STAR_15_37_26 T_int)) (= STAR_15_37_26 72) (= true_term (is WHILESTMT_16_29_7 T_int)) (= WHILESTMT_16_29_7 15) (= true_term (is BITAND_15_23_26 T_int)) (= BITAND_15_23_26 58) (= true_term (is BOOLEANLIT_14_38_26 T_int)) (= BOOLEANLIT_14_38_26 104) (= true_term (is VARIABLEACCESS_16_56_7 T_int)) (= VARIABLEACCESS_16_56_7 42) (= true_term (is SINGLETYPEIMPORTDECL_16_15_7 T_int)) (= SINGLETYPEIMPORTDECL_16_15_7 1) (= true_term (is UNARYADD_15_54_26 T_int)) (= UNARYADD_15_54_26 85) (= true_term (is TRYFINALLYSTMT_16_42_7 T_int)) (= TRYFINALLYSTMT_16_42_7 28) (= true_term (is MOD_15_36_26 T_int)) (= MOD_15_36_26 71) (= true_term (is otherCodes_30_202_27 ?v_1)) (not (= otherCodes_30_202_27 null)) (= (typeof otherCodes_30_202_27) ?v_1) (= (arrayLength otherCodes_30_202_27) 15) (= true_term (is CLASSDECLSTMT_16_28_7 T_int)) (= CLASSDECLSTMT_16_28_7 14) (= true_term (is BITXOR_15_22_26 T_int)) (= BITXOR_15_22_26 57) (= true_term (is SHORTTYPE_14_36_26 T_int)) (= SHORTTYPE_14_36_26 103) (= true_term (is AMBIGUOUSVARIABLEACCESS_16_55_7 T_int)) (= AMBIGUOUSVARIABLEACCESS_16_55_7 41) (= true_term (is COMPILATIONUNIT_16_14_7 T_int)) (= COMPILATIONUNIT_16_14_7 0) (= true_term (is ASGBITXOR_15_51_26 T_int)) (= ASGBITXOR_15_51_26 84) (= true_term (is punctuationCodes_30_164_19 ?v_1)) (not (= punctuationCodes_30_164_19 null)) (= (typeof punctuationCodes_30_164_19) ?v_1) (= (arrayLength punctuationCodes_30_164_19) 48) (= true_term (is NULL_13_60_26 T_int)) (= NULL_13_60_26 0) (= true_term (is SWITCHLABEL_16_41_7 T_int)) (= SWITCHLABEL_16_41_7 27) (= true_term (is DIV_15_35_26 T_int)) (= DIV_15_35_26 70) (= true_term (is VARDECLSTMT_16_27_7 T_int)) (= VARDECLSTMT_16_27_7 13) (= true_term (is BITOR_15_21_26 T_int)) (= BITOR_15_21_26 56) (= true_term (is BYTETYPE_14_35_26 T_int)) (= BYTETYPE_14_35_26 102) (= true_term (is PARENEXPR_16_54_7 T_int)) (= PARENEXPR_16_54_7 40) (= true_term (is ASGBITOR_15_50_26 T_int)) (= ASGBITOR_15_50_26 83) (= true_term (is SKIPSTMT_16_40_7 T_int)) (= SKIPSTMT_16_40_7 26) (= true_term (is SUB_15_34_26 T_int)) (= SUB_15_34_26 69) (= true_term (is COMPOUNDNAME_16_67_7 T_int)) (= COMPOUNDNAME_16_67_7 53) (= true_term (is SWITCHSTMT_16_26_7 T_int)) (= SWITCHSTMT_16_26_7 12) (= true_term (is keywordStrings_30_181_30 ?v_0)) (not (= keywordStrings_30_181_30 null)) (= (typeof keywordStrings_30_181_30) ?v_0) (= (arrayLength keywordStrings_30_181_30) 51) (= true_term (is NULLTYPE_14_34_26 T_int)) (= NULLTYPE_14_34_26 101) (= true_term (is CASTEXPR_16_53_7 T_int)) (= CASTEXPR_16_53_7 39) (= true_term (is ASGBITAND_15_49_26 T_int)) (= ASGBITAND_15_49_26 82) (= true_term (is FORSTMT_16_39_7 T_int)) (= FORSTMT_16_39_7 25) (= true_term (is ADD_15_33_26 T_int)) (= ADD_15_33_26 68) (= true_term (is SIMPLENAME_16_66_7 T_int)) (= SIMPLENAME_16_66_7 52) (= true_term (is BLOCKSTMT_16_25_7 T_int)) (= BLOCKSTMT_16_25_7 11) (= true_term (is TYPEMODIFIERPRAGMA_30_28_26 T_int)) (= TYPEMODIFIERPRAGMA_30_28_26 118)))) +(declare-fun length_pre_81_50_25 () Int) +(declare-fun length_81_50_25 () Int) +(declare-fun count_pre_72_67_33 () Int) +(declare-fun count_72_67_33 () Int) +(declare-fun VOIDTYPE_pre_14_33_26 () Int) +(declare-fun INSTANCEOFEXPR_pre_16_52_7 () Int) +(declare-fun AND_pre_15_20_26 () Int) +(declare-fun loc_pre_123_49_13 () Int) +(declare-fun loc_123_49_13 () Int) +(declare-fun ASGURSHIFT_pre_15_48_26 () Int) +(declare-fun expr_pre_15_28 () Int) +(declare-fun expr_15_28 () Int) +(declare-fun IFSTMT_pre_16_38_7 () Int) +(declare-fun type_pre_123_24_28 () Int) +(declare-fun type_123_24_28 () Int) +(declare-fun locId_pre_111_20_13 () Int) +(declare-fun locId_111_20_13 () Int) +(declare-fun URSHIFT_pre_15_32_26 () Int) +(declare-fun tokenType_pre_78_90_8 () Int) +(declare-fun tokenType_78_90_8 () Int) +(declare-fun ARRAYTYPE_pre_16_65_7 () Int) +(declare-fun FORMALPARADECL_pre_16_24_7 () Int) +(declare-fun enclosingInstance_pre_122_25_14 () Int) +(declare-fun enclosingInstance_122_25_14 () Int) +(declare-fun loc_pre_122_49_13 () Int) +(declare-fun loc_122_49_13 () Int) +(declare-fun DOUBLETYPE_pre_14_32_26 () Int) +(declare-fun CONDEXPR_pre_16_51_7 () Int) +(declare-fun TYPEDECLELEMPRAGMA_pre_30_27_26 () Int) +(declare-fun OR_pre_15_19_26 () Int) +(declare-fun ASGRSHIFT_pre_15_47_26 () Int) +(declare-fun locQuestion_pre_125_22_13 () Int) +(declare-fun locQuestion_125_22_13 () Int) +(declare-fun locIds_pre_141_25_29 () Int) +(declare-fun locIds_141_25_29 () Int) +(declare-fun locSuper_pre_137_20_13 () Int) +(declare-fun locSuper_137_20_13 () Int) +(declare-fun LABELSTMT_pre_16_37_7 () Int) +(declare-fun locOpenBrackets_pre_123_65_29 () Int) +(declare-fun locOpenBrackets_123_65_29 () Int) +(declare-fun op_pre_26_35_13 () Int) +(declare-fun op_26_35_13 () Int) +(declare-fun locOpenBrace_pre_91_22_13 () Int) +(declare-fun locOpenBrace_91_22_13 () Int) +(declare-fun RSHIFT_pre_15_31_26 () Int) +(declare-fun locOpenParen_pre_118_48_13 () Int) +(declare-fun locOpenParen_118_48_13 () Int) +(declare-fun TYPENAME_pre_16_64_7 () Int) +(declare-fun FIELDDECL_pre_16_23_7 () Int) +(declare-fun loc_pre_63_30_13 () Int) +(declare-fun loc_63_30_13 () Int) +(declare-fun loc_pre_113_33_13 () Int) +(declare-fun loc_113_33_13 () Int) +(declare-fun FLOATTYPE_pre_14_31_26 () Int) +(declare-fun NEWARRAYEXPR_pre_16_50_7 () Int) +(declare-fun ASGLSHIFT_pre_15_46_26 () Int) +(declare-fun I_will_establish_invariants_afterwards_pre_5_236_34 () Int) +(declare-fun I_will_establish_invariants_afterwards_5_236_34 () Int) +(declare-fun CONTINUESTMT_pre_16_36_7 () Int) +(declare-fun loc_pre_80_40_13 () Int) +(declare-fun loc_80_40_13 () Int) +(declare-fun STMTPRAGMA_pre_30_26_26 () Int) +(declare-fun elements_pre_140_61_39 () Int) +(declare-fun elements_140_61_39 () Int) +(declare-fun loc_pre_116_22_13 () Int) +(declare-fun loc_116_22_13 () Int) +(declare-fun op_pre_27_26_13 () Int) +(declare-fun op_27_26_13 () Int) +(declare-fun locOpenParen_pre_131_30_13 () Int) +(declare-fun locOpenParen_131_30_13 () Int) +(declare-fun locGuardOpenParen_pre_23_13 () Int) +(declare-fun locGuardOpenParen_23_13 () Int) +(declare-fun LSHIFT_pre_15_30_26 () Int) +(declare-fun locCloseBrace_pre_62_54_13 () Int) +(declare-fun locCloseBrace_62_54_13 () Int) +(declare-fun NULLLIT_pre_14_45_26 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_pre_16_63_7 () Int) +(declare-fun loc_pre_83_29_13 () Int) +(declare-fun loc_83_29_13 () Int) +(declare-fun LOCALVARDECL_pre_16_22_7 () Int) +(declare-fun loc_pre_107_18_13 () Int) +(declare-fun loc_107_18_13 () Int) +(declare-fun punctuationStrings_pre_30_134_22 () Int) +(declare-fun POSTFIXDEC_pre_15_63_26 () Int) +(declare-fun CHARTYPE_pre_14_30_26 () Int) +(declare-fun NEWINSTANCEEXPR_pre_16_49_7 () Int) +(declare-fun tag_pre_28_30_13 () Int) +(declare-fun tag_28_30_13 () Int) +(declare-fun loc_pre_117_23_13 () Int) +(declare-fun loc_117_23_13 () Int) +(declare-fun type_pre_133_20_28 () Int) +(declare-fun type_133_20_28 () Int) +(declare-fun dims_pre_123_45_31 () Int) +(declare-fun dims_123_45_31 () Int) +(declare-fun ASGSUB_pre_15_45_26 () Int) +(declare-fun BREAKSTMT_pre_16_35_7 () Int) +(declare-fun locDots_pre_141_31_29 () Int) +(declare-fun locDots_141_31_29 () Int) +(declare-fun otherStrings_pre_30_193_30 () Int) +(declare-fun LT_pre_15_29_26 () Int) +(declare-fun MODIFIERPRAGMA_pre_30_25_26 () Int) +(declare-fun STRINGLIT_pre_14_44_26 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_pre_16_62_7 () Int) +(declare-fun locDot_pre_84_21_13 () Int) +(declare-fun locDot_84_21_13 () Int) +(declare-fun INITBLOCK_pre_16_21_7 () Int) +(declare-fun loc_pre_93_18_13 () Int) +(declare-fun loc_93_18_13 () Int) +(declare-fun locType_pre_79_21_13 () Int) +(declare-fun locType_79_21_13 () Int) +(declare-fun noTokens_pre_30_212_27 () Int) +(declare-fun loc_pre_103_20_13 () Int) +(declare-fun loc_103_20_13 () Int) +(declare-fun POSTFIXINC_pre_15_62_26 () Int) +(declare-fun LONGTYPE_pre_14_29_26 () Int) +(declare-fun ARRAYREFEXPR_pre_16_48_7 () Int) +(declare-fun ASGADD_pre_15_44_26 () Int) +(declare-fun THROWSTMT_pre_16_34_7 () Int) +(declare-fun count_pre_140_67_33 () Int) +(declare-fun count_140_67_33 () Int) +(declare-fun elements_pre_124_61_33 () Int) +(declare-fun elements_124_61_33 () Int) +(declare-fun TYPESIG_pre_29_6_28 () Int) +(declare-fun LE_pre_15_28_26 () Int) +(declare-fun DOUBLELIT_pre_14_43_26 () Int) +(declare-fun EXPROBJECTDESIGNATOR_pre_16_61_7 () Int) +(declare-fun locKeyword_pre_118_45_13 () Int) +(declare-fun locKeyword_118_45_13 () Int) +(declare-fun METHODDECL_pre_16_20_7 () Int) +(declare-fun locCloseBracket_pre_121_23_13 () Int) +(declare-fun locCloseBracket_121_23_13 () Int) +(declare-fun syntax_pre_24_28_29 () Int) +(declare-fun syntax_24_28_29 () Int) +(declare-fun loc_pre_109_18_13 () Int) +(declare-fun loc_109_18_13 () Int) +(declare-fun DEC_pre_15_59_26 () Int) +(declare-fun LEXICALPRAGMA_pre_30_24_26 () Int) +(declare-fun INTTYPE_pre_14_28_26 () Int) +(declare-fun THISEXPR_pre_16_47_7 () Int) +(declare-fun loc_pre_100_18_13 () Int) +(declare-fun loc_100_18_13 () Int) +(declare-fun ASGREM_pre_15_43_26 () Int) +(declare-fun RETURNSTMT_pre_16_33_7 () Int) +(declare-fun LAST_KEYWORD_pre_30_103_26 () Int) +(declare-fun GT_pre_15_27_26 () Int) +(declare-fun locOpenParen_pre_132_28_13 () Int) +(declare-fun locOpenParen_132_28_13 () Int) +(declare-fun FLOATLIT_pre_14_42_26 () Int) +(declare-fun CLASSLITERAL_pre_16_60_7 () Int) +(declare-fun CONSTRUCTORDECL_pre_16_19_7 () Int) +(declare-fun FIRST_KEYWORD_pre_30_51_26 () Int) +(declare-fun INC_pre_15_58_26 () Int) +(declare-fun superCall_pre_118_24_17 () Int) +(declare-fun superCall_118_24_17 () Int) +(declare-fun BOOLEANTYPE_pre_14_27_26 () Int) +(declare-fun ARRAYINIT_pre_16_46_7 () Int) +(declare-fun locCloseParen_pre_128_21_13 () Int) +(declare-fun locCloseParen_128_21_13 () Int) +(declare-fun owner_pre_8_35_28 () Int) +(declare-fun owner_8_35_28 () Int) +(declare-fun ASGDIV_pre_15_42_26 () Int) +(declare-fun locOpenBrace_pre_62_51_13 () Int) +(declare-fun locOpenBrace_62_51_13 () Int) +(declare-fun locCloseParen_pre_127_24_13 () Int) +(declare-fun locCloseParen_127_24_13 () Int) +(declare-fun EVALSTMT_pre_16_32_7 () Int) +(declare-fun count_pre_124_67_33 () Int) +(declare-fun count_124_67_33 () Int) +(declare-fun GE_pre_15_26_26 () Int) +(declare-fun CHARLIT_pre_14_41_26 () Int) +(declare-fun METHODINVOCATION_pre_16_59_7 () Int) +(declare-fun INTERFACEDECL_pre_16_18_7 () Int) +(declare-fun BITNOT_pre_15_57_26 () Int) +(declare-fun IDENT_pre_14_25_26 () Int) +(declare-fun CATCHCLAUSE_pre_16_45_7 () Int) +(declare-fun loc_pre_115_29_13 () Int) +(declare-fun loc_115_29_13 () Int) +(declare-fun NULL_pre_30_82_26 () Int) +(declare-fun ASGMUL_pre_15_41_26 () Int) +(declare-fun SYNCHRONIZESTMT_pre_16_31_7 () Int) +(declare-fun locOp_pre_26_43_13 () Int) +(declare-fun locOp_26_43_13 () Int) +(declare-fun loc_pre_20_13 () Int) +(declare-fun loc_20_13 () Int) +(declare-fun locCloseBrace_pre_120_24_13 () Int) +(declare-fun locCloseBrace_120_24_13 () Int) +(declare-fun EQ_pre_15_25_26 () Int) +(declare-fun locId_pre_77_38_13 () Int) +(declare-fun locId_77_38_13 () Int) +(declare-fun LONGLIT_pre_14_40_26 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_pre_16_58_7 () Int) +(declare-fun CLASSDECL_pre_16_17_7 () Int) +(declare-fun loc_pre_112_22_13 () Int) +(declare-fun loc_112_22_13 () Int) +(declare-fun elements_pre_73_61_39 () Int) +(declare-fun elements_73_61_39 () Int) +(declare-fun NOT_pre_15_56_26 () Int) +(declare-fun locDot_pre_118_41_13 () Int) +(declare-fun locDot_118_41_13 () Int) +(declare-fun CONSTRUCTORINVOCATION_pre_16_44_7 () Int) +(declare-fun locOpenParen_pre_104_23_13 () Int) +(declare-fun locOpenParen_104_23_13 () Int) +(declare-fun locOpenBracket_pre_121_20_13 () Int) +(declare-fun locOpenBracket_121_20_13 () Int) +(declare-fun ASSIGN_pre_15_40_26 () Int) +(declare-fun DOSTMT_pre_16_30_7 () Int) +(declare-fun locOpenBrace_pre_80_36_13 () Int) +(declare-fun locOpenBrace_80_36_13 () Int) +(declare-fun NE_pre_15_24_26 () Int) +(declare-fun INTLIT_pre_14_39_26 () Int) +(declare-fun locId_pre_132_25_13 () Int) +(declare-fun locId_132_25_13 () Int) +(declare-fun FIELDACCESS_pre_16_57_7 () Int) +(declare-fun locOpenBracket_pre_138_21_13 () Int) +(declare-fun locOpenBracket_138_21_13 () Int) +(declare-fun ONDEMANDIMPORTDECL_pre_16_16_7 () Int) +(declare-fun init_pre_123_35_19 () Int) +(declare-fun init_123_35_19 () Int) +(declare-fun UNARYSUB_pre_15_55_26 () Int) +(declare-fun returnType_pre_79_18_28 () Int) +(declare-fun returnType_79_18_28 () Int) +(declare-fun loc_pre_114_16_13 () Int) +(declare-fun loc_114_16_13 () Int) +(declare-fun loc_pre_129_22_13 () Int) +(declare-fun loc_129_22_13 () Int) +(declare-fun TRYCATCHSTMT_pre_16_43_7 () Int) +(declare-fun body_pre_80_34_19 () Int) +(declare-fun body_80_34_19 () Int) +(declare-fun loc_pre_126_21_13 () Int) +(declare-fun loc_126_21_13 () Int) +(declare-fun STAR_pre_15_37_26 () Int) +(declare-fun WHILESTMT_pre_16_29_7 () Int) +(declare-fun loc_pre_139_20_13 () Int) +(declare-fun loc_139_20_13 () Int) +(declare-fun BITAND_pre_15_23_26 () Int) +(declare-fun locOpenParen_pre_127_21_13 () Int) +(declare-fun locOpenParen_127_21_13 () Int) +(declare-fun BOOLEANLIT_pre_14_38_26 () Int) +(declare-fun VARIABLEACCESS_pre_16_56_7 () Int) +(declare-fun SINGLETYPEIMPORTDECL_pre_16_15_7 () Int) +(declare-fun UNARYADD_pre_15_54_26 () Int) +(declare-fun locId_pre_62_48_13 () Int) +(declare-fun locId_62_48_13 () Int) +(declare-fun TRYFINALLYSTMT_pre_16_42_7 () Int) +(declare-fun count_pre_73_67_33 () Int) +(declare-fun count_73_67_33 () Int) +(declare-fun MOD_pre_15_36_26 () Int) +(declare-fun otherCodes_pre_30_202_27 () Int) +(declare-fun loc_pre_119_22_13 () Int) +(declare-fun loc_119_22_13 () Int) +(declare-fun loc_pre_25_50_13 () Int) +(declare-fun loc_25_50_13 () Int) +(declare-fun CLASSDECLSTMT_pre_16_28_7 () Int) +(declare-fun locOpenBrace_pre_120_21_13 () Int) +(declare-fun locOpenBrace_120_21_13 () Int) +(declare-fun BITXOR_pre_15_22_26 () Int) +(declare-fun locOpenParen_pre_128_18_13 () Int) +(declare-fun locOpenParen_128_18_13 () Int) +(declare-fun locDot_pre_122_29_13 () Int) +(declare-fun locDot_122_29_13 () Int) +(declare-fun SHORTTYPE_pre_14_36_26 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_pre_16_55_7 () Int) +(declare-fun type_pre_77_35_28 () Int) +(declare-fun type_77_35_28 () Int) +(declare-fun COMPILATIONUNIT_pre_16_14_7 () Int) +(declare-fun ASGBITXOR_pre_15_51_26 () Int) +(declare-fun tag_pre_25_32_13 () Int) +(declare-fun tag_25_32_13 () Int) +(declare-fun punctuationCodes_pre_30_164_19 () Int) +(declare-fun NULL_pre_13_60_26 () Int) +(declare-fun SWITCHLABEL_pre_16_41_7 () Int) +(declare-fun loc_pre_106_18_13 () Int) +(declare-fun loc_106_18_13 () Int) +(declare-fun locOp_pre_27_32_13 () Int) +(declare-fun locOp_27_32_13 () Int) +(declare-fun DIV_pre_15_35_26 () Int) +(declare-fun VARDECLSTMT_pre_16_27_7 () Int) +(declare-fun locOpenParen_pre_122_52_13 () Int) +(declare-fun locOpenParen_122_52_13 () Int) +(declare-fun locFirstSemi_pre_113_36_13 () Int) +(declare-fun locFirstSemi_113_36_13 () Int) +(declare-fun elements_pre_72_61_38 () Int) +(declare-fun elements_72_61_38 () Int) +(declare-fun BITOR_pre_15_21_26 () Int) +(declare-fun locColon_pre_125_25_13 () Int) +(declare-fun locColon_125_25_13 () Int) +(declare-fun BYTETYPE_pre_14_35_26 () Int) +(declare-fun PARENEXPR_pre_16_54_7 () Int) +(declare-fun stmt_pre_17_28 () Int) +(declare-fun stmt_17_28 () Int) +(declare-fun ASGBITOR_pre_15_50_26 () Int) +(declare-fun SKIPSTMT_pre_16_40_7 () Int) +(declare-fun enclosingInstance_pre_118_37_14 () Int) +(declare-fun enclosingInstance_118_37_14 () Int) +(declare-fun type_pre_126_18_28 () Int) +(declare-fun type_126_18_28 () Int) +(declare-fun locCloseBrace_pre_91_25_13 () Int) +(declare-fun locCloseBrace_91_25_13 () Int) +(declare-fun SUB_pre_15_34_26 () Int) +(declare-fun COMPOUNDNAME_pre_16_67_7 () Int) +(declare-fun locDot_pre_133_23_13 () Int) +(declare-fun locDot_133_23_13 () Int) +(declare-fun ids_pre_141_19_37 () Int) +(declare-fun ids_141_19_37 () Int) +(declare-fun SWITCHSTMT_pre_16_26_7 () Int) +(declare-fun loc_pre_104_20_13 () Int) +(declare-fun loc_104_20_13 () Int) +(declare-fun locId_pre_130_24_13 () Int) +(declare-fun locId_130_24_13 () Int) +(declare-fun keywordStrings_pre_30_181_30 () Int) +(declare-fun NULLTYPE_pre_14_34_26 () Int) +(declare-fun CASTEXPR_pre_16_53_7 () Int) +(declare-fun type_pre_127_18_28 () Int) +(declare-fun type_127_18_28 () Int) +(declare-fun locFinally_pre_116_25_13 () Int) +(declare-fun locFinally_116_25_13 () Int) +(declare-fun ASGBITAND_pre_15_49_26 () Int) +(declare-fun FORSTMT_pre_16_39_7 () Int) +(declare-fun locId_pre_80_43_13 () Int) +(declare-fun locId_80_43_13 () Int) +(declare-fun elemType_pre_138_18_28 () Int) +(declare-fun elemType_138_18_28 () Int) +(declare-fun loc_pre_62_45_13 () Int) +(declare-fun loc_62_45_13 () Int) +(declare-fun ADD_pre_15_33_26 () Int) +(declare-fun SIMPLENAME_pre_16_66_7 () Int) +(declare-fun BLOCKSTMT_pre_16_25_7 () Int) +(declare-fun value_pre_25_45_16 () Int) +(declare-fun value_25_45_16 () Int) +(declare-fun loc_pre_28_35_13 () Int) +(declare-fun loc_28_35_13 () Int) +(declare-fun TYPEMODIFIERPRAGMA_pre_30_28_26 () Int) +(declare-fun elems_pre () Int) +(declare-fun elems () Int) +(declare-fun LS () Int) +(declare-fun alloc_pre () Int) +(declare-fun this () Int) +(declare-fun RES () Int) +(declare-fun ecReturn () Int) +(assert (let ((?v_1 (array T_java_lang_String)) (?v_0 (array T_int)) (?v_3 (not (= this null))) (?v_2 (= ecReturn ecReturn)) (?v_4 (= true_term (is this T_javafe_ast_Type))) (?v_5 (not (= RES NULL_13_60_26)))) (not (=> true (=> (and (= length_pre_81_50_25 length_81_50_25) (= length_81_50_25 (asField length_81_50_25 T_int)) (= count_pre_72_67_33 count_72_67_33) (= count_72_67_33 (asField count_72_67_33 T_int)) (= VOIDTYPE_pre_14_33_26 VOIDTYPE_14_33_26) (= true_term (is VOIDTYPE_14_33_26 T_int)) (= INSTANCEOFEXPR_pre_16_52_7 INSTANCEOFEXPR_16_52_7) (= true_term (is INSTANCEOFEXPR_16_52_7 T_int)) (= AND_pre_15_20_26 AND_15_20_26) (= true_term (is AND_15_20_26 T_int)) (= loc_pre_123_49_13 loc_123_49_13) (= loc_123_49_13 (asField loc_123_49_13 T_int)) (= ASGURSHIFT_pre_15_48_26 ASGURSHIFT_15_48_26) (= true_term (is ASGURSHIFT_15_48_26 T_int)) (= expr_pre_15_28 expr_15_28) (= expr_15_28 (asField expr_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_15_28) alloc) (forall ((?s Int)) (=> (not (= ?s null)) (not (= (S_select expr_15_28 ?s) null)))) (= IFSTMT_pre_16_38_7 IFSTMT_16_38_7) (= true_term (is IFSTMT_16_38_7 T_int)) (= type_pre_123_24_28 type_123_24_28) (= type_123_24_28 (asField type_123_24_28 T_javafe_ast_Type)) (< (fClosedTime type_123_24_28) alloc) (forall ((?s_1_ Int)) (=> (not (= ?s_1_ null)) (not (= (S_select type_123_24_28 ?s_1_) null)))) (= locId_pre_111_20_13 locId_111_20_13) (= locId_111_20_13 (asField locId_111_20_13 T_int)) (= URSHIFT_pre_15_32_26 URSHIFT_15_32_26) (= true_term (is URSHIFT_15_32_26 T_int)) (= tokenType_pre_78_90_8 tokenType_78_90_8) (= tokenType_78_90_8 (asField tokenType_78_90_8 T_int)) (= ARRAYTYPE_pre_16_65_7 ARRAYTYPE_16_65_7) (= true_term (is ARRAYTYPE_16_65_7 T_int)) (= FORMALPARADECL_pre_16_24_7 FORMALPARADECL_16_24_7) (= true_term (is FORMALPARADECL_16_24_7 T_int)) (= enclosingInstance_pre_122_25_14 enclosingInstance_122_25_14) (= enclosingInstance_122_25_14 (asField enclosingInstance_122_25_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_122_25_14) alloc) (= loc_pre_122_49_13 loc_122_49_13) (= loc_122_49_13 (asField loc_122_49_13 T_int)) (= DOUBLETYPE_pre_14_32_26 DOUBLETYPE_14_32_26) (= true_term (is DOUBLETYPE_14_32_26 T_int)) (= CONDEXPR_pre_16_51_7 CONDEXPR_16_51_7) (= true_term (is CONDEXPR_16_51_7 T_int)) (= TYPEDECLELEMPRAGMA_pre_30_27_26 TYPEDECLELEMPRAGMA_30_27_26) (= true_term (is TYPEDECLELEMPRAGMA_30_27_26 T_int)) (= OR_pre_15_19_26 OR_15_19_26) (= true_term (is OR_15_19_26 T_int)) (= ASGRSHIFT_pre_15_47_26 ASGRSHIFT_15_47_26) (= true_term (is ASGRSHIFT_15_47_26 T_int)) (= locQuestion_pre_125_22_13 locQuestion_125_22_13) (= locQuestion_125_22_13 (asField locQuestion_125_22_13 T_int)) (= locIds_pre_141_25_29 locIds_141_25_29) (= locIds_141_25_29 (asField locIds_141_25_29 ?v_0)) (< (fClosedTime locIds_141_25_29) alloc) (forall ((?s_2_ Int)) (=> (not (= ?s_2_ null)) (not (= (S_select locIds_141_25_29 ?s_2_) null)))) (= locSuper_pre_137_20_13 locSuper_137_20_13) (= locSuper_137_20_13 (asField locSuper_137_20_13 T_int)) (= LABELSTMT_pre_16_37_7 LABELSTMT_16_37_7) (= true_term (is LABELSTMT_16_37_7 T_int)) (= locOpenBrackets_pre_123_65_29 locOpenBrackets_123_65_29) (= locOpenBrackets_123_65_29 (asField locOpenBrackets_123_65_29 ?v_0)) (< (fClosedTime locOpenBrackets_123_65_29) alloc) (forall ((?s_3_ Int)) (=> (not (= ?s_3_ null)) (not (= (S_select locOpenBrackets_123_65_29 ?s_3_) null)))) (= op_pre_26_35_13 op_26_35_13) (= op_26_35_13 (asField op_26_35_13 T_int)) (= locOpenBrace_pre_91_22_13 locOpenBrace_91_22_13) (= locOpenBrace_91_22_13 (asField locOpenBrace_91_22_13 T_int)) (= RSHIFT_pre_15_31_26 RSHIFT_15_31_26) (= true_term (is RSHIFT_15_31_26 T_int)) (= locOpenParen_pre_118_48_13 locOpenParen_118_48_13) (= locOpenParen_118_48_13 (asField locOpenParen_118_48_13 T_int)) (= TYPENAME_pre_16_64_7 TYPENAME_16_64_7) (= true_term (is TYPENAME_16_64_7 T_int)) (= FIELDDECL_pre_16_23_7 FIELDDECL_16_23_7) (= true_term (is FIELDDECL_16_23_7 T_int)) (= loc_pre_63_30_13 loc_63_30_13) (= loc_63_30_13 (asField loc_63_30_13 T_int)) (= loc_pre_113_33_13 loc_113_33_13) (= loc_113_33_13 (asField loc_113_33_13 T_int)) (= FLOATTYPE_pre_14_31_26 FLOATTYPE_14_31_26) (= true_term (is FLOATTYPE_14_31_26 T_int)) (= NEWARRAYEXPR_pre_16_50_7 NEWARRAYEXPR_16_50_7) (= true_term (is NEWARRAYEXPR_16_50_7 T_int)) (= ASGLSHIFT_pre_15_46_26 ASGLSHIFT_15_46_26) (= true_term (is ASGLSHIFT_15_46_26 T_int)) (= I_will_establish_invariants_afterwards_pre_5_236_34 I_will_establish_invariants_afterwards_5_236_34) (= true_term (is I_will_establish_invariants_afterwards_5_236_34 T_boolean)) (= CONTINUESTMT_pre_16_36_7 CONTINUESTMT_16_36_7) (= true_term (is CONTINUESTMT_16_36_7 T_int)) (= loc_pre_80_40_13 loc_80_40_13) (= loc_80_40_13 (asField loc_80_40_13 T_int)) (= STMTPRAGMA_pre_30_26_26 STMTPRAGMA_30_26_26) (= true_term (is STMTPRAGMA_30_26_26 T_int)) (= elements_pre_140_61_39 elements_140_61_39) (= elements_140_61_39 (asField elements_140_61_39 (array T_javafe_ast_Identifier))) (< (fClosedTime elements_140_61_39) alloc) (forall ((?s_4_ Int)) (=> (not (= ?s_4_ null)) (not (= (S_select elements_140_61_39 ?s_4_) null)))) (= loc_pre_116_22_13 loc_116_22_13) (= loc_116_22_13 (asField loc_116_22_13 T_int)) (= op_pre_27_26_13 op_27_26_13) (= op_27_26_13 (asField op_27_26_13 T_int)) (= locOpenParen_pre_131_30_13 locOpenParen_131_30_13) (= locOpenParen_131_30_13 (asField locOpenParen_131_30_13 T_int)) (= locGuardOpenParen_pre_23_13 locGuardOpenParen_23_13) (= locGuardOpenParen_23_13 (asField locGuardOpenParen_23_13 T_int)) (= LSHIFT_pre_15_30_26 LSHIFT_15_30_26) (= true_term (is LSHIFT_15_30_26 T_int)) (= locCloseBrace_pre_62_54_13 locCloseBrace_62_54_13) (= locCloseBrace_62_54_13 (asField locCloseBrace_62_54_13 T_int)) (= NULLLIT_pre_14_45_26 NULLLIT_14_45_26) (= true_term (is NULLLIT_14_45_26 T_int)) (= SUPEROBJECTDESIGNATOR_pre_16_63_7 SUPEROBJECTDESIGNATOR_16_63_7) (= true_term (is SUPEROBJECTDESIGNATOR_16_63_7 T_int)) (= loc_pre_83_29_13 loc_83_29_13) (= loc_83_29_13 (asField loc_83_29_13 T_int)) (= LOCALVARDECL_pre_16_22_7 LOCALVARDECL_16_22_7) (= true_term (is LOCALVARDECL_16_22_7 T_int)) (= loc_pre_107_18_13 loc_107_18_13) (= loc_107_18_13 (asField loc_107_18_13 T_int)) (= punctuationStrings_pre_30_134_22 punctuationStrings_30_134_22) (= true_term (is punctuationStrings_30_134_22 ?v_1)) (= true_term (isAllocated punctuationStrings_30_134_22 alloc)) (= POSTFIXDEC_pre_15_63_26 POSTFIXDEC_15_63_26) (= true_term (is POSTFIXDEC_15_63_26 T_int)) (= CHARTYPE_pre_14_30_26 CHARTYPE_14_30_26) (= true_term (is CHARTYPE_14_30_26 T_int)) (= NEWINSTANCEEXPR_pre_16_49_7 NEWINSTANCEEXPR_16_49_7) (= true_term (is NEWINSTANCEEXPR_16_49_7 T_int)) (= tag_pre_28_30_13 tag_28_30_13) (= tag_28_30_13 (asField tag_28_30_13 T_int)) (= loc_pre_117_23_13 loc_117_23_13) (= loc_117_23_13 (asField loc_117_23_13 T_int)) (= type_pre_133_20_28 type_133_20_28) (= type_133_20_28 (asField type_133_20_28 T_javafe_ast_Type)) (< (fClosedTime type_133_20_28) alloc) (forall ((?s_5_ Int)) (=> (not (= ?s_5_ null)) (not (= (S_select type_133_20_28 ?s_5_) null)))) (= dims_pre_123_45_31 dims_123_45_31) (= dims_123_45_31 (asField dims_123_45_31 T_javafe_ast_ExprVec)) (< (fClosedTime dims_123_45_31) alloc) (forall ((?s_6_ Int)) (=> (not (= ?s_6_ null)) (not (= (S_select dims_123_45_31 ?s_6_) null)))) (= ASGSUB_pre_15_45_26 ASGSUB_15_45_26) (= true_term (is ASGSUB_15_45_26 T_int)) (= BREAKSTMT_pre_16_35_7 BREAKSTMT_16_35_7) (= true_term (is BREAKSTMT_16_35_7 T_int)) (= locDots_pre_141_31_29 locDots_141_31_29) (= locDots_141_31_29 (asField locDots_141_31_29 ?v_0)) (< (fClosedTime locDots_141_31_29) alloc) (forall ((?s_7_ Int)) (=> (not (= ?s_7_ null)) (not (= (S_select locDots_141_31_29 ?s_7_) null)))) (= otherStrings_pre_30_193_30 otherStrings_30_193_30) (= true_term (is otherStrings_30_193_30 ?v_1)) (= true_term (isAllocated otherStrings_30_193_30 alloc)) (= LT_pre_15_29_26 LT_15_29_26) (= true_term (is LT_15_29_26 T_int)) (= MODIFIERPRAGMA_pre_30_25_26 MODIFIERPRAGMA_30_25_26) (= true_term (is MODIFIERPRAGMA_30_25_26 T_int)) (= STRINGLIT_pre_14_44_26 STRINGLIT_14_44_26) (= true_term (is STRINGLIT_14_44_26 T_int)) (= TYPEOBJECTDESIGNATOR_pre_16_62_7 TYPEOBJECTDESIGNATOR_16_62_7) (= true_term (is TYPEOBJECTDESIGNATOR_16_62_7 T_int)) (= locDot_pre_84_21_13 locDot_84_21_13) (= locDot_84_21_13 (asField locDot_84_21_13 T_int)) (= INITBLOCK_pre_16_21_7 INITBLOCK_16_21_7) (= true_term (is INITBLOCK_16_21_7 T_int)) (= loc_pre_93_18_13 loc_93_18_13) (= loc_93_18_13 (asField loc_93_18_13 T_int)) (= locType_pre_79_21_13 locType_79_21_13) (= locType_79_21_13 (asField locType_79_21_13 T_int)) (= noTokens_pre_30_212_27 noTokens_30_212_27) (= true_term (is noTokens_30_212_27 T_int)) (= loc_pre_103_20_13 loc_103_20_13) (= loc_103_20_13 (asField loc_103_20_13 T_int)) (= POSTFIXINC_pre_15_62_26 POSTFIXINC_15_62_26) (= true_term (is POSTFIXINC_15_62_26 T_int)) (= LONGTYPE_pre_14_29_26 LONGTYPE_14_29_26) (= true_term (is LONGTYPE_14_29_26 T_int)) (= ARRAYREFEXPR_pre_16_48_7 ARRAYREFEXPR_16_48_7) (= true_term (is ARRAYREFEXPR_16_48_7 T_int)) (= ASGADD_pre_15_44_26 ASGADD_15_44_26) (= true_term (is ASGADD_15_44_26 T_int)) (= THROWSTMT_pre_16_34_7 THROWSTMT_16_34_7) (= true_term (is THROWSTMT_16_34_7 T_int)) (= count_pre_140_67_33 count_140_67_33) (= count_140_67_33 (asField count_140_67_33 T_int)) (= elements_pre_124_61_33 elements_124_61_33) (= elements_124_61_33 (asField elements_124_61_33 (array T_javafe_ast_Expr))) (< (fClosedTime elements_124_61_33) alloc) (forall ((?s_8_ Int)) (=> (not (= ?s_8_ null)) (not (= (S_select elements_124_61_33 ?s_8_) null)))) (= TYPESIG_pre_29_6_28 TYPESIG_29_6_28) (= true_term (is TYPESIG_29_6_28 T_int)) (= LE_pre_15_28_26 LE_15_28_26) (= true_term (is LE_15_28_26 T_int)) (= DOUBLELIT_pre_14_43_26 DOUBLELIT_14_43_26) (= true_term (is DOUBLELIT_14_43_26 T_int)) (= EXPROBJECTDESIGNATOR_pre_16_61_7 EXPROBJECTDESIGNATOR_16_61_7) (= true_term (is EXPROBJECTDESIGNATOR_16_61_7 T_int)) (= locKeyword_pre_118_45_13 locKeyword_118_45_13) (= locKeyword_118_45_13 (asField locKeyword_118_45_13 T_int)) (= METHODDECL_pre_16_20_7 METHODDECL_16_20_7) (= true_term (is METHODDECL_16_20_7 T_int)) (= locCloseBracket_pre_121_23_13 locCloseBracket_121_23_13) (= locCloseBracket_121_23_13 (asField locCloseBracket_121_23_13 T_int)) (= syntax_pre_24_28_29 syntax_24_28_29) (= syntax_24_28_29 (asField syntax_24_28_29 T_boolean)) (= loc_pre_109_18_13 loc_109_18_13) (= loc_109_18_13 (asField loc_109_18_13 T_int)) (= DEC_pre_15_59_26 DEC_15_59_26) (= true_term (is DEC_15_59_26 T_int)) (= LEXICALPRAGMA_pre_30_24_26 LEXICALPRAGMA_30_24_26) (= true_term (is LEXICALPRAGMA_30_24_26 T_int)) (= INTTYPE_pre_14_28_26 INTTYPE_14_28_26) (= true_term (is INTTYPE_14_28_26 T_int)) (= THISEXPR_pre_16_47_7 THISEXPR_16_47_7) (= true_term (is THISEXPR_16_47_7 T_int)) (= loc_pre_100_18_13 loc_100_18_13) (= loc_100_18_13 (asField loc_100_18_13 T_int)) (= ASGREM_pre_15_43_26 ASGREM_15_43_26) (= true_term (is ASGREM_15_43_26 T_int)) (= RETURNSTMT_pre_16_33_7 RETURNSTMT_16_33_7) (= true_term (is RETURNSTMT_16_33_7 T_int)) (= LAST_KEYWORD_pre_30_103_26 LAST_KEYWORD_30_103_26) (= true_term (is LAST_KEYWORD_30_103_26 T_int)) (= GT_pre_15_27_26 GT_15_27_26) (= true_term (is GT_15_27_26 T_int)) (= locOpenParen_pre_132_28_13 locOpenParen_132_28_13) (= locOpenParen_132_28_13 (asField locOpenParen_132_28_13 T_int)) (= FLOATLIT_pre_14_42_26 FLOATLIT_14_42_26) (= true_term (is FLOATLIT_14_42_26 T_int)) (= CLASSLITERAL_pre_16_60_7 CLASSLITERAL_16_60_7) (= true_term (is CLASSLITERAL_16_60_7 T_int)) (= CONSTRUCTORDECL_pre_16_19_7 CONSTRUCTORDECL_16_19_7) (= true_term (is CONSTRUCTORDECL_16_19_7 T_int)) (= FIRST_KEYWORD_pre_30_51_26 FIRST_KEYWORD_30_51_26) (= true_term (is FIRST_KEYWORD_30_51_26 T_int)) (= INC_pre_15_58_26 INC_15_58_26) (= true_term (is INC_15_58_26 T_int)) (= superCall_pre_118_24_17 superCall_118_24_17) (= superCall_118_24_17 (asField superCall_118_24_17 T_boolean)) (= BOOLEANTYPE_pre_14_27_26 BOOLEANTYPE_14_27_26) (= true_term (is BOOLEANTYPE_14_27_26 T_int)) (= ARRAYINIT_pre_16_46_7 ARRAYINIT_16_46_7) (= true_term (is ARRAYINIT_16_46_7 T_int)) (= locCloseParen_pre_128_21_13 locCloseParen_128_21_13) (= locCloseParen_128_21_13 (asField locCloseParen_128_21_13 T_int)) (= owner_pre_8_35_28 owner_8_35_28) (= owner_8_35_28 (asField owner_8_35_28 T_java_lang_Object)) (< (fClosedTime owner_8_35_28) alloc) (= ASGDIV_pre_15_42_26 ASGDIV_15_42_26) (= true_term (is ASGDIV_15_42_26 T_int)) (= locOpenBrace_pre_62_51_13 locOpenBrace_62_51_13) (= locOpenBrace_62_51_13 (asField locOpenBrace_62_51_13 T_int)) (= locCloseParen_pre_127_24_13 locCloseParen_127_24_13) (= locCloseParen_127_24_13 (asField locCloseParen_127_24_13 T_int)) (= EVALSTMT_pre_16_32_7 EVALSTMT_16_32_7) (= true_term (is EVALSTMT_16_32_7 T_int)) (= count_pre_124_67_33 count_124_67_33) (= count_124_67_33 (asField count_124_67_33 T_int)) (= GE_pre_15_26_26 GE_15_26_26) (= true_term (is GE_15_26_26 T_int)) (= CHARLIT_pre_14_41_26 CHARLIT_14_41_26) (= true_term (is CHARLIT_14_41_26 T_int)) (= METHODINVOCATION_pre_16_59_7 METHODINVOCATION_16_59_7) (= true_term (is METHODINVOCATION_16_59_7 T_int)) (= INTERFACEDECL_pre_16_18_7 INTERFACEDECL_16_18_7) (= true_term (is INTERFACEDECL_16_18_7 T_int)) (= BITNOT_pre_15_57_26 BITNOT_15_57_26) (= true_term (is BITNOT_15_57_26 T_int)) (= IDENT_pre_14_25_26 IDENT_14_25_26) (= true_term (is IDENT_14_25_26 T_int)) (= CATCHCLAUSE_pre_16_45_7 CATCHCLAUSE_16_45_7) (= true_term (is CATCHCLAUSE_16_45_7 T_int)) (= loc_pre_115_29_13 loc_115_29_13) (= loc_115_29_13 (asField loc_115_29_13 T_int)) (= NULL_pre_30_82_26 NULL_30_82_26) (= true_term (is NULL_30_82_26 T_int)) (= ASGMUL_pre_15_41_26 ASGMUL_15_41_26) (= true_term (is ASGMUL_15_41_26 T_int)) (= SYNCHRONIZESTMT_pre_16_31_7 SYNCHRONIZESTMT_16_31_7) (= true_term (is SYNCHRONIZESTMT_16_31_7 T_int)) (= locOp_pre_26_43_13 locOp_26_43_13) (= locOp_26_43_13 (asField locOp_26_43_13 T_int)) (= loc_pre_20_13 loc_20_13) (= loc_20_13 (asField loc_20_13 T_int)) (= locCloseBrace_pre_120_24_13 locCloseBrace_120_24_13) (= locCloseBrace_120_24_13 (asField locCloseBrace_120_24_13 T_int)) (= EQ_pre_15_25_26 EQ_15_25_26) (= true_term (is EQ_15_25_26 T_int)) (= locId_pre_77_38_13 locId_77_38_13) (= locId_77_38_13 (asField locId_77_38_13 T_int)) (= LONGLIT_pre_14_40_26 LONGLIT_14_40_26) (= true_term (is LONGLIT_14_40_26 T_int)) (= AMBIGUOUSMETHODINVOCATION_pre_16_58_7 AMBIGUOUSMETHODINVOCATION_16_58_7) (= true_term (is AMBIGUOUSMETHODINVOCATION_16_58_7 T_int)) (= CLASSDECL_pre_16_17_7 CLASSDECL_16_17_7) (= true_term (is CLASSDECL_16_17_7 T_int)) (= loc_pre_112_22_13 loc_112_22_13) (= loc_112_22_13 (asField loc_112_22_13 T_int)) (= elements_pre_73_61_39 elements_73_61_39) (= elements_73_61_39 (asField elements_73_61_39 (array T_javafe_ast_MethodDecl))) (< (fClosedTime elements_73_61_39) alloc) (forall ((?s_9_ Int)) (=> (not (= ?s_9_ null)) (not (= (S_select elements_73_61_39 ?s_9_) null)))) (= NOT_pre_15_56_26 NOT_15_56_26) (= true_term (is NOT_15_56_26 T_int)) (= locDot_pre_118_41_13 locDot_118_41_13) (= locDot_118_41_13 (asField locDot_118_41_13 T_int)) (= CONSTRUCTORINVOCATION_pre_16_44_7 CONSTRUCTORINVOCATION_16_44_7) (= true_term (is CONSTRUCTORINVOCATION_16_44_7 T_int)) (= locOpenParen_pre_104_23_13 locOpenParen_104_23_13) (= locOpenParen_104_23_13 (asField locOpenParen_104_23_13 T_int)) (= locOpenBracket_pre_121_20_13 locOpenBracket_121_20_13) (= locOpenBracket_121_20_13 (asField locOpenBracket_121_20_13 T_int)) (= ASSIGN_pre_15_40_26 ASSIGN_15_40_26) (= true_term (is ASSIGN_15_40_26 T_int)) (= DOSTMT_pre_16_30_7 DOSTMT_16_30_7) (= true_term (is DOSTMT_16_30_7 T_int)) (= locOpenBrace_pre_80_36_13 locOpenBrace_80_36_13) (= locOpenBrace_80_36_13 (asField locOpenBrace_80_36_13 T_int)) (= NE_pre_15_24_26 NE_15_24_26) (= true_term (is NE_15_24_26 T_int)) (= INTLIT_pre_14_39_26 INTLIT_14_39_26) (= true_term (is INTLIT_14_39_26 T_int)) (= locId_pre_132_25_13 locId_132_25_13) (= locId_132_25_13 (asField locId_132_25_13 T_int)) (= FIELDACCESS_pre_16_57_7 FIELDACCESS_16_57_7) (= true_term (is FIELDACCESS_16_57_7 T_int)) (= locOpenBracket_pre_138_21_13 locOpenBracket_138_21_13) (= locOpenBracket_138_21_13 (asField locOpenBracket_138_21_13 T_int)) (= ONDEMANDIMPORTDECL_pre_16_16_7 ONDEMANDIMPORTDECL_16_16_7) (= true_term (is ONDEMANDIMPORTDECL_16_16_7 T_int)) (= init_pre_123_35_19 init_123_35_19) (= init_123_35_19 (asField init_123_35_19 T_javafe_ast_ArrayInit)) (< (fClosedTime init_123_35_19) alloc) (= UNARYSUB_pre_15_55_26 UNARYSUB_15_55_26) (= true_term (is UNARYSUB_15_55_26 T_int)) (= returnType_pre_79_18_28 returnType_79_18_28) (= returnType_79_18_28 (asField returnType_79_18_28 T_javafe_ast_Type)) (< (fClosedTime returnType_79_18_28) alloc) (forall ((?s_10_ Int)) (=> (not (= ?s_10_ null)) (not (= (S_select returnType_79_18_28 ?s_10_) null)))) (= loc_pre_114_16_13 loc_114_16_13) (= loc_114_16_13 (asField loc_114_16_13 T_int)) (= loc_pre_129_22_13 loc_129_22_13) (= loc_129_22_13 (asField loc_129_22_13 T_int)) (= TRYCATCHSTMT_pre_16_43_7 TRYCATCHSTMT_16_43_7) (= true_term (is TRYCATCHSTMT_16_43_7 T_int)) (= body_pre_80_34_19 body_80_34_19) (= body_80_34_19 (asField body_80_34_19 T_javafe_ast_BlockStmt)) (< (fClosedTime body_80_34_19) alloc) (= loc_pre_126_21_13 loc_126_21_13) (= loc_126_21_13 (asField loc_126_21_13 T_int)) (= STAR_pre_15_37_26 STAR_15_37_26) (= true_term (is STAR_15_37_26 T_int)) (= WHILESTMT_pre_16_29_7 WHILESTMT_16_29_7) (= true_term (is WHILESTMT_16_29_7 T_int)) (= loc_pre_139_20_13 loc_139_20_13) (= loc_139_20_13 (asField loc_139_20_13 T_int)) (= BITAND_pre_15_23_26 BITAND_15_23_26) (= true_term (is BITAND_15_23_26 T_int)) (= locOpenParen_pre_127_21_13 locOpenParen_127_21_13) (= locOpenParen_127_21_13 (asField locOpenParen_127_21_13 T_int)) (= BOOLEANLIT_pre_14_38_26 BOOLEANLIT_14_38_26) (= true_term (is BOOLEANLIT_14_38_26 T_int)) (= VARIABLEACCESS_pre_16_56_7 VARIABLEACCESS_16_56_7) (= true_term (is VARIABLEACCESS_16_56_7 T_int)) (= SINGLETYPEIMPORTDECL_pre_16_15_7 SINGLETYPEIMPORTDECL_16_15_7) (= true_term (is SINGLETYPEIMPORTDECL_16_15_7 T_int)) (= UNARYADD_pre_15_54_26 UNARYADD_15_54_26) (= true_term (is UNARYADD_15_54_26 T_int)) (= locId_pre_62_48_13 locId_62_48_13) (= locId_62_48_13 (asField locId_62_48_13 T_int)) (= TRYFINALLYSTMT_pre_16_42_7 TRYFINALLYSTMT_16_42_7) (= true_term (is TRYFINALLYSTMT_16_42_7 T_int)) (= count_pre_73_67_33 count_73_67_33) (= count_73_67_33 (asField count_73_67_33 T_int)) (= MOD_pre_15_36_26 MOD_15_36_26) (= true_term (is MOD_15_36_26 T_int)) (= otherCodes_pre_30_202_27 otherCodes_30_202_27) (= true_term (is otherCodes_30_202_27 ?v_0)) (= true_term (isAllocated otherCodes_30_202_27 alloc)) (= loc_pre_119_22_13 loc_119_22_13) (= loc_119_22_13 (asField loc_119_22_13 T_int)) (= loc_pre_25_50_13 loc_25_50_13) (= loc_25_50_13 (asField loc_25_50_13 T_int)) (= CLASSDECLSTMT_pre_16_28_7 CLASSDECLSTMT_16_28_7) (= true_term (is CLASSDECLSTMT_16_28_7 T_int)) (= locOpenBrace_pre_120_21_13 locOpenBrace_120_21_13) (= locOpenBrace_120_21_13 (asField locOpenBrace_120_21_13 T_int)) (= BITXOR_pre_15_22_26 BITXOR_15_22_26) (= true_term (is BITXOR_15_22_26 T_int)) (= locOpenParen_pre_128_18_13 locOpenParen_128_18_13) (= locOpenParen_128_18_13 (asField locOpenParen_128_18_13 T_int)) (= locDot_pre_122_29_13 locDot_122_29_13) (= locDot_122_29_13 (asField locDot_122_29_13 T_int)) (= SHORTTYPE_pre_14_36_26 SHORTTYPE_14_36_26) (= true_term (is SHORTTYPE_14_36_26 T_int)) (= AMBIGUOUSVARIABLEACCESS_pre_16_55_7 AMBIGUOUSVARIABLEACCESS_16_55_7) (= true_term (is AMBIGUOUSVARIABLEACCESS_16_55_7 T_int)) (= type_pre_77_35_28 type_77_35_28) (= type_77_35_28 (asField type_77_35_28 T_javafe_ast_Type)) (< (fClosedTime type_77_35_28) alloc) (forall ((?s_11_ Int)) (=> (not (= ?s_11_ null)) (not (= (S_select type_77_35_28 ?s_11_) null)))) (= COMPILATIONUNIT_pre_16_14_7 COMPILATIONUNIT_16_14_7) (= true_term (is COMPILATIONUNIT_16_14_7 T_int)) (= ASGBITXOR_pre_15_51_26 ASGBITXOR_15_51_26) (= true_term (is ASGBITXOR_15_51_26 T_int)) (= tag_pre_25_32_13 tag_25_32_13) (= tag_25_32_13 (asField tag_25_32_13 T_int)) (= punctuationCodes_pre_30_164_19 punctuationCodes_30_164_19) (= true_term (is punctuationCodes_30_164_19 ?v_0)) (= true_term (isAllocated punctuationCodes_30_164_19 alloc)) (= NULL_pre_13_60_26 NULL_13_60_26) (= true_term (is NULL_13_60_26 T_int)) (= SWITCHLABEL_pre_16_41_7 SWITCHLABEL_16_41_7) (= true_term (is SWITCHLABEL_16_41_7 T_int)) (= loc_pre_106_18_13 loc_106_18_13) (= loc_106_18_13 (asField loc_106_18_13 T_int)) (= locOp_pre_27_32_13 locOp_27_32_13) (= locOp_27_32_13 (asField locOp_27_32_13 T_int)) (= DIV_pre_15_35_26 DIV_15_35_26) (= true_term (is DIV_15_35_26 T_int)) (= VARDECLSTMT_pre_16_27_7 VARDECLSTMT_16_27_7) (= true_term (is VARDECLSTMT_16_27_7 T_int)) (= locOpenParen_pre_122_52_13 locOpenParen_122_52_13) (= locOpenParen_122_52_13 (asField locOpenParen_122_52_13 T_int)) (= locFirstSemi_pre_113_36_13 locFirstSemi_113_36_13) (= locFirstSemi_113_36_13 (asField locFirstSemi_113_36_13 T_int)) (= elements_pre_72_61_38 elements_72_61_38) (= elements_72_61_38 (asField elements_72_61_38 (array T_javafe_ast_FieldDecl))) (< (fClosedTime elements_72_61_38) alloc) (forall ((?s_12_ Int)) (=> (not (= ?s_12_ null)) (not (= (S_select elements_72_61_38 ?s_12_) null)))) (= BITOR_pre_15_21_26 BITOR_15_21_26) (= true_term (is BITOR_15_21_26 T_int)) (= locColon_pre_125_25_13 locColon_125_25_13) (= locColon_125_25_13 (asField locColon_125_25_13 T_int)) (= BYTETYPE_pre_14_35_26 BYTETYPE_14_35_26) (= true_term (is BYTETYPE_14_35_26 T_int)) (= PARENEXPR_pre_16_54_7 PARENEXPR_16_54_7) (= true_term (is PARENEXPR_16_54_7 T_int)) (= stmt_pre_17_28 stmt_17_28) (= stmt_17_28 (asField stmt_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_17_28) alloc) (forall ((?s_13_ Int)) (=> (not (= ?s_13_ null)) (not (= (S_select stmt_17_28 ?s_13_) null)))) (= ASGBITOR_pre_15_50_26 ASGBITOR_15_50_26) (= true_term (is ASGBITOR_15_50_26 T_int)) (= SKIPSTMT_pre_16_40_7 SKIPSTMT_16_40_7) (= true_term (is SKIPSTMT_16_40_7 T_int)) (= enclosingInstance_pre_118_37_14 enclosingInstance_118_37_14) (= enclosingInstance_118_37_14 (asField enclosingInstance_118_37_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_118_37_14) alloc) (= type_pre_126_18_28 type_126_18_28) (= type_126_18_28 (asField type_126_18_28 T_javafe_ast_Type)) (< (fClosedTime type_126_18_28) alloc) (forall ((?s_14_ Int)) (=> (not (= ?s_14_ null)) (not (= (S_select type_126_18_28 ?s_14_) null)))) (= locCloseBrace_pre_91_25_13 locCloseBrace_91_25_13) (= locCloseBrace_91_25_13 (asField locCloseBrace_91_25_13 T_int)) (= SUB_pre_15_34_26 SUB_15_34_26) (= true_term (is SUB_15_34_26 T_int)) (= COMPOUNDNAME_pre_16_67_7 COMPOUNDNAME_16_67_7) (= true_term (is COMPOUNDNAME_16_67_7 T_int)) (= locDot_pre_133_23_13 locDot_133_23_13) (= locDot_133_23_13 (asField locDot_133_23_13 T_int)) (= ids_pre_141_19_37 ids_141_19_37) (= ids_141_19_37 (asField ids_141_19_37 T_javafe_ast_IdentifierVec)) (< (fClosedTime ids_141_19_37) alloc) (forall ((?s_15_ Int)) (=> (not (= ?s_15_ null)) (not (= (S_select ids_141_19_37 ?s_15_) null)))) (= SWITCHSTMT_pre_16_26_7 SWITCHSTMT_16_26_7) (= true_term (is SWITCHSTMT_16_26_7 T_int)) (= loc_pre_104_20_13 loc_104_20_13) (= loc_104_20_13 (asField loc_104_20_13 T_int)) (= locId_pre_130_24_13 locId_130_24_13) (= locId_130_24_13 (asField locId_130_24_13 T_int)) (= keywordStrings_pre_30_181_30 keywordStrings_30_181_30) (= true_term (is keywordStrings_30_181_30 ?v_1)) (= true_term (isAllocated keywordStrings_30_181_30 alloc)) (= NULLTYPE_pre_14_34_26 NULLTYPE_14_34_26) (= true_term (is NULLTYPE_14_34_26 T_int)) (= CASTEXPR_pre_16_53_7 CASTEXPR_16_53_7) (= true_term (is CASTEXPR_16_53_7 T_int)) (= type_pre_127_18_28 type_127_18_28) (= type_127_18_28 (asField type_127_18_28 T_javafe_ast_Type)) (< (fClosedTime type_127_18_28) alloc) (forall ((?s_16_ Int)) (=> (not (= ?s_16_ null)) (not (= (S_select type_127_18_28 ?s_16_) null)))) (= locFinally_pre_116_25_13 locFinally_116_25_13) (= locFinally_116_25_13 (asField locFinally_116_25_13 T_int)) (= ASGBITAND_pre_15_49_26 ASGBITAND_15_49_26) (= true_term (is ASGBITAND_15_49_26 T_int)) (= FORSTMT_pre_16_39_7 FORSTMT_16_39_7) (= true_term (is FORSTMT_16_39_7 T_int)) (= locId_pre_80_43_13 locId_80_43_13) (= locId_80_43_13 (asField locId_80_43_13 T_int)) (= elemType_pre_138_18_28 elemType_138_18_28) (= elemType_138_18_28 (asField elemType_138_18_28 T_javafe_ast_Type)) (< (fClosedTime elemType_138_18_28) alloc) (forall ((?s_17_ Int)) (=> (not (= ?s_17_ null)) (not (= (S_select elemType_138_18_28 ?s_17_) null)))) (= loc_pre_62_45_13 loc_62_45_13) (= loc_62_45_13 (asField loc_62_45_13 T_int)) (= ADD_pre_15_33_26 ADD_15_33_26) (= true_term (is ADD_15_33_26 T_int)) (= SIMPLENAME_pre_16_66_7 SIMPLENAME_16_66_7) (= true_term (is SIMPLENAME_16_66_7 T_int)) (= BLOCKSTMT_pre_16_25_7 BLOCKSTMT_16_25_7) (= true_term (is BLOCKSTMT_16_25_7 T_int)) (= value_pre_25_45_16 value_25_45_16) (= value_25_45_16 (asField value_25_45_16 T_java_lang_Object)) (< (fClosedTime value_25_45_16) alloc) (= loc_pre_28_35_13 loc_28_35_13) (= loc_28_35_13 (asField loc_28_35_13 T_int)) (= TYPEMODIFIERPRAGMA_pre_30_28_26 TYPEMODIFIERPRAGMA_30_28_26) (= true_term (is TYPEMODIFIERPRAGMA_30_28_26 T_int)) (= elems_pre elems) (= elems (asElems elems)) (< (eClosedTime elems) alloc) (= LS (asLockSet LS)) (= alloc_pre alloc)) (not (and (= true_term (is this T_javafe_ast_WhileStmt)) (= true_term (isAllocated this alloc)) ?v_3 (forall ((?brokenObj Int)) (=> (and (= true_term (is ?brokenObj T_javafe_ast_WhileStmt)) (not (= ?brokenObj null))) (not (= (S_select locGuardOpenParen_23_13 ?brokenObj) NULL_13_60_26)))) (forall ((?brokenObj_1_ Int)) (=> (and (= true_term (is ?brokenObj_1_ T_javafe_ast_WhileStmt)) (not (= ?brokenObj_1_ null))) (not (= (S_select loc_20_13 ?brokenObj_1_) NULL_13_60_26)))) (= RES (S_select loc_20_13 this)) (= true_term true_term) (or (not ?v_2) (and ?v_2 (or (not (=> (and ?v_2 (not (and ?v_4 ?v_3))) ?v_5)) (not (=> (and ?v_2 ?v_4 ?v_3 (= true_term (S_select syntax_24_28_29 (cast this T_javafe_ast_Type)))) ?v_5)))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/javafe.tc.CheckCompilationUnit.001.smt2 b/test/regress/regress0/quantifiers/javafe.tc.CheckCompilationUnit.001.smt2 new file mode 100644 index 000000000..e0938975c --- /dev/null +++ b/test/regress/regress0/quantifiers/javafe.tc.CheckCompilationUnit.001.smt2 @@ -0,0 +1,676 @@ +(set-logic AUFLIA) +(set-info :source | + Simplify front end test suite. + This benchmark was translated by Michal Moskal. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun L_102.5 () Int) +(declare-fun integralOr (Int Int) Int) +(declare-fun type_86.35.28 () Int) +(declare-fun RES_88.1_0_126.5_0_127.18_127.18 () Int) +(declare-fun j_88.1_0_102.5_0_102.43 () Int) +(declare-fun arrayShapeMore (Int Int) Int) +(declare-fun typeEnv_pre_35.323.32 () Int) +(declare-fun integralAnd (Int Int) Int) +(declare-fun RES_6_ () Int) +(declare-fun T_.TYPE () Int) +(declare-fun T_javafe.ast.MethodDecl () Int) +(declare-fun EC_127.12_1_ () Int) +(declare-fun i_97.24_88.1_0_97.24_22.62.48 () Int) +(declare-fun elems_pre_6.27.35 () Int) +(declare-fun intFirst () Int) +(declare-fun syntax_21.28.29 () Int) +(declare-fun RES_88.1_0_126.5_0_144.29_144.29 () Int) +(declare-fun tmp13_88.1_0_102.5_0_115.3 () Int) +(declare-fun T_javafe.ast.FieldDecl () Int) +(declare-fun RES_7_ () Int) +(declare-fun eClosedTime (Int) Int) +(declare-fun int_m9223372036854775808 () Int) +(declare-fun EC_90.24 () Int) +(declare-fun EC_88.1_0_126.5_0_136.7_136.7 () Int) +(declare-fun elements_82.61.38 () Int) +(declare-fun S_143.10 () Int) +(declare-fun int_m2147483648 () Int) +(declare-fun T_java.lang.Comparable () Int) +(declare-fun T_javafe.ast.TypeName () Int) +(declare-fun TYPEDECLELEMPRAGMA_pre_56.27.26 () Int) +(declare-fun arrayPosition (Int) Int) +(declare-fun loc_pre_88.40.13 () Int) +(declare-fun TYPEDECLELEMPRAGMA_56.27.26 () Int) +(declare-fun RES_8_ () Int) +(declare-fun keywordStrings_56.181.30 () Int) +(declare-fun select1 (Int Int) Int) +(declare-fun select2 (Int Int Int) Int) +(declare-fun RES_88.1_0_126.5_0_126.27_126.27 () Int) +(declare-fun T_java.util.EscjavaKeyValue () Int) +(declare-fun T_javafe.ast.TypeDecl () Int) +(declare-fun EC_54.14_54.14 () Int) +(declare-fun T_long () Int) +(declare-fun RES_88.1_0_126.5_0_136.27_136.27 () Int) +(declare-fun elements_17.61.39 () Int) +(declare-fun RES_9_ () Int) +(declare-fun T_javafe.filespace.Extension () Int) +(declare-fun INTLIT_57.39.26 () Int) +(declare-fun C_126.5 () Int) +(declare-fun lockLE (Int Int) Bool) +(declare-fun classLiteral (Int) Int) +(declare-fun RES_88.1_0_102.5_1_102.35_102.35 () Int) +(declare-fun S_142.5 () Int) +(declare-fun lockLT (Int Int) Bool) +(declare-fun RES_127.12 () Int) +(declare-fun body_88.34.19 () Int) +(declare-fun T_float () Int) +(declare-fun alloc () Int) +(declare-fun elems_77.1 () Int) +(declare-fun id_26.32.34 () Int) +(declare-fun EC_88.1_0_88.29_88.29 () Int) +(declare-fun locOpenBrace_pre_88.36.13 () Int) +(declare-fun T_javafe.ast.Modifiers () Int) +(declare-fun asChild (Int Int) Int) +(declare-fun CONCVARSYM (Int) Int) +(declare-fun len_136.7_88.1_0_126.5_0_136.7_22.171.36 () Int) +(declare-fun T_int () Int) +(declare-fun EC_57.14_57.14 () Int) +(declare-fun otherCodes_pre_56.202.27 () Int) +(declare-fun EC_88.1_0_126.5_0_132.13_132.13 () Int) +(declare-fun locId_86.38.13 () Int) +(declare-fun RES_127.12_1_ () Int) +(declare-fun otherStrings_pre_56.193.30 () Int) +(declare-fun int_2147483647 () Int) +(declare-fun T_javafe.ast.GenericBlockStmt () Int) +(declare-fun elements_pre_17.61.39 () Int) +(declare-fun int_9223372036854775807 () Int) +(declare-fun RES_88.1_0_126.5_1_126.27_126.27 () Int) +(declare-fun T_byte () Int) +(declare-fun loc_6.30.13 () Int) +(declare-fun punctuationStrings_56.134.22 () Int) +(declare-fun j_loopold_88.1_0_102.14 () Int) +(declare-fun typeName_19.15.32 () Int) +(declare-fun store1 (Int Int Int) Int) +(declare-fun store2 (Int Int Int Int) Int) +(declare-fun body_pre_88.34.19 () Int) +(declare-fun FIRST_KEYWORD_56.51.26 () Int) +(declare-fun loc_57.14_57.14_15.98.40 () Int) +(declare-fun S_115.3 () Int) +(declare-fun owner_pre_4.35.28 () Int) +(declare-fun checkedField_pre_30.33 () Int) +(declare-fun max (Int) Int) +(declare-fun T_javafe.ast.ImportDecl () Int) +(declare-fun checkedField_30.33 () Int) +(declare-fun T_java.util.Map () Int) +(declare-fun LEXICALPRAGMA_pre_56.24.26 () Int) +(declare-fun LONGLIT_57.40.26 () Int) +(declare-fun noTokens_56.212.27 () Int) +(declare-fun FLOATLIT_pre_57.42.26 () Int) +(declare-fun count_17.67.33 () Int) +(declare-fun RES_90.24 () Int) +(declare-fun NULL_56.82.26 () Int) +(declare-fun STMTPRAGMA_pre_56.26.26 () Int) +(declare-fun L_88.1 () Int) +(declare-fun EC_88.1_0_102.5_0_114.15_114.15 () Int) +(declare-fun locOpenBrace_pre_26.51.13 () Int) +(declare-fun noTokens_pre_56.212.27 () Int) +(declare-fun otherStrings_56.193.30 () Int) +(declare-fun integralDiv (Int Int) Int) +(declare-fun NULL_15.60.26 () Int) +(declare-fun T_javafe.ast.Identifier () Int) +(declare-fun locCloseBrace_97.25.13 () Int) +(declare-fun TYPEMODIFIERPRAGMA_56.28.26 () Int) +(declare-fun locId_pre_86.38.13 () Int) +(declare-fun EC_loopold_88.1_0 () Int) +(declare-fun elems_6.27.35 () Int) +(declare-fun T_javafe.ast.TagConstants () Int) +(declare-fun T_java.lang.Class () Int) +(declare-fun L_126.5 () Int) +(declare-fun RES_52.18_52.18 () Int) +(declare-fun T_java.lang.Object () Int) +(declare-fun RES_88.1_0_126.5_0_141.6_141.6 () Int) +(declare-fun returnType_pre_87.18.28 () Int) +(declare-fun EC_88.1_0_102.5_0_113.21_113.21 () Int) +(declare-fun T_javafe.parser.TagConstants () Int) +(declare-fun pkgName_pre_6.21.14 () Int) +(declare-fun STRINGLIT_57.44.26 () Int) +(declare-fun imports_76.1 () Int) +(declare-fun longLast () Int) +(declare-fun T_javafe.ast.PrettyPrint () Int) +(declare-fun termConditional (Int Int Int) Int) +(declare-fun EC_88.1_0_102.5_0_111.21_111.21 () Int) +(declare-fun BOOLEANLIT_57.38.26 () Int) +(declare-fun i_loopold_88.10 () Int) +(declare-fun locCloseBrace_pre_26.54.13 () Int) +(declare-fun modifiers_pre_26.28.13 () Int) +(declare-fun EC_52.5_1_ () Int) +(declare-fun imports_pre_6.25.37 () Int) +(declare-fun loc_pre_6.30.13 () Int) +(declare-fun RES_90.24_1_ () Int) +(declare-fun T_java.util.Dictionary () Int) +(declare-fun bool_false () Int) +(declare-fun Smt.true () Int) +(declare-fun punctuationStrings_pre_56.134.22 () Int) +(declare-fun EC_88.1_0_126.5_0_140.18_140.18 () Int) +(declare-fun EC_88.1_0_102.5_0_116.22_116.22 () Int) +(declare-fun name_pre_20.18.28 () Int) +(declare-fun asLockSet (Int) Int) +(declare-fun integralMod (Int Int) Int) +(declare-fun T_javafe.ast.BlockStmt () Int) +(declare-fun EC_88.1_0_90.32_90.32 () Int) +(declare-fun count_pre_83.67.33 () Int) +(declare-fun EC_104.21 () Int) +(declare-fun EC_88.1_0_126.5_0_135.13_135.13 () Int) +(declare-fun Smt.false () Int) +(declare-fun typeof (Int) Int) +(declare-fun int_18446744073709551615 () Int) +(declare-fun RES_54.22_54.22 () Int) +(declare-fun EC_88.1_0_97.24_97.24 () Int) +(declare-fun owner_4.35.28 () Int) +(declare-fun RES_88.1_0_97.40_97.40 () Int) +(declare-fun length_22.50.25 () Int) +(declare-fun DOUBLELIT_pre_57.43.26 () Int) +(declare-fun stringCat (Int Int) Int) +(declare-fun otherCodes_56.202.27 () Int) +(declare-fun LAST_KEYWORD_pre_56.103.26 () Int) +(declare-fun T_boolean () Int) +(declare-fun EC_loopold_88.1_0_1_ () Int) +(declare-fun EC_52.18_52.18 () Int) +(declare-fun longFirst () Int) +(declare-fun decorationType_5.48.27 () Int) +(declare-fun returnType_87.18.28 () Int) +(declare-fun T_java.util.Hashtable () Int) +(declare-fun RES_10_ () Int) +(declare-fun NULL_pre_15.60.26 () Int) +(declare-fun EC_88.1_0_126.5_0_136.17_136.17 () Int) +(declare-fun RES_11_ () Int) +(declare-fun EC_10_ () Int) +(declare-fun arrayFresh (Int Int Int Int Int Int Int) Bool) +(declare-fun decorationType_pre_5.48.27 () Int) +(declare-fun locId_26.48.13 () Int) +(declare-fun locOpenBrace_88.36.13 () Int) +(declare-fun EC_88.1_0_126.5_0_144.14_144.14 () Int) +(declare-fun T_javafe.tc.Env () Int) +(declare-fun locOpenBrace_pre_97.22.13 () Int) +(declare-fun punctuationCodes_56.164.19 () Int) +(declare-fun RES () Int) +(declare-fun type_pre_86.35.28 () Int) +(declare-fun msg_140.18_88.1_0_126.5_0_140.18_24.220.45 () Int) +(declare-fun EC_11_ () Int) +(declare-fun i_88.1_0_88.37 () Int) +(declare-fun locType_pre_87.21.13 () Int) +(declare-fun RES_88.1_0_126.5_0_136.7_136.7 () Int) +(declare-fun LAST_KEYWORD_56.103.26 () Int) +(declare-fun count_pre_25.67.33 () Int) +(declare-fun S_118.9 () Int) +(declare-fun RES_88.1_0_102.5_0_113.21_113.21 () Int) +(declare-fun EC_12_ () Int) +(declare-fun EC_88.1_0_126.5_0_127.18_127.18 () Int) +(declare-fun intLast () Int) +(declare-fun EC_88.1_0_102.5_0_102.35_102.35 () Int) +(declare-fun arrayType () Int) +(declare-fun typeEnv_35.323.32 () Int) +(declare-fun FLOATLIT_57.42.26 () Int) +(declare-fun RES_88.1_0_102.5_0_111.21_111.21 () Int) +(declare-fun EC_88.1_0_102.5_0_114.24_114.24 () Int) +(declare-fun boolEq (Int Int) Bool) +(declare-fun EC_13_ () Int) +(declare-fun count_pre_82.67.33 () Int) +(declare-fun STMTPRAGMA_56.26.26 () Int) +(declare-fun T_javafe.ast.Name () Int) +(declare-fun arrayLength (Int) Int) +(declare-fun RES_88.1_1_88.29_88.29 () Int) +(declare-fun S_56.10 () Int) +(declare-fun locOpenBrace_26.51.13 () Int) +(declare-fun cast (Int Int) Int) +(declare-fun asElems (Int) Int) +(declare-fun locCloseBrace_pre_97.25.13 () Int) +(declare-fun locId_pre_26.48.13 () Int) +(declare-fun T_char () Int) +(declare-fun i_111.21_88.1_0_102.5_0_111.21_22.62.48 () Int) +(declare-fun whereDecoration_pre_35.597.41 () Int) +(declare-fun other_136.27_88.1_0_126.5_0_136.27_22.42.42 () Int) +(declare-fun EC_88.1_0_126.5_0_126.27_126.27 () Int) +(declare-fun tmp17_cand_135.22 () Int) +(declare-fun loc_18.18.13 () Int) +(declare-fun T_javafe.tc.CheckCompilationUnit () Int) +(declare-fun punctuationCodes_pre_56.164.19 () Int) +(declare-fun T_javafe.ast.ASTNode () Int) +(declare-fun RES_88.1_0_126.5_0_135.13_135.13 () Int) +(declare-fun T_javafe.tc.EnvForCU () Int) +(declare-fun locType_87.21.13 () Int) +(declare-fun divides (Int Int) Int) +(declare-fun name_20.18.28 () Int) +(declare-fun length_pre_22.50.25 () Int) +(declare-fun T_javafe.genericfile.GenericFile () Int) +(declare-fun elements_83.61.39 () Int) +(declare-fun RES_88.1_0_126.5_0_132.13_132.13 () Int) +(declare-fun T_javafe.ast.GenericVarDecl () Int) +(declare-fun T_javafe.ast.TypeDeclElem () Int) +(declare-fun InRange (Int Int) Bool) +(declare-fun loc_pre_18.18.13 () Int) +(declare-fun inst_pre_36.29.44 () Int) +(declare-fun MODIFIERPRAGMA_pre_56.25.26 () Int) +(declare-fun EC_88.1_0_126.5_0_140.27_140.27 () Int) +(declare-fun j_loopold_88.1_0_126.14 () Int) +(declare-fun msg_114.15_88.1_0_102.5_0_114.15_24.220.45 () Int) +(declare-fun EC_88.1_0_102.5_0_115.34_115.34 () Int) +(declare-fun modifiers_26.28.13 () Int) +(declare-fun CHARLIT_pre_57.41.26 () Int) +(declare-fun INTLIT_pre_57.39.26 () Int) +(declare-fun msg_56.6_56.6_16.69.34 () Int) +(declare-fun tmp9_cand_88.1_0_102.5_0_113.6 () Bool) +(declare-fun FIRST_KEYWORD_pre_56.51.26 () Int) +(declare-fun S_57.35 () Int) +(declare-fun refEQ (Int Int) Int) +(declare-fun NULL_pre_56.82.26 () Int) +(declare-fun T_javafe.ast.OperatorTags () Int) +(declare-fun EC_loopold () Int) +(declare-fun CHARLIT_57.41.26 () Int) +(declare-fun T_javafe.tc.TypeSig () Int) +(declare-fun EC_88.1_0_102.5_0_104.29_104.29 () Int) +(declare-fun elements_pre_83.61.39 () Int) +(declare-fun RES_88.1_0_102.5_0_114.15_114.15 () Int) +(declare-fun BOOLEANLIT_pre_57.38.26 () Int) +(declare-fun T_javafe.ast.ASTDecoration () Int) +(declare-fun RES_88.1_0_126.5_0_144.14_144.14 () Int) +(declare-fun IDENT_57.25.26 () Int) +(declare-fun T_javafe.ast.GeneratedTags () Int) +(declare-fun is (Int Int) Int) +(declare-fun EC_88.1_0_102.5_0_111.37_111.37 () Int) +(declare-fun locId_88.43.13 () Int) +(declare-fun T_javafe.ast.TypeDeclVec () Int) +(declare-fun integralEQ (Int Int) Int) +(declare-fun RES_104.21 () Int) +(declare-fun syntax_pre_21.28.29 () Int) +(declare-fun boolNE (Int Int) Bool) +(declare-fun EC_90.24_1_ () Int) +(declare-fun isNewArray (Int) Int) +(declare-fun S_117.9 () Int) +(declare-fun loc_144.14_88.1_0_126.5_0_144.14_15.152.36 () Int) +(declare-fun elems_pre () Int) +(declare-fun T_javafe.ast.Stmt () Int) +(declare-fun intShiftL (Int Int) Int) +(declare-fun nonnullelements (Int Int) Bool) +(declare-fun IDENT_pre_57.25.26 () Int) +(declare-fun multiply (Int Int) Int) +(declare-fun T_javafe.util.ErrorSet () Int) +(declare-fun RES_88.1_0_102.5_0_102.35_102.35 () Int) +(declare-fun integralGE (Int Int) Int) +(declare-fun EC_127.12 () Int) +(declare-fun count_83.67.33 () Int) +(declare-fun T_short () Int) +(declare-fun elements_25.61.37 () Int) +(declare-fun RES_88.1_0_102.5_0_114.24_114.24 () Int) +(declare-fun alloc_pre () Int) +(declare-fun loc_88.40.13 () Int) +(declare-fun integralGT (Int Int) Int) +(declare-fun EC () Int) +(declare-fun boolAnd (Int Int) Bool) +(declare-fun T_javafe.ast.Type () Int) +(declare-fun loc_26.45.13 () Int) +(declare-fun EC_1_ () Int) +(declare-fun T_javafe.tc.MethodDeclVec () Int) +(declare-fun arrayShapeOne (Int) Int) +(declare-fun T_double () Int) +(declare-fun EC_54.22_54.22 () Int) +(declare-fun after_54.22_54.22 () Int) +(declare-fun longShiftL (Int Int) Int) +(declare-fun T_java.io.Serializable () Int) +(declare-fun boolOr (Int Int) Bool) +(declare-fun N2_88.1_0_102.5_0_110.2 () Int) +(declare-fun int_4294967295 () Int) +(declare-fun modulo (Int Int) Int) +(declare-fun EC_88.1_0_126.5_0_144.29_144.29 () Int) +(declare-fun EC_2_ () Int) +(declare-fun EC_88.1_0_97.40_97.40 () Int) +(declare-fun EC_67.1_67.1 () Int) +(declare-fun locId_pre_88.43.13 () Int) +(declare-fun sigDecoration_pre_33.104.38 () Int) +(declare-fun C_88.1 () Int) +(declare-fun C_102.5 () Int) +(declare-fun loc_pre_26.45.13 () Int) +(declare-fun keywordStrings_pre_56.181.30 () Int) +(declare-fun locOpenBrace_97.22.13 () Int) +(declare-fun LONGLIT_pre_57.40.26 () Int) +(declare-fun RES_88.1_0_126.5_0_140.18_140.18 () Int) +(declare-fun count_pre_17.67.33 () Int) +(declare-fun RES_88.1_0_102.5_0_116.22_116.22 () Int) +(declare-fun EC_88.1_0_126.5_0_141.6_141.6 () Int) +(declare-fun EC_3_ () Int) +(declare-fun imports_6.25.37 () Int) +(declare-fun null () Int) +(declare-fun EC_56.6_56.6 () Int) +(declare-fun inst_36.29.44 () Int) +(declare-fun elements_pre_25.61.37 () Int) +(declare-fun j_88.1_0_126.5_0_126.35 () Int) +(declare-fun T_java.lang.Boolean () Int) +(declare-fun EC_52.5 () Int) +(declare-fun EC_88.1_0_126.5_0_136.27_136.27 () Int) +(declare-fun T_javafe.tc.FieldDeclVec () Int) +(declare-fun T_java.lang.String () Int) +(declare-fun EC_4_ () Int) +(declare-fun asField (Int Int) Int) +(declare-fun pkgName_6.21.14 () Int) +(declare-fun EC_88.1_0_102.5_1_102.35_102.35 () Int) +(declare-fun tmp9_cand_113.13 () Bool) +(declare-fun TYPEMODIFIERPRAGMA_pre_56.28.26 () Int) +(declare-fun elements_pre_82.61.38 () Int) +(declare-fun boolImplies (Int Int) Bool) +(declare-fun sigDecoration_33.104.38 () Int) +(declare-fun EC_5_ () Int) +(declare-fun integralLE (Int Int) Int) +(declare-fun RES_1_ () Int) +(declare-fun T_javafe.ast.ImportDeclVec () Int) +(declare-fun EC_61.1_61.1 () Int) +(declare-fun id_pre_26.32.34 () Int) +(declare-fun T_javafe.ast.CompilationUnit () Int) +(declare-fun RES_88.1_0_126.5_0_140.27_140.27 () Int) +(declare-fun tokenType_pre_23.90.8 () Int) +(declare-fun tmp22_88.1_0_126.5_0_141.3 () Int) +(declare-fun integralLT (Int Int) Int) +(declare-fun typeName_pre_19.15.32 () Int) +(declare-fun T_javafe.ast.SingleTypeImportDecl () Int) +(declare-fun count_25.67.33 () Int) +(declare-fun vAllocTime (Int) Int) +(declare-fun j_88.1_0_102.10 () Int) +(declare-fun EC_6_ () Int) +(declare-fun RES_88.1_0_102.5_0_115.34_115.34 () Int) +(declare-fun T_java.lang.Cloneable () Int) +(declare-fun RES_2_ () Int) +(declare-fun boolNot (Int) Bool) +(declare-fun refNE (Int Int) Int) +(declare-fun integralXor (Int Int) Int) +(declare-fun classDown (Int Int) Int) +(declare-fun N1_88.1_0_96.5 () Int) +(declare-fun T_javafe.util.Info () Int) +(declare-fun EC_7_ () Int) +(declare-fun integralNE (Int Int) Int) +(declare-fun RES_88.1_0_102.5_0_104.29_104.29 () Int) +(declare-fun RES_88.1_0_126.5_0_136.17_136.17 () Int) +(declare-fun RES_3_ () Int) +(declare-fun EC_88.1_0_126.5_1_126.27_126.27 () Int) +(declare-fun count_82.67.33 () Int) +(declare-fun STRINGLIT_pre_57.44.26 () Int) +(declare-fun RES_88.1_0_102.5_0_111.37_111.37 () Int) +(declare-fun tokenType_23.90.8 () Int) +(declare-fun arrayParent (Int) Int) +(declare-fun elemtype (Int) Int) +(declare-fun DOUBLELIT_57.43.26 () Int) +(declare-fun fClosedTime (Int) Int) +(declare-fun MODIFIERPRAGMA_56.25.26 () Int) +(declare-fun cu_48.60 () Int) +(declare-fun array (Int) Int) +(declare-fun EC_8_ () Int) +(declare-fun T_javafe.ast.RoutineDecl () Int) +(declare-fun T_javafe.util.Location () Int) +(declare-fun LS () Int) +(declare-fun RES_4_ () Int) +(declare-fun whereDecoration_35.597.41 () Int) +(declare-fun RES_88.1_0_90.32_90.32 () Int) +(declare-fun ecReturn () Int) +(declare-fun S_116.9 () Int) +(declare-fun EC_88.1_1_88.29_88.29 () Int) +(declare-fun isAllocated (Int Int) Bool) +(declare-fun elems () Int) +(declare-fun locCloseBrace_26.54.13 () Int) +(declare-fun subtypes (Int Int) Bool) +(declare-fun RES_88.1_0_88.29_88.29 () Int) +(declare-fun EC_9_ () Int) +(declare-fun RES_88.1_0_97.24_97.24 () Int) +(declare-fun LEXICALPRAGMA_56.24.26 () Int) +(declare-fun RES_5_ () Int) +(declare-fun RES_57.14_57.14 () Int) +(assert (subtypes T_javafe.ast.ImportDecl T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.ImportDecl (asChild T_javafe.ast.ImportDecl T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.ast.Type T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.Type (asChild T_javafe.ast.Type T_javafe.ast.ASTNode))) +(assert (subtypes T_java.util.EscjavaKeyValue T_java.lang.Object)) +(assert (subtypes T_javafe.ast.GenericVarDecl T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.GenericVarDecl (asChild T_javafe.ast.GenericVarDecl T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.tc.MethodDeclVec T_java.lang.Object)) +(assert (= T_javafe.tc.MethodDeclVec (asChild T_javafe.tc.MethodDeclVec T_java.lang.Object))) +(assert (subtypes T_javafe.genericfile.GenericFile T_java.lang.Object)) +(assert (subtypes T_java.io.Serializable T_java.lang.Object)) +(assert (subtypes T_javafe.ast.BlockStmt T_javafe.ast.GenericBlockStmt)) +(assert (= T_javafe.ast.BlockStmt (asChild T_javafe.ast.BlockStmt T_javafe.ast.GenericBlockStmt))) +(assert (subtypes T_javafe.ast.Name T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.Name (asChild T_javafe.ast.Name T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.ast.GenericBlockStmt T_javafe.ast.Stmt)) +(assert (= T_javafe.ast.GenericBlockStmt (asChild T_javafe.ast.GenericBlockStmt T_javafe.ast.Stmt))) +(assert (subtypes T_javafe.ast.TypeName T_javafe.ast.Type)) +(assert (= T_javafe.ast.TypeName (asChild T_javafe.ast.TypeName T_javafe.ast.Type))) +(assert (subtypes T_javafe.ast.GeneratedTags T_java.lang.Object)) +(assert (subtypes T_javafe.ast.CompilationUnit T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.CompilationUnit (asChild T_javafe.ast.CompilationUnit T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.ast.RoutineDecl T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.RoutineDecl (asChild T_javafe.ast.RoutineDecl T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.ast.RoutineDecl T_javafe.ast.TypeDeclElem)) +(assert (subtypes T_javafe.ast.ImportDeclVec T_java.lang.Object)) +(assert (= T_javafe.ast.ImportDeclVec (asChild T_javafe.ast.ImportDeclVec T_java.lang.Object))) +(assert (subtypes T_java.lang.Boolean T_java.lang.Object)) +(assert (= T_java.lang.Boolean (asChild T_java.lang.Boolean T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_java.lang.Boolean) (= ?t T_java.lang.Boolean)) :pattern ((subtypes ?t T_java.lang.Boolean)) ))) +(assert (subtypes T_java.lang.Boolean T_java.io.Serializable)) +(assert (subtypes T_javafe.ast.PrettyPrint T_java.lang.Object)) +(assert (= T_javafe.ast.PrettyPrint (asChild T_javafe.ast.PrettyPrint T_java.lang.Object))) +(assert (subtypes T_javafe.tc.CheckCompilationUnit T_java.lang.Object)) +(assert (= T_javafe.tc.CheckCompilationUnit (asChild T_javafe.tc.CheckCompilationUnit T_java.lang.Object))) +(assert (subtypes T_javafe.ast.Stmt T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.Stmt (asChild T_javafe.ast.Stmt T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.parser.TagConstants T_javafe.ast.TagConstants)) +(assert (= T_javafe.parser.TagConstants (asChild T_javafe.parser.TagConstants T_javafe.ast.TagConstants))) +(assert (subtypes T_java.util.Hashtable T_java.util.Dictionary)) +(assert (= T_java.util.Hashtable (asChild T_java.util.Hashtable T_java.util.Dictionary))) +(assert (subtypes T_java.util.Hashtable T_java.util.Map)) +(assert (subtypes T_java.util.Hashtable T_java.lang.Cloneable)) +(assert (subtypes T_java.util.Hashtable T_java.io.Serializable)) +(assert (subtypes T_javafe.util.ErrorSet T_java.lang.Object)) +(assert (= T_javafe.util.ErrorSet (asChild T_javafe.util.ErrorSet T_java.lang.Object))) +(assert (subtypes T_javafe.util.Info T_java.lang.Object)) +(assert (= T_javafe.util.Info (asChild T_javafe.util.Info T_java.lang.Object))) +(assert (subtypes T_java.lang.Comparable T_java.lang.Object)) +(assert (subtypes T_javafe.ast.TypeDeclElem T_java.lang.Object)) +(assert (subtypes T_javafe.ast.Modifiers T_java.lang.Object)) +(assert (= T_javafe.ast.Modifiers (asChild T_javafe.ast.Modifiers T_java.lang.Object))) +(assert (subtypes T_java.lang.Cloneable T_java.lang.Object)) +(assert (subtypes T_javafe.filespace.Extension T_java.lang.Object)) +(assert (= T_javafe.filespace.Extension (asChild T_javafe.filespace.Extension T_java.lang.Object))) +(assert (subtypes T_javafe.ast.TypeDeclVec T_java.lang.Object)) +(assert (= T_javafe.ast.TypeDeclVec (asChild T_javafe.ast.TypeDeclVec T_java.lang.Object))) +(assert (subtypes T_javafe.ast.OperatorTags T_java.lang.Object)) +(assert (= T_javafe.ast.OperatorTags (asChild T_javafe.ast.OperatorTags T_java.lang.Object))) +(assert (subtypes T_javafe.ast.OperatorTags T_javafe.ast.GeneratedTags)) +(assert (subtypes T_javafe.ast.ASTDecoration T_java.lang.Object)) +(assert (= T_javafe.ast.ASTDecoration (asChild T_javafe.ast.ASTDecoration T_java.lang.Object))) +(assert (subtypes T_javafe.ast.TagConstants T_javafe.ast.OperatorTags)) +(assert (= T_javafe.ast.TagConstants (asChild T_javafe.ast.TagConstants T_javafe.ast.OperatorTags))) +(assert (subtypes T_java.lang.String T_java.lang.Object)) +(assert (= T_java.lang.String (asChild T_java.lang.String T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_java.lang.String) (= ?t T_java.lang.String)) :pattern ((subtypes ?t T_java.lang.String)) ))) +(assert (subtypes T_java.lang.String T_java.io.Serializable)) +(assert (subtypes T_java.lang.String T_java.lang.Comparable)) +(assert (subtypes T_javafe.tc.Env T_java.lang.Object)) +(assert (= T_javafe.tc.Env (asChild T_javafe.tc.Env T_java.lang.Object))) +(assert (subtypes T_javafe.ast.FieldDecl T_javafe.ast.GenericVarDecl)) +(assert (= T_javafe.ast.FieldDecl (asChild T_javafe.ast.FieldDecl T_javafe.ast.GenericVarDecl))) +(assert (subtypes T_javafe.ast.FieldDecl T_javafe.ast.TypeDeclElem)) +(assert (subtypes T_javafe.ast.ASTNode T_java.lang.Object)) +(assert (= T_javafe.ast.ASTNode (asChild T_javafe.ast.ASTNode T_java.lang.Object))) +(assert (subtypes T_javafe.ast.ASTNode T_java.lang.Cloneable)) +(assert (subtypes T_javafe.ast.Identifier T_java.lang.Object)) +(assert (= T_javafe.ast.Identifier (asChild T_javafe.ast.Identifier T_java.lang.Object))) +(assert (forall ((?t Int)) (! (= (subtypes ?t T_javafe.ast.Identifier) (= ?t T_javafe.ast.Identifier)) :pattern ((subtypes ?t T_javafe.ast.Identifier)) ))) +(assert (subtypes T_javafe.ast.MethodDecl T_javafe.ast.RoutineDecl)) +(assert (= T_javafe.ast.MethodDecl (asChild T_javafe.ast.MethodDecl T_javafe.ast.RoutineDecl))) +(assert (subtypes T_javafe.ast.TypeDecl T_javafe.ast.ASTNode)) +(assert (= T_javafe.ast.TypeDecl (asChild T_javafe.ast.TypeDecl T_javafe.ast.ASTNode))) +(assert (subtypes T_javafe.ast.TypeDecl T_javafe.ast.TypeDeclElem)) +(assert (subtypes T_java.util.Map T_java.lang.Object)) +(assert (subtypes T_java.util.Map T_java.util.EscjavaKeyValue)) +(assert (subtypes T_javafe.tc.TypeSig T_javafe.ast.Type)) +(assert (= T_javafe.tc.TypeSig (asChild T_javafe.tc.TypeSig T_javafe.ast.Type))) +(assert (subtypes T_javafe.tc.FieldDeclVec T_java.lang.Object)) +(assert (= T_javafe.tc.FieldDeclVec (asChild T_javafe.tc.FieldDeclVec T_java.lang.Object))) +(assert (subtypes T_javafe.tc.EnvForCU T_javafe.tc.Env)) +(assert (= T_javafe.tc.EnvForCU (asChild T_javafe.tc.EnvForCU T_javafe.tc.Env))) +(assert (subtypes T_javafe.util.Location T_java.lang.Object)) +(assert (= T_javafe.util.Location (asChild T_javafe.util.Location T_java.lang.Object))) +(assert (subtypes T_javafe.ast.SingleTypeImportDecl T_javafe.ast.ImportDecl)) +(assert (= T_javafe.ast.SingleTypeImportDecl (asChild T_javafe.ast.SingleTypeImportDecl T_javafe.ast.ImportDecl))) +(assert (subtypes T_java.util.Dictionary T_java.lang.Object)) +(assert (= T_java.util.Dictionary (asChild T_java.util.Dictionary T_java.lang.Object))) +(assert (subtypes T_java.util.Dictionary T_java.util.EscjavaKeyValue)) +(assert (distinct arrayType T_boolean T_char T_byte T_short T_int T_long T_float T_double T_.TYPE T_javafe.ast.ImportDecl T_javafe.ast.Type T_java.util.EscjavaKeyValue T_javafe.ast.GenericVarDecl T_javafe.tc.MethodDeclVec T_javafe.genericfile.GenericFile T_java.io.Serializable T_javafe.ast.BlockStmt T_javafe.ast.Name T_javafe.ast.GenericBlockStmt T_javafe.ast.TypeName T_javafe.ast.GeneratedTags T_javafe.ast.CompilationUnit T_javafe.ast.RoutineDecl T_javafe.ast.ImportDeclVec T_java.lang.Boolean T_javafe.ast.PrettyPrint T_javafe.tc.CheckCompilationUnit T_javafe.ast.Stmt T_javafe.parser.TagConstants T_java.util.Hashtable T_javafe.util.ErrorSet T_javafe.util.Info T_java.lang.Comparable T_javafe.ast.TypeDeclElem T_javafe.ast.Modifiers T_java.lang.Cloneable T_javafe.filespace.Extension T_javafe.ast.TypeDeclVec T_javafe.ast.OperatorTags T_javafe.ast.ASTDecoration T_javafe.ast.TagConstants T_java.lang.String T_javafe.tc.Env T_javafe.ast.FieldDecl T_javafe.ast.ASTNode T_javafe.ast.Identifier T_javafe.ast.MethodDecl T_javafe.ast.TypeDecl T_java.util.Map T_javafe.tc.TypeSig T_javafe.tc.FieldDeclVec T_javafe.tc.EnvForCU T_javafe.util.Location T_java.lang.Object T_javafe.ast.SingleTypeImportDecl T_java.util.Dictionary)) +(assert (= Smt.true (is NULL_56.82.26 T_int))) +(assert (= NULL_56.82.26 163)) +(assert (= Smt.true (is TYPEMODIFIERPRAGMA_56.28.26 T_int))) +(assert (= TYPEMODIFIERPRAGMA_56.28.26 118)) +(assert (= Smt.true (is STRINGLIT_57.44.26 T_int))) +(assert (= STRINGLIT_57.44.26 110)) +(assert (= Smt.true (is IDENT_57.25.26 T_int))) +(assert (= IDENT_57.25.26 93)) +(assert (= Smt.true (is otherCodes_56.202.27 (array T_int)))) +(assert (not (= otherCodes_56.202.27 null))) +(assert (= (typeof otherCodes_56.202.27) (array T_int))) +(assert (= (arrayLength otherCodes_56.202.27) 15)) +(assert (= Smt.true (is LAST_KEYWORD_56.103.26 T_int))) +(assert (= LAST_KEYWORD_56.103.26 183)) +(assert (= Smt.true (is punctuationStrings_56.134.22 (array T_java.lang.String)))) +(assert (not (= punctuationStrings_56.134.22 null))) +(assert (= (typeof punctuationStrings_56.134.22) (array T_java.lang.String))) +(assert (= (arrayLength punctuationStrings_56.134.22) 48)) +(assert (= Smt.true (is punctuationCodes_56.164.19 (array T_int)))) +(assert (not (= punctuationCodes_56.164.19 null))) +(assert (= (typeof punctuationCodes_56.164.19) (array T_int))) +(assert (= (arrayLength punctuationCodes_56.164.19) 48)) +(assert (= Smt.true (is whereDecoration_35.597.41 T_javafe.ast.ASTDecoration))) +(assert (not (= whereDecoration_35.597.41 null))) +(assert (= (typeof whereDecoration_35.597.41) T_javafe.ast.ASTDecoration)) +(assert (= Smt.true (is noTokens_56.212.27 T_int))) +(assert (= Smt.true (is LEXICALPRAGMA_56.24.26 T_int))) +(assert (= LEXICALPRAGMA_56.24.26 114)) +(assert (= Smt.true (is LONGLIT_57.40.26 T_int))) +(assert (= LONGLIT_57.40.26 106)) +(assert (= Smt.true (is sigDecoration_33.104.38 T_javafe.ast.ASTDecoration))) +(assert (not (= sigDecoration_33.104.38 null))) +(assert (= (typeof sigDecoration_33.104.38) T_javafe.ast.ASTDecoration)) +(assert (= Smt.true (is TYPEDECLELEMPRAGMA_56.27.26 T_int))) +(assert (= TYPEDECLELEMPRAGMA_56.27.26 117)) +(assert (= Smt.true (is NULL_15.60.26 T_int))) +(assert (= NULL_15.60.26 0)) +(assert (= Smt.true (is DOUBLELIT_57.43.26 T_int))) +(assert (= DOUBLELIT_57.43.26 109)) +(assert (= Smt.true (is FIRST_KEYWORD_56.51.26 T_int))) +(assert (= FIRST_KEYWORD_56.51.26 133)) +(assert (= Smt.true (is INTLIT_57.39.26 T_int))) +(assert (= INTLIT_57.39.26 105)) +(assert (= Smt.true (is STMTPRAGMA_56.26.26 T_int))) +(assert (= STMTPRAGMA_56.26.26 116)) +(assert (= Smt.true (is keywordStrings_56.181.30 (array T_java.lang.String)))) +(assert (not (= keywordStrings_56.181.30 null))) +(assert (= (typeof keywordStrings_56.181.30) (array T_java.lang.String))) +(assert (= (arrayLength keywordStrings_56.181.30) 51)) +(assert (= Smt.true (is FLOATLIT_57.42.26 T_int))) +(assert (= FLOATLIT_57.42.26 108)) +(assert (= Smt.true (is BOOLEANLIT_57.38.26 T_int))) +(assert (= BOOLEANLIT_57.38.26 104)) +(assert (= Smt.true (is otherStrings_56.193.30 (array T_java.lang.String)))) +(assert (not (= otherStrings_56.193.30 null))) +(assert (= (typeof otherStrings_56.193.30) (array T_java.lang.String))) +(assert (= (arrayLength otherStrings_56.193.30) 15)) +(assert (= Smt.true (is MODIFIERPRAGMA_56.25.26 T_int))) +(assert (= MODIFIERPRAGMA_56.25.26 115)) +(assert (= Smt.true (is CHARLIT_57.41.26 T_int))) +(assert (= CHARLIT_57.41.26 107)) +(assert (forall ((?n Int)) (! (=> (and (<= 0 ?n) (< ?n 63)) (<= 1 (longShiftL 1 ?n))) :pattern ((longShiftL 1 ?n)) ))) +(assert (forall ((?n Int)) (! (=> (and (<= 0 ?n) (< ?n 31)) (<= 1 (intShiftL 1 ?n))) :pattern ((intShiftL 1 ?n)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (and (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralXor ?x ?y))) :pattern ((integralXor ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (integralDiv ?x ?y))) (=> (and (<= 0 ?x) (< 0 ?y)) (and (<= 0 ?v_0) (<= ?v_0 ?x)))) :pattern ((integralDiv ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (integralOr ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= ?x ?v_0) (<= ?y ?v_0)))) :pattern ((integralOr ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (<= 0 ?y) (<= (integralAnd ?x ?y) ?y)) :pattern ((integralAnd ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (<= 0 ?x) (<= (integralAnd ?x ?y) ?x)) :pattern ((integralAnd ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralAnd ?x ?y))) :pattern ((integralAnd ?x ?y)) ))) +(assert (forall ((?t Int)) (! (let ((?v_0 (classLiteral ?t))) (and (not (= ?v_0 null)) (= Smt.true (is ?v_0 T_java.lang.Class)) (isAllocated ?v_0 alloc))) :pattern ((classLiteral ?t)) ))) +(assert (forall ((?x Int) (?e Int)) (= (nonnullelements ?x ?e) (and (not (= ?x null)) (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i (arrayLength ?x))) (not (= (select1 (select1 ?e ?x) ?i) null)))))))) +(assert (forall ((?b Int) (?x Int) (?y Int)) (! (=> (not (= ?b Smt.true)) (= (termConditional ?b ?x ?y) ?y)) :pattern ((termConditional ?b ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (termConditional Smt.true ?x ?y) ?x) :pattern ((termConditional Smt.true ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (refNE ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((refNE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (refEQ ?x ?y) Smt.true) (= ?x ?y)) :pattern ((refEQ ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralNE ?x ?y) Smt.true) (not (= ?x ?y))) :pattern ((integralNE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralLT ?x ?y) Smt.true) (< ?x ?y)) :pattern ((integralLT ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralLE ?x ?y) Smt.true) (<= ?x ?y)) :pattern ((integralLE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralGT ?x ?y) Smt.true) (> ?x ?y)) :pattern ((integralGT ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralGE ?x ?y) Smt.true) (>= ?x ?y)) :pattern ((integralGE ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (let ((?v_0 (stringCat ?x ?y))) (and (not (= ?v_0 null)) (subtypes (typeof ?v_0) T_java.lang.String))) :pattern ((stringCat ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (integralEQ ?x ?y) Smt.true) (= ?x ?y)) :pattern ((integralEQ ?x ?y)) ))) +(assert (forall ((?a Int) (?b Int)) (= (boolOr ?a ?b) (or (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?a Int)) (= (boolNot ?a) (not (= ?a Smt.true))))) +(assert (forall ((?a Int) (?b Int)) (= (boolNE ?a ?b) (not (= (= ?a Smt.true) (= ?b Smt.true)))))) +(assert (forall ((?a Int) (?b Int)) (= (boolImplies ?a ?b) (=> (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?a Int) (?b Int)) (= (boolEq ?a ?b) (= (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?a Int) (?b Int)) (= (boolAnd ?a ?b) (and (= ?a Smt.true) (= ?b Smt.true))))) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (multiply ?x ?y))) (= (multiply (integralDiv ?v_0 ?y) ?y) ?v_0)))) +(assert (forall ((?i Int) (?j Int)) (= (integralMod (+ ?j ?i) ?j) (integralMod ?i ?j)))) +(assert (forall ((?i Int) (?j Int)) (= (integralMod (+ ?i ?j) ?j) (integralMod ?i ?j)))) +(assert (forall ((?i Int) (?j Int)) (! (let ((?v_0 (integralMod ?i ?j))) (=> (< ?j 0) (and (< ?j ?v_0) (<= ?v_0 0)))) :pattern ((integralMod ?i ?j)) ))) +(assert (forall ((?i Int) (?j Int)) (! (let ((?v_0 (integralMod ?i ?j))) (=> (< 0 ?j) (and (<= 0 ?v_0) (< ?v_0 ?j)))) :pattern ((integralMod ?i ?j)) ))) +(assert (forall ((?i Int) (?j Int)) (! (= (+ (multiply (integralDiv ?i ?j) ?j) (integralMod ?i ?j)) ?i) :pattern ((integralMod ?i ?j)) :pattern ((integralDiv ?i ?j)) ))) +(assert (forall ((?s Int)) (! (=> (= Smt.true (isNewArray ?s)) (subtypes (typeof ?s) arrayType)) :pattern ((isNewArray ?s)) ))) +(assert (forall ((?t Int)) (! (subtypes (array ?t) arrayType) :pattern ((array ?t)) ))) +(assert (= arrayType (asChild arrayType T_java.lang.Object))) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?T Int) (?v Int)) (! (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v) (and (<= ?a0 (vAllocTime ?a)) (isAllocated ?a ?b0) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (! (= (select1 (select1 ?e ?a) ?i) ?v) :pattern ((select1 (select1 ?e ?a) ?i)) )))) :pattern ((arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v)) ))) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?s Int) (?T Int) (?v Int)) (! (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v) (and (<= ?a0 (vAllocTime ?a)) (isAllocated ?a ?b0) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (! (let ((?v_0 (select1 (select1 ?e ?a) ?i))) (and (arrayFresh ?v_0 ?a0 ?b0 ?e ?s (elemtype ?T) ?v) (= (arrayParent ?v_0) ?a) (= (arrayPosition ?v_0) ?i))) :pattern ((select1 (select1 ?e ?a) ?i)) )))) :pattern ((arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v)) ))) +(assert (forall ((?a Int)) (! (let ((?v_0 (arrayLength ?a))) (and (<= 0 ?v_0) (= Smt.true (is ?v_0 T_int)))) :pattern ((arrayLength ?a)) ))) +(assert (forall ((?x Int)) (! (=> (subtypes (typeof ?x) T_java.lang.Object) (lockLE null ?x)) :pattern ((lockLE null ?x)) :pattern ((lockLT null ?x)) :pattern ((lockLE ?x null)) :pattern ((lockLT ?x null)) ))) +(assert (forall ((?S Int) (?mu Int)) (let ((?v_0 (asLockSet ?S))) (=> (= (select1 ?v_0 ?mu) Smt.true) (lockLE ?mu (max ?v_0)))))) +(assert (forall ((?x Int) (?y Int)) (= (lockLT ?x ?y) (< ?x ?y)))) +(assert (forall ((?x Int) (?y Int)) (= (lockLE ?x ?y) (<= ?x ?y)))) +(assert (forall ((?S Int)) (! (= (select1 (asLockSet ?S) null) Smt.true) :pattern ((asLockSet ?S)) ))) +(assert (forall ((?S Int)) (let ((?v_0 (asLockSet ?S))) (= (select1 ?v_0 (max ?v_0)) Smt.true)))) +(assert (forall ((?a Int) (?e Int) (?i Int) (?a0 Int)) (! (=> (and (< (eClosedTime ?e) ?a0) (isAllocated ?a ?a0)) (isAllocated (select1 (select1 ?e ?a) ?i) ?a0)) :pattern ((isAllocated (select1 (select1 ?e ?a) ?i) ?a0)) ))) +(assert (forall ((?x Int) (?f Int) (?a0 Int)) (! (=> (and (< (fClosedTime ?f) ?a0) (isAllocated ?x ?a0)) (isAllocated (select1 ?f ?x) ?a0)) :pattern ((isAllocated (select1 ?f ?x) ?a0)) ))) +(assert (forall ((?x Int) (?a0 Int)) (= (isAllocated ?x ?a0) (< (vAllocTime ?x) ?a0)))) +(assert (forall ((?e Int) (?a Int) (?i Int)) (! (= Smt.true (is (select1 (select1 (asElems ?e) ?a) ?i) (elemtype (typeof ?a)))) :pattern ((select1 (select1 (asElems ?e) ?a) ?i)) ))) +(assert (forall ((?f Int) (?t Int) (?x Int)) (! (= Smt.true (is (select1 (asField ?f ?t) ?x) ?t)) :pattern ((select1 (asField ?f ?t) ?x)) ))) +(assert (forall ((?x Int) (?t Int)) (! (=> (subtypes ?t T_java.lang.Object) (= (= Smt.true (is ?x ?t)) (or (= ?x null) (subtypes (typeof ?x) ?t)))) :pattern ((subtypes ?t T_java.lang.Object) (is ?x ?t)) ))) +(assert (< intLast longLast)) +(assert (< 1000000 intLast)) +(assert (< intFirst (- 1000000))) +(assert (< longFirst intFirst)) +(assert (forall ((?x Int)) (! (= (= Smt.true (is ?x T_long)) (and (<= longFirst ?x) (<= ?x longLast))) :pattern ((is ?x T_long)) ))) +(assert (forall ((?x Int)) (! (= (= Smt.true (is ?x T_int)) (and (<= intFirst ?x) (<= ?x intLast))) :pattern ((is ?x T_int)) ))) +(assert (forall ((?x Int)) (= (= Smt.true (is ?x T_short)) (and (<= (- 32768) ?x) (<= ?x 32767))))) +(assert (forall ((?x Int)) (= (= Smt.true (is ?x T_byte)) (and (<= (- 128) ?x) (<= ?x 127))))) +(assert (forall ((?x Int)) (! (= (= Smt.true (is ?x T_char)) (and (<= 0 ?x) (<= ?x 65535))) :pattern ((is ?x T_char)) ))) +(assert (distinct bool_false Smt.true)) +(assert (forall ((?x Int) (?t Int)) (! (=> (= Smt.true (is ?x ?t)) (= (cast ?x ?t) ?x)) :pattern ((cast ?x ?t)) ))) +(assert (forall ((?x Int) (?t Int)) (! (= Smt.true (is (cast ?x ?t) ?t)) :pattern ((cast ?x ?t)) ))) +(assert (forall ((?t0 Int) (?t1 Int)) (! (let ((?v_0 (elemtype ?t0))) (= (subtypes ?t0 (array ?t1)) (and (= ?t0 (array ?v_0)) (subtypes ?v_0 ?t1)))) :pattern ((subtypes ?t0 (array ?t1))) ))) +(assert (forall ((?t Int)) (! (= (elemtype (array ?t)) ?t) :pattern ((elemtype (array ?t))) ))) +(assert (forall ((?t Int)) (! (subtypes (array ?t) T_java.lang.Cloneable) :pattern ((array ?t)) ))) +(assert (subtypes T_java.lang.Cloneable T_java.lang.Object)) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (let ((?v_0 (asChild ?t1 ?t2))) (=> (subtypes ?t0 ?v_0) (= (classDown ?t2 ?t0) ?v_0))))) +(assert (forall ((?t Int)) (! (=> (subtypes T_double ?t) (= ?t T_double)) :pattern ((subtypes T_double ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_float ?t) (= ?t T_float)) :pattern ((subtypes T_float ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_long ?t) (= ?t T_long)) :pattern ((subtypes T_long ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_int ?t) (= ?t T_int)) :pattern ((subtypes T_int ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_short ?t) (= ?t T_short)) :pattern ((subtypes T_short ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_byte ?t) (= ?t T_byte)) :pattern ((subtypes T_byte ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_char ?t) (= ?t T_char)) :pattern ((subtypes T_char ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes T_boolean ?t) (= ?t T_boolean)) :pattern ((subtypes T_boolean ?t)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_double) (= ?t T_double)) :pattern ((subtypes ?t T_double)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_float) (= ?t T_float)) :pattern ((subtypes ?t T_float)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_long) (= ?t T_long)) :pattern ((subtypes ?t T_long)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_int) (= ?t T_int)) :pattern ((subtypes ?t T_int)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_short) (= ?t T_short)) :pattern ((subtypes ?t T_short)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_byte) (= ?t T_byte)) :pattern ((subtypes ?t T_byte)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_char) (= ?t T_char)) :pattern ((subtypes ?t T_char)) ))) +(assert (forall ((?t Int)) (! (=> (subtypes ?t T_boolean) (= ?t T_boolean)) :pattern ((subtypes ?t T_boolean)) ))) +(assert (forall ((?t0 Int) (?t1 Int)) (! (=> (and (subtypes ?t0 ?t1) (subtypes ?t1 ?t0)) (= ?t0 ?t1)) :pattern ((subtypes ?t0 ?t1) (subtypes ?t1 ?t0)) ))) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (! (=> (and (subtypes ?t0 ?t1) (subtypes ?t1 ?t2)) (subtypes ?t0 ?t2)) :pattern ((subtypes ?t0 ?t1) (subtypes ?t1 ?t2)) ))) +(assert (subtypes T_java.lang.Object T_java.lang.Object)) +(assert (forall ((?t Int)) (! (subtypes ?t ?t) :pattern ((subtypes ?t ?t)) ))) +(assert (forall ((?m Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (select1 (store1 ?m ?i ?x) ?j) (select1 ?m ?j))))) +(assert (forall ((?m Int) (?i Int) (?x Int)) (= (select1 (store1 ?m ?i ?x) ?i) ?x))) +(assert (let ((?v_0 (array T_int)) (?v_1 (array T_java.lang.String)) (?v_4 (arrayLength punctuationStrings_56.134.22)) (?v_3 (arrayLength keywordStrings_56.181.30)) (?v_5 (arrayLength otherStrings_56.193.30)) (?v_7 (not (= cu_48.60 null))) (?v_2 (select1 owner_4.35.28 punctuationCodes_56.164.19)) (?v_9 (select1 decorationType_5.48.27 checkedField_30.33)) (?v_6 (not (= checkedField_30.33 null)))) (let ((?v_10 (not ?v_6)) (?v_11 (not ?v_7)) (?v_173 (= Smt.true (is RES_52.18_52.18 T_java.lang.Object))) (?v_174 (isAllocated RES_52.18_52.18 alloc)) (?v_8 (= EC_52.18_52.18 ecReturn))) (let ((?v_175 (=> ?v_8 (subtypes (typeof RES_52.18_52.18) ?v_9))) (?v_202 (not (= RES_52.18_52.18 null)))) (let ((?v_176 (not ?v_202)) (?v_17 (= Smt.true Smt.true)) (?v_177 (< alloc after_54.22_54.22)) (?v_178 (not (= RES_54.22_54.22 null))) (?v_179 (not (isAllocated RES_54.22_54.22 alloc))) (?v_180 (= Smt.true (is RES_54.22_54.22 T_java.lang.Boolean))) (?v_181 (isAllocated RES_54.22_54.22 after_54.22_54.22)) (?v_182 (= EC_54.22_54.22 ecReturn)) (?v_183 (= (select1 owner_4.35.28 RES_54.22_54.22) null)) (?v_12 (typeof RES_54.22_54.22))) (let ((?v_184 (= ?v_12 T_java.lang.Boolean)) (?v_13 (subtypes ?v_12 ?v_9)) (?v_185 (= EC_54.14_54.14 ecReturn)) (?v_14 (= loc_57.14_57.14_15.98.40 (select1 loc_6.30.13 cu_48.60))) (?v_15 (not (= loc_57.14_57.14_15.98.40 NULL_15.60.26))) (?v_186 (= Smt.true (is RES_57.14_57.14 T_java.lang.String))) (?v_187 (isAllocated RES_57.14_57.14 after_54.22_54.22)) (?v_16 (= EC_57.14_57.14 ecReturn))) (let ((?v_188 (=> ?v_16 (not (= RES_57.14_57.14 null)))) (?v_189 (= msg_56.6_56.6_16.69.34 (stringCat (stringCat S_56.10 RES_57.14_57.14) S_57.35))) (?v_190 (= EC_56.6_56.6 ecReturn)) (?v_191 (= EC_61.1_61.1 ecReturn)) (?v_192 (= EC_67.1_67.1 ecReturn)) (?v_193 (= imports_76.1 (select1 imports_6.25.37 cu_48.60))) (?v_194 (= elems_77.1 (select1 elems_6.27.35 cu_48.60))) (?v_195 (= EC_67.1_67.1 EC_loopold)) (?v_196 (= 0 i_loopold_88.10)) (?v_18 (not (= imports_76.1 null)))) (let ((?v_20 (not ?v_18)) (?v_149 (= Smt.true (is RES_88.1_0_88.29_88.29 T_int))) (?v_19 (= EC_88.1_0_88.29_88.29 ecReturn)) (?v_21 (select1 count_17.67.33 imports_76.1))) (let ((?v_150 (=> ?v_19 (= RES_88.1_0_88.29_88.29 ?v_21))) (?v_151 (< 0 RES_88.1_0_88.29_88.29)) (?v_48 (<= 0 0)) (?v_152 (= Smt.true (is RES_88.1_0_90.32_90.32 T_javafe.ast.ImportDecl))) (?v_153 (isAllocated RES_88.1_0_90.32_90.32 after_54.22_54.22)) (?v_22 (= EC_88.1_0_90.32_90.32 ecReturn)) (?v_23 (not (= RES_88.1_0_90.32_90.32 null)))) (let ((?v_154 (=> ?v_22 ?v_23)) (?v_24 (= Smt.true (is RES_88.1_0_90.32_90.32 T_javafe.ast.SingleTypeImportDecl))) (?v_26 (cast RES_88.1_0_90.32_90.32 T_javafe.ast.SingleTypeImportDecl))) (let ((?v_25 (not (= ?v_26 null))) (?v_155 (= N1_88.1_0_96.5 (select1 name_20.18.28 (select1 typeName_19.15.32 ?v_26)))) (?v_27 (not (= N1_88.1_0_96.5 null)))) (let ((?v_29 (not ?v_27)) (?v_156 (= Smt.true (is RES_88.1_0_97.40_97.40 T_int))) (?v_28 (= EC_88.1_0_97.40_97.40 ecReturn)) (?v_30 (select1 length_22.50.25 N1_88.1_0_96.5))) (let ((?v_157 (=> ?v_28 (= RES_88.1_0_97.40_97.40 ?v_30))) (?v_31 (= i_97.24_88.1_0_97.24_22.62.48 (- RES_88.1_0_97.40_97.40 1))) (?v_158 (= Smt.true (is RES_88.1_0_97.24_97.24 T_javafe.ast.Identifier))) (?v_159 (isAllocated RES_88.1_0_97.24_97.24 after_54.22_54.22)) (?v_32 (= EC_88.1_0_97.24_97.24 ecReturn))) (let ((?v_160 (=> ?v_32 (not (= RES_88.1_0_97.24_97.24 null)))) (?v_148 (+ 0 1))) (let ((?v_77 (= j_88.1_0_102.10 ?v_148)) (?v_78 (= EC_88.1_0_97.24_97.24 EC_loopold_88.1_0)) (?v_79 (= j_88.1_0_102.10 j_loopold_88.1_0_102.14)) (?v_53 (= Smt.true (is RES_88.1_0_102.5_0_102.35_102.35 T_int))) (?v_33 (= EC_88.1_0_102.5_0_102.35_102.35 ecReturn))) (let ((?v_54 (=> ?v_33 (= RES_88.1_0_102.5_0_102.35_102.35 ?v_21))) (?v_55 (< j_88.1_0_102.10 RES_88.1_0_102.5_0_102.35_102.35)) (?v_56 (= Smt.true (is RES_88.1_0_102.5_0_104.29_104.29 T_javafe.ast.ImportDecl))) (?v_57 (isAllocated RES_88.1_0_102.5_0_104.29_104.29 after_54.22_54.22)) (?v_34 (= EC_88.1_0_102.5_0_104.29_104.29 ecReturn)) (?v_35 (not (= RES_88.1_0_102.5_0_104.29_104.29 null)))) (let ((?v_58 (=> ?v_34 ?v_35)) (?v_36 (= Smt.true (is RES_88.1_0_102.5_0_104.29_104.29 T_javafe.ast.SingleTypeImportDecl))) (?v_38 (cast RES_88.1_0_102.5_0_104.29_104.29 T_javafe.ast.SingleTypeImportDecl))) (let ((?v_37 (not (= ?v_38 null))) (?v_59 (= N2_88.1_0_102.5_0_110.2 (select1 name_20.18.28 (select1 typeName_19.15.32 ?v_38)))) (?v_47 (= N2_88.1_0_102.5_0_110.2 null))) (let ((?v_39 (not ?v_47))) (let ((?v_41 (not ?v_39)) (?v_60 (= Smt.true (is RES_88.1_0_102.5_0_111.37_111.37 T_int))) (?v_40 (= EC_88.1_0_102.5_0_111.37_111.37 ecReturn)) (?v_42 (select1 length_22.50.25 N2_88.1_0_102.5_0_110.2))) (let ((?v_61 (=> ?v_40 (= RES_88.1_0_102.5_0_111.37_111.37 ?v_42))) (?v_43 (= i_111.21_88.1_0_102.5_0_111.21_22.62.48 (- RES_88.1_0_102.5_0_111.37_111.37 1))) (?v_62 (= Smt.true (is RES_88.1_0_102.5_0_111.21_111.21 T_javafe.ast.Identifier))) (?v_63 (isAllocated RES_88.1_0_102.5_0_111.21_111.21 after_54.22_54.22)) (?v_44 (= EC_88.1_0_102.5_0_111.21_111.21 ecReturn))) (let ((?v_64 (=> ?v_44 (not (= RES_88.1_0_102.5_0_111.21_111.21 null)))) (?v_45 (= RES_88.1_0_97.24_97.24 RES_88.1_0_102.5_0_111.21_111.21)) (?v_46 (= EC_88.1_0_102.5_0_113.21_113.21 ecReturn))) (let ((?v_65 (or (and ?v_45 ?v_27 (= Smt.true (is RES_88.1_0_102.5_0_113.21_113.21 T_boolean)) ?v_46 (=> (and ?v_46 ?v_47) (not (= Smt.true RES_88.1_0_102.5_0_113.21_113.21))) (= tmp9_cand_88.1_0_102.5_0_113.6 (boolNot RES_88.1_0_102.5_0_113.21_113.21)) (= RES RES_88.1_0_102.5_0_113.21_113.21) (= EC EC_88.1_0_102.5_0_113.21_113.21) (= tmp9_cand_113.13 tmp9_cand_88.1_0_102.5_0_113.6)) (and (not ?v_45) ?v_17 (= RES RES_88.1_0_102.5_0_111.21_111.21) (= EC EC_88.1_0_102.5_0_111.21_111.21) (= tmp9_cand_113.13 (= Smt.true bool_false))))) (?v_110 (not (and ?v_48 (< 0 ?v_30)))) (?v_66 (= Smt.true (is RES_88.1_0_102.5_0_114.24_114.24 T_int))) (?v_49 (= EC_88.1_0_102.5_0_114.24_114.24 ecReturn)) (?v_52 (not (= RES_88.1_0_102.5_0_114.24_114.24 NULL_15.60.26)))) (let ((?v_67 (=> ?v_49 ?v_52)) (?v_68 (= Smt.true (is RES_88.1_0_102.5_0_115.34_115.34 T_java.lang.String))) (?v_69 (isAllocated RES_88.1_0_102.5_0_115.34_115.34 after_54.22_54.22)) (?v_50 (= EC_88.1_0_102.5_0_115.34_115.34 ecReturn))) (let ((?v_70 (=> ?v_50 (not (= RES_88.1_0_102.5_0_115.34_115.34 null)))) (?v_71 (= tmp13_88.1_0_102.5_0_115.3 (stringCat (stringCat S_115.3 RES_88.1_0_102.5_0_115.34_115.34) S_116.9))) (?v_72 (= Smt.true (is RES_88.1_0_102.5_0_116.22_116.22 T_java.lang.String))) (?v_73 (isAllocated RES_88.1_0_102.5_0_116.22_116.22 after_54.22_54.22)) (?v_51 (= EC_88.1_0_102.5_0_116.22_116.22 ecReturn))) (let ((?v_74 (=> ?v_51 (not (= RES_88.1_0_102.5_0_116.22_116.22 null)))) (?v_75 (= msg_114.15_88.1_0_102.5_0_114.15_24.220.45 (stringCat (stringCat (stringCat (stringCat tmp13_88.1_0_102.5_0_115.3 RES_88.1_0_102.5_0_116.22_116.22) S_117.9) RES_88.1_0_97.24_97.24) S_118.9))) (?v_76 (= EC_88.1_0_102.5_0_114.15_114.15 ecReturn)) (?v_80 (not (and ?v_36 ?v_35))) (?v_81 (= C_102.5 C_102.5))) (let ((?v_82 (or (and ?v_18 ?v_56 ?v_57 ?v_34 ?v_58 ?v_36 ?v_35 ?v_17 ?v_36 ?v_37 ?v_59 ?v_39 ?v_60 ?v_40 ?v_61 ?v_39 ?v_43 ?v_62 ?v_63 ?v_44 ?v_64 ?v_65 (or (and tmp9_cand_113.13 ?v_17 ?v_27 ?v_66 ?v_49 ?v_67 ?v_27 ?v_68 ?v_69 ?v_50 ?v_70 ?v_71 ?v_39 ?v_72 ?v_73 ?v_51 ?v_74 ?v_75 ?v_52 ?v_76 (not ?v_76) (= RES_1_ RES_88.1_0_102.5_0_114.15_114.15) (= EC_1_ EC_88.1_0_102.5_0_114.15_114.15)) (and (not tmp9_cand_113.13) ?v_17 (= RES_1_ RES) (= EC_1_ EC))) (= RES_104.21 RES_1_) (= EC_104.21 EC_1_)) (and ?v_18 ?v_56 ?v_57 ?v_34 ?v_58 ?v_80 ?v_17 ?v_17 ?v_81 (= RES_104.21 RES_88.1_0_102.5_0_104.29_104.29) (= EC_104.21 C_102.5)))) (?v_83 (= j_88.1_0_102.5_0_102.43 (+ j_88.1_0_102.10 1))) (?v_84 (= EC_88.1_0_102.5_1_102.35_102.35 ecReturn)) (?v_85 (= EC_3_ L_102.5))) (let ((?v_161 (or (and ?v_17 (or (and ?v_18 ?v_53 ?v_33 ?v_54 (not ?v_55) (= RES_2_ RES_88.1_0_102.5_0_102.35_102.35) (= EC_2_ L_102.5)) (and ?v_18 ?v_53 ?v_33 ?v_54 ?v_55 ?v_18 ?v_56 ?v_57 ?v_34 ?v_58 ?v_80 ?v_17 ?v_17 (not ?v_81) (= RES_2_ RES_88.1_0_102.5_0_104.29_104.29) (= EC_2_ C_102.5))) (= RES_3_ RES_2_) (= EC_3_ EC_2_)) (and ?v_17 ?v_18 ?v_53 ?v_33 ?v_54 ?v_55 ?v_82 ?v_83 ?v_17 ?v_18 (= Smt.true (is RES_88.1_0_102.5_1_102.35_102.35 T_int)) ?v_84 (=> ?v_84 (= RES_88.1_0_102.5_1_102.35_102.35 ?v_21)) (not (< j_88.1_0_102.5_0_102.43 RES_88.1_0_102.5_1_102.35_102.35)) (= RES_3_ RES_88.1_0_102.5_1_102.35_102.35) ?v_85))) (?v_162 (= RES_4_ RES_3_)) (?v_163 (= EC_4_ EC_3_)) (?v_164 (= 0 j_loopold_88.1_0_126.14)) (?v_165 (= EC_4_ EC_loopold_88.1_0_1_)) (?v_86 (not (= elems_77.1 null)))) (let ((?v_88 (not ?v_86)) (?v_117 (= Smt.true (is RES_88.1_0_126.5_0_126.27_126.27 T_int))) (?v_87 (= EC_88.1_0_126.5_0_126.27_126.27 ecReturn)) (?v_89 (select1 count_25.67.33 elems_77.1))) (let ((?v_118 (=> ?v_87 (= RES_88.1_0_126.5_0_126.27_126.27 ?v_89))) (?v_119 (< 0 RES_88.1_0_126.5_0_126.27_126.27)) (?v_113 (not (and ?v_48 (< 0 ?v_89)))) (?v_120 (= Smt.true (is RES_88.1_0_126.5_0_127.18_127.18 T_javafe.ast.TypeDecl))) (?v_121 (isAllocated RES_88.1_0_126.5_0_127.18_127.18 after_54.22_54.22)) (?v_90 (= EC_88.1_0_126.5_0_127.18_127.18 ecReturn)) (?v_91 (not (= RES_88.1_0_126.5_0_127.18_127.18 null)))) (let ((?v_122 (=> ?v_90 ?v_91)) (?v_140 (not (= RES_88.1_0_97.24_97.24 (select1 id_26.32.34 RES_88.1_0_126.5_0_127.18_127.18))))) (let ((?v_123 (not ?v_140)) (?v_108 (select1 pkgName_6.21.14 cu_48.60))) (let ((?v_92 (= ?v_108 null))) (let ((?v_99 (not ?v_92)) (?v_100 (= Smt.true (is RES_88.1_0_126.5_0_135.13_135.13 T_int))) (?v_93 (= EC_88.1_0_126.5_0_135.13_135.13 ecReturn))) (let ((?v_101 (=> ?v_93 (= RES_88.1_0_126.5_0_135.13_135.13 ?v_30))) (?v_102 (> RES_88.1_0_126.5_0_135.13_135.13 1)) (?v_103 (= Smt.true (is RES_88.1_0_126.5_0_136.17_136.17 T_int))) (?v_94 (= EC_88.1_0_126.5_0_136.17_136.17 ecReturn))) (let ((?v_104 (=> ?v_94 (= RES_88.1_0_126.5_0_136.17_136.17 ?v_30))) (?v_95 (= len_136.7_88.1_0_126.5_0_136.7_22.171.36 (- RES_88.1_0_126.5_0_136.17_136.17 1))) (?v_105 (= Smt.true (is RES_88.1_0_126.5_0_136.7_136.7 T_javafe.ast.Name))) (?v_106 (isAllocated RES_88.1_0_126.5_0_136.7_136.7 after_54.22_54.22)) (?v_96 (= EC_88.1_0_126.5_0_136.7_136.7 ecReturn)) (?v_97 (not (= RES_88.1_0_126.5_0_136.7_136.7 null)))) (let ((?v_107 (=> ?v_96 ?v_97)) (?v_141 (= Smt.true (is RES_88.1_0_126.5_0_132.13_132.13 T_int))) (?v_98 (= EC_88.1_0_126.5_0_132.13_132.13 ecReturn))) (let ((?v_142 (=> ?v_98 (= RES_88.1_0_126.5_0_132.13_132.13 ?v_30))) (?v_143 (= RES_88.1_0_126.5_0_132.13_132.13 1)) (?v_109 (= EC_88.1_0_126.5_0_136.27_136.27 ecReturn))) (let ((?v_144 (or (and ?v_102 ?v_27 ?v_103 ?v_94 ?v_104 ?v_27 ?v_95 ?v_105 ?v_106 ?v_96 ?v_107 ?v_7 ?v_97 (= other_136.27_88.1_0_126.5_0_136.27_22.42.42 ?v_108) (= Smt.true (is RES_88.1_0_126.5_0_136.27_136.27 T_boolean)) ?v_109 (=> (and ?v_109 (= other_136.27_88.1_0_126.5_0_136.27_22.42.42 null)) (not (= Smt.true RES_88.1_0_126.5_0_136.27_136.27))) (= RES_6_ RES_88.1_0_126.5_0_136.27_136.27) (= tmp17_cand_135.22 RES_88.1_0_126.5_0_136.27_136.27) (= EC_6_ EC_88.1_0_126.5_0_136.27_136.27)) (and (not ?v_102) ?v_17 (= RES_6_ RES_88.1_0_126.5_0_135.13_135.13) (= tmp17_cand_135.22 bool_false) (= EC_6_ EC_88.1_0_126.5_0_135.13_135.13)))) (?v_145 (= Smt.true tmp17_cand_135.22))) (let ((?v_124 (or (and ?v_92 ?v_17 ?v_27 ?v_141 ?v_98 ?v_142 (not ?v_143) ?v_17 (= RES_5_ RES_88.1_0_126.5_0_132.13_132.13) (= EC_5_ EC_88.1_0_126.5_0_132.13_132.13)) (and ?v_99 ?v_17 ?v_27 ?v_100 ?v_93 ?v_101 ?v_144 (not ?v_145) ?v_17 (= RES_5_ RES_6_) (= EC_5_ EC_6_)))) (?v_125 (= Smt.true (is RES_88.1_0_126.5_0_140.27_140.27 T_int))) (?v_111 (= EC_88.1_0_126.5_0_140.27_140.27 ecReturn)) (?v_116 (not (= RES_88.1_0_126.5_0_140.27_140.27 NULL_15.60.26)))) (let ((?v_126 (=> ?v_111 ?v_116)) (?v_127 (= Smt.true (is RES_88.1_0_126.5_0_141.6_141.6 T_java.lang.String))) (?v_128 (isAllocated RES_88.1_0_126.5_0_141.6_141.6 after_54.22_54.22)) (?v_112 (= EC_88.1_0_126.5_0_141.6_141.6 ecReturn))) (let ((?v_129 (=> ?v_112 (not (= RES_88.1_0_126.5_0_141.6_141.6 null)))) (?v_130 (= tmp22_88.1_0_126.5_0_141.3 (stringCat (stringCat (stringCat RES_88.1_0_126.5_0_141.6_141.6 S_142.5) RES_88.1_0_97.24_97.24) S_143.10))) (?v_131 (= Smt.true (is RES_88.1_0_126.5_0_144.29_144.29 T_javafe.ast.TypeDecl))) (?v_132 (isAllocated RES_88.1_0_126.5_0_144.29_144.29 after_54.22_54.22)) (?v_114 (= EC_88.1_0_126.5_0_144.29_144.29 ecReturn)) (?v_115 (not (= RES_88.1_0_126.5_0_144.29_144.29 null)))) (let ((?v_133 (=> ?v_114 ?v_115)) (?v_134 (= loc_144.14_88.1_0_126.5_0_144.14_15.152.36 (select1 loc_26.45.13 RES_88.1_0_126.5_0_144.29_144.29))) (?v_135 (= Smt.true (is RES_88.1_0_126.5_0_144.14_144.14 T_java.lang.String))) (?v_136 (isAllocated RES_88.1_0_126.5_0_144.14_144.14 after_54.22_54.22)) (?v_137 (= EC_88.1_0_126.5_0_144.14_144.14 ecReturn)) (?v_138 (= msg_140.18_88.1_0_126.5_0_140.18_24.220.45 (stringCat tmp22_88.1_0_126.5_0_141.3 RES_88.1_0_126.5_0_144.14_144.14))) (?v_139 (= EC_88.1_0_126.5_0_140.18_140.18 ecReturn)) (?v_147 (= EC_127.12_1_ C_126.5)) (?v_146 (= EC_7_ C_126.5))) (let ((?v_166 (or (and ?v_140 ?v_17 ?v_17 (= RES_127.12_1_ RES_88.1_0_126.5_0_127.18_127.18) ?v_147) (and ?v_123 ?v_17 ?v_7 (or (and ?v_92 ?v_17 ?v_27 ?v_141 ?v_98 ?v_142 ?v_143 ?v_17 ?v_17 (= RES_7_ RES_88.1_0_126.5_0_132.13_132.13) ?v_146) (and ?v_99 ?v_17 ?v_27 ?v_100 ?v_93 ?v_101 ?v_144 ?v_145 ?v_17 ?v_17 (= RES_7_ RES_6_) ?v_146)) (= RES_127.12_1_ RES_7_) (= EC_127.12_1_ EC_7_))))) (let ((?v_167 (or (and ?v_86 ?v_120 ?v_121 ?v_90 ?v_122 ?v_91 ?v_123 ?v_17 ?v_7 ?v_124 ?v_27 ?v_125 ?v_111 ?v_126 ?v_27 ?v_127 ?v_128 ?v_112 ?v_129 ?v_130 ?v_86 ?v_131 ?v_132 ?v_114 ?v_133 ?v_115 ?v_134 ?v_135 ?v_136 ?v_137 ?v_138 ?v_116 ?v_139 (not ?v_139) (= RES_127.12 RES_88.1_0_126.5_0_140.18_140.18) (= EC_127.12 EC_88.1_0_126.5_0_140.18_140.18)) (and ?v_86 ?v_120 ?v_121 ?v_90 ?v_122 ?v_91 ?v_166 ?v_147 (= RES_127.12 RES_127.12_1_) (= EC_127.12 EC_127.12_1_)))) (?v_168 (= j_88.1_0_126.5_0_126.35 ?v_148)) (?v_169 (= EC_88.1_0_126.5_1_126.27_126.27 ecReturn)) (?v_170 (= EC_9_ L_126.5))) (let ((?v_171 (or (and ?v_17 (or (and ?v_86 ?v_117 ?v_87 ?v_118 (not ?v_119) (= RES_8_ RES_88.1_0_126.5_0_126.27_126.27) (= EC_8_ L_126.5)) (and ?v_86 ?v_117 ?v_87 ?v_118 ?v_119 ?v_86 ?v_120 ?v_121 ?v_90 ?v_122 ?v_91 ?v_166 (not ?v_147) (= RES_8_ RES_127.12_1_) (= EC_8_ EC_127.12_1_))) (= RES_9_ RES_8_) (= EC_9_ EC_8_)) (and ?v_17 ?v_86 ?v_117 ?v_87 ?v_118 ?v_119 ?v_167 ?v_168 ?v_17 ?v_86 (= Smt.true (is RES_88.1_0_126.5_1_126.27_126.27 T_int)) ?v_169 (=> ?v_169 (= RES_88.1_0_126.5_1_126.27_126.27 ?v_89)) (not (< j_88.1_0_126.5_0_126.35 RES_88.1_0_126.5_1_126.27_126.27)) (= RES_9_ RES_88.1_0_126.5_1_126.27_126.27) ?v_170))) (?v_172 (= EC_90.24_1_ C_88.1))) (let ((?v_197 (or (and (not (and ?v_24 ?v_23)) ?v_17 ?v_17 (= RES_90.24_1_ RES_88.1_0_90.32_90.32) ?v_172) (and ?v_24 ?v_23 ?v_17 ?v_24 ?v_25 ?v_155 ?v_27 ?v_156 ?v_28 ?v_157 ?v_27 ?v_31 ?v_158 ?v_159 ?v_32 ?v_160 (or (and ?v_77 ?v_78 ?v_79 ?v_161 (not ?v_85) (= RES_90.24_1_ RES_3_) (= EC_90.24_1_ EC_3_)) (and ?v_77 ?v_78 ?v_79 ?v_161 ?v_85 ?v_162 ?v_163 ?v_164 ?v_165 ?v_171 (not ?v_170) (= RES_90.24_1_ RES_9_) (= EC_90.24_1_ EC_9_))))))) (let ((?v_198 (or (and ?v_18 ?v_152 ?v_153 ?v_22 ?v_154 ?v_24 ?v_23 ?v_17 ?v_24 ?v_25 ?v_155 ?v_27 ?v_156 ?v_28 ?v_157 ?v_27 ?v_31 ?v_158 ?v_159 ?v_32 ?v_160 ?v_77 ?v_78 ?v_79 ?v_161 ?v_85 ?v_162 ?v_163 ?v_164 ?v_165 ?v_171 ?v_170 (= RES_10_ RES_9_) (= EC_10_ EC_9_) (= RES_90.24 RES_10_) (= EC_90.24 EC_10_)) (and ?v_18 ?v_152 ?v_153 ?v_22 ?v_154 ?v_197 ?v_172 (= RES_90.24 RES_90.24_1_) (= EC_90.24 EC_90.24_1_)))) (?v_199 (= i_88.1_0_88.37 ?v_148)) (?v_200 (= EC_88.1_1_88.29_88.29 ecReturn)) (?v_201 (= EC_12_ L_88.1))) (let ((?v_203 (or (and ?v_17 (or (and ?v_18 ?v_149 ?v_19 ?v_150 (not ?v_151) (= RES_11_ RES_88.1_0_88.29_88.29) (= EC_11_ L_88.1)) (and ?v_18 ?v_149 ?v_19 ?v_150 ?v_151 ?v_18 ?v_152 ?v_153 ?v_22 ?v_154 ?v_197 (not ?v_172) (= RES_11_ RES_90.24_1_) (= EC_11_ EC_90.24_1_))) (= EC_12_ EC_11_)) (and ?v_17 ?v_18 ?v_149 ?v_19 ?v_150 ?v_151 ?v_198 ?v_199 ?v_17 ?v_18 (= Smt.true (is RES_88.1_1_88.29_88.29 T_int)) ?v_200 (=> ?v_200 (= RES_88.1_1_88.29_88.29 ?v_21)) (not (< i_88.1_0_88.37 RES_88.1_1_88.29_88.29)) ?v_201))) (?v_204 (= EC_52.5 ecReturn))) (not (=> (and (distinct C_126.5 C_102.5 ecReturn C_88.1 L_126.5 L_102.5 L_88.1) (not (= S_118.9 null)) (= (typeof S_118.9) T_java.lang.String) (not (= S_57.35 null)) (= (typeof S_57.35) T_java.lang.String) (not (= S_117.9 null)) (= (typeof S_117.9) T_java.lang.String) (not (= S_143.10 null)) (= (typeof S_143.10) T_java.lang.String) (not (= S_56.10 null)) (= (typeof S_56.10) T_java.lang.String) (not (= S_142.5 null)) (= (typeof S_142.5) T_java.lang.String) (not (= S_116.9 null)) (= (typeof S_116.9) T_java.lang.String) (not (= S_115.3 null)) (= (typeof S_115.3) T_java.lang.String)) (=> (and (= NULL_pre_56.82.26 NULL_56.82.26) (= Smt.true (is NULL_56.82.26 T_int)) (= name_pre_20.18.28 name_20.18.28) (= name_20.18.28 (asField name_20.18.28 T_javafe.ast.Name)) (< (fClosedTime name_20.18.28) alloc) (forall ((?s Int)) (=> (not (= ?s null)) (not (= (select1 name_20.18.28 ?s) null)))) (= loc_pre_18.18.13 loc_18.18.13) (= loc_18.18.13 (asField loc_18.18.13 T_int)) (= TYPEMODIFIERPRAGMA_pre_56.28.26 TYPEMODIFIERPRAGMA_56.28.26) (= Smt.true (is TYPEMODIFIERPRAGMA_56.28.26 T_int)) (= locId_pre_86.38.13 locId_86.38.13) (= locId_86.38.13 (asField locId_86.38.13 T_int)) (= locId_pre_88.43.13 locId_88.43.13) (= locId_88.43.13 (asField locId_88.43.13 T_int)) (= pkgName_pre_6.21.14 pkgName_6.21.14) (= pkgName_6.21.14 (asField pkgName_6.21.14 T_javafe.ast.Name)) (< (fClosedTime pkgName_6.21.14) alloc) (= STRINGLIT_pre_57.44.26 STRINGLIT_57.44.26) (= Smt.true (is STRINGLIT_57.44.26 T_int)) (= IDENT_pre_57.25.26 IDENT_57.25.26) (= Smt.true (is IDENT_57.25.26 T_int)) (= imports_pre_6.25.37 imports_6.25.37) (= imports_6.25.37 (asField imports_6.25.37 T_javafe.ast.ImportDeclVec)) (< (fClosedTime imports_6.25.37) alloc) (forall ((?s_1_ Int)) (=> (not (= ?s_1_ null)) (not (= (select1 imports_6.25.37 ?s_1_) null)))) (= elements_pre_83.61.39 elements_83.61.39) (= elements_83.61.39 (asField elements_83.61.39 (array T_javafe.ast.MethodDecl))) (< (fClosedTime elements_83.61.39) alloc) (forall ((?s_2_ Int)) (=> (not (= ?s_2_ null)) (not (= (select1 elements_83.61.39 ?s_2_) null)))) (= count_pre_17.67.33 count_17.67.33) (= count_17.67.33 (asField count_17.67.33 T_int)) (= otherCodes_pre_56.202.27 otherCodes_56.202.27) (= Smt.true (is otherCodes_56.202.27 ?v_0)) (isAllocated otherCodes_56.202.27 alloc) (= LAST_KEYWORD_pre_56.103.26 LAST_KEYWORD_56.103.26) (= Smt.true (is LAST_KEYWORD_56.103.26 T_int)) (= locType_pre_87.21.13 locType_87.21.13) (= locType_87.21.13 (asField locType_87.21.13 T_int)) (= punctuationStrings_pre_56.134.22 punctuationStrings_56.134.22) (= Smt.true (is punctuationStrings_56.134.22 ?v_1)) (isAllocated punctuationStrings_56.134.22 alloc) (= punctuationCodes_pre_56.164.19 punctuationCodes_56.164.19) (= Smt.true (is punctuationCodes_56.164.19 ?v_0)) (isAllocated punctuationCodes_56.164.19 alloc) (= loc_pre_26.45.13 loc_26.45.13) (= loc_26.45.13 (asField loc_26.45.13 T_int)) (= whereDecoration_pre_35.597.41 whereDecoration_35.597.41) (= Smt.true (is whereDecoration_35.597.41 T_javafe.ast.ASTDecoration)) (isAllocated whereDecoration_35.597.41 alloc) (= noTokens_pre_56.212.27 noTokens_56.212.27) (= Smt.true (is noTokens_56.212.27 T_int)) (= LEXICALPRAGMA_pre_56.24.26 LEXICALPRAGMA_56.24.26) (= Smt.true (is LEXICALPRAGMA_56.24.26 T_int)) (= syntax_pre_21.28.29 syntax_21.28.29) (= syntax_21.28.29 (asField syntax_21.28.29 T_boolean)) (= locOpenBrace_pre_97.22.13 locOpenBrace_97.22.13) (= locOpenBrace_97.22.13 (asField locOpenBrace_97.22.13 T_int)) (= LONGLIT_pre_57.40.26 LONGLIT_57.40.26) (= Smt.true (is LONGLIT_57.40.26 T_int)) (= tokenType_pre_23.90.8 tokenType_23.90.8) (= tokenType_23.90.8 (asField tokenType_23.90.8 T_int)) (= sigDecoration_pre_33.104.38 sigDecoration_33.104.38) (= Smt.true (is sigDecoration_33.104.38 T_javafe.ast.ASTDecoration)) (isAllocated sigDecoration_33.104.38 alloc) (= locId_pre_26.48.13 locId_26.48.13) (= locId_26.48.13 (asField locId_26.48.13 T_int)) (= locOpenBrace_pre_26.51.13 locOpenBrace_26.51.13) (= locOpenBrace_26.51.13 (asField locOpenBrace_26.51.13 T_int)) (= elements_pre_82.61.38 elements_82.61.38) (= elements_82.61.38 (asField elements_82.61.38 (array T_javafe.ast.FieldDecl))) (< (fClosedTime elements_82.61.38) alloc) (forall ((?s_3_ Int)) (=> (not (= ?s_3_ null)) (not (= (select1 elements_82.61.38 ?s_3_) null)))) (= locCloseBrace_pre_26.54.13 locCloseBrace_26.54.13) (= locCloseBrace_26.54.13 (asField locCloseBrace_26.54.13 T_int)) (= TYPEDECLELEMPRAGMA_pre_56.27.26 TYPEDECLELEMPRAGMA_56.27.26) (= Smt.true (is TYPEDECLELEMPRAGMA_56.27.26 T_int)) (= locCloseBrace_pre_97.25.13 locCloseBrace_97.25.13) (= locCloseBrace_97.25.13 (asField locCloseBrace_97.25.13 T_int)) (= NULL_pre_15.60.26 NULL_15.60.26) (= Smt.true (is NULL_15.60.26 T_int)) (= DOUBLELIT_pre_57.43.26 DOUBLELIT_57.43.26) (= Smt.true (is DOUBLELIT_57.43.26 T_int)) (= typeName_pre_19.15.32 typeName_19.15.32) (= typeName_19.15.32 (asField typeName_19.15.32 T_javafe.ast.TypeName)) (< (fClosedTime typeName_19.15.32) alloc) (forall ((?s_4_ Int)) (=> (not (= ?s_4_ null)) (not (= (select1 typeName_19.15.32 ?s_4_) null)))) (= FIRST_KEYWORD_pre_56.51.26 FIRST_KEYWORD_56.51.26) (= Smt.true (is FIRST_KEYWORD_56.51.26 T_int)) (= count_pre_25.67.33 count_25.67.33) (= count_25.67.33 (asField count_25.67.33 T_int)) (= length_pre_22.50.25 length_22.50.25) (= length_22.50.25 (asField length_22.50.25 T_int)) (= loc_pre_6.30.13 loc_6.30.13) (= loc_6.30.13 (asField loc_6.30.13 T_int)) (= elems_pre_6.27.35 elems_6.27.35) (= elems_6.27.35 (asField elems_6.27.35 T_javafe.ast.TypeDeclVec)) (< (fClosedTime elems_6.27.35) alloc) (forall ((?s_5_ Int)) (=> (not (= ?s_5_ null)) (not (= (select1 elems_6.27.35 ?s_5_) null)))) (= INTLIT_pre_57.39.26 INTLIT_57.39.26) (= Smt.true (is INTLIT_57.39.26 T_int)) (= STMTPRAGMA_pre_56.26.26 STMTPRAGMA_56.26.26) (= Smt.true (is STMTPRAGMA_56.26.26 T_int)) (= returnType_pre_87.18.28 returnType_87.18.28) (= returnType_87.18.28 (asField returnType_87.18.28 T_javafe.ast.Type)) (< (fClosedTime returnType_87.18.28) alloc) (forall ((?s_6_ Int)) (=> (not (= ?s_6_ null)) (not (= (select1 returnType_87.18.28 ?s_6_) null)))) (= keywordStrings_pre_56.181.30 keywordStrings_56.181.30) (= Smt.true (is keywordStrings_56.181.30 ?v_1)) (isAllocated keywordStrings_56.181.30 alloc) (= elements_pre_17.61.39 elements_17.61.39) (= elements_17.61.39 (asField elements_17.61.39 (array T_javafe.ast.ImportDecl))) (< (fClosedTime elements_17.61.39) alloc) (forall ((?s_7_ Int)) (=> (not (= ?s_7_ null)) (not (= (select1 elements_17.61.39 ?s_7_) null)))) (= FLOATLIT_pre_57.42.26 FLOATLIT_57.42.26) (= Smt.true (is FLOATLIT_57.42.26 T_int)) (= owner_pre_4.35.28 owner_4.35.28) (= owner_4.35.28 (asField owner_4.35.28 T_java.lang.Object)) (< (fClosedTime owner_4.35.28) alloc) (= count_pre_83.67.33 count_83.67.33) (= count_83.67.33 (asField count_83.67.33 T_int)) (= typeEnv_pre_35.323.32 typeEnv_35.323.32) (= Smt.true (is typeEnv_35.323.32 T_javafe.ast.ASTDecoration)) (isAllocated typeEnv_35.323.32 alloc) (= checkedField_pre_30.33 checkedField_30.33) (= Smt.true (is checkedField_30.33 T_javafe.ast.ASTDecoration)) (isAllocated checkedField_30.33 alloc) (= locOpenBrace_pre_88.36.13 locOpenBrace_88.36.13) (= locOpenBrace_88.36.13 (asField locOpenBrace_88.36.13 T_int)) (= BOOLEANLIT_pre_57.38.26 BOOLEANLIT_57.38.26) (= Smt.true (is BOOLEANLIT_57.38.26 T_int)) (= inst_pre_36.29.44 inst_36.29.44) (= Smt.true (is inst_36.29.44 T_javafe.ast.PrettyPrint)) (isAllocated inst_36.29.44 alloc) (not (= inst_36.29.44 null)) (= elements_pre_25.61.37 elements_25.61.37) (= elements_25.61.37 (asField elements_25.61.37 (array T_javafe.ast.TypeDecl))) (< (fClosedTime elements_25.61.37) alloc) (forall ((?s_8_ Int)) (=> (not (= ?s_8_ null)) (not (= (select1 elements_25.61.37 ?s_8_) null)))) (= body_pre_88.34.19 body_88.34.19) (= body_88.34.19 (asField body_88.34.19 T_javafe.ast.BlockStmt)) (< (fClosedTime body_88.34.19) alloc) (= modifiers_pre_26.28.13 modifiers_26.28.13) (= modifiers_26.28.13 (asField modifiers_26.28.13 T_int)) (= count_pre_82.67.33 count_82.67.33) (= count_82.67.33 (asField count_82.67.33 T_int)) (= id_pre_26.32.34 id_26.32.34) (= id_26.32.34 (asField id_26.32.34 T_javafe.ast.Identifier)) (< (fClosedTime id_26.32.34) alloc) (forall ((?s_9_ Int)) (=> (not (= ?s_9_ null)) (not (= (select1 id_26.32.34 ?s_9_) null)))) (= otherStrings_pre_56.193.30 otherStrings_56.193.30) (= Smt.true (is otherStrings_56.193.30 ?v_1)) (isAllocated otherStrings_56.193.30 alloc) (= MODIFIERPRAGMA_pre_56.25.26 MODIFIERPRAGMA_56.25.26) (= Smt.true (is MODIFIERPRAGMA_56.25.26 T_int)) (= decorationType_pre_5.48.27 decorationType_5.48.27) (= decorationType_5.48.27 (asField decorationType_5.48.27 T_.TYPE)) (= type_pre_86.35.28 type_86.35.28) (= type_86.35.28 (asField type_86.35.28 T_javafe.ast.Type)) (< (fClosedTime type_86.35.28) alloc) (forall ((?s_10_ Int)) (=> (not (= ?s_10_ null)) (not (= (select1 type_86.35.28 ?s_10_) null)))) (= loc_pre_88.40.13 loc_88.40.13) (= loc_88.40.13 (asField loc_88.40.13 T_int)) (= CHARLIT_pre_57.41.26 CHARLIT_57.41.26) (= Smt.true (is CHARLIT_57.41.26 T_int)) (= elems_pre elems) (= elems (asElems elems)) (< (eClosedTime elems) alloc) (= LS (asLockSet LS)) (= alloc_pre alloc)) (not (and (= Smt.true (is cu_48.60 T_javafe.ast.CompilationUnit)) (isAllocated cu_48.60 alloc) ?v_7 (forall ((?i_56.147.29 Int)) (=> (and (<= 0 ?i_56.147.29) (<= ?i_56.147.29 (arrayLength punctuationCodes_56.164.19))) (not (= (select1 (select1 elems punctuationCodes_56.164.19) ?i_56.147.29) NULL_56.82.26)))) (forall ((?brokenObj Int)) (=> (and (= Smt.true (is ?brokenObj T_javafe.ast.TypeDeclVec)) (not (= ?brokenObj null))) (= (typeof (select1 elements_25.61.37 ?brokenObj)) (array T_javafe.ast.TypeDecl)))) (forall ((?brokenObj_1_ Int)) (=> (and (= Smt.true (is ?brokenObj_1_ T_javafe.ast.ImportDeclVec)) (not (= ?brokenObj_1_ null))) (= (select1 owner_4.35.28 (select1 elements_17.61.39 ?brokenObj_1_)) ?brokenObj_1_))) (= Smt.true (is ?v_2 T_javafe.parser.TagConstants)) (not (= ?v_2 null)) (= (arrayLength punctuationCodes_56.164.19) ?v_4) (forall ((?brokenObj_2_ Int)) (=> (and (= Smt.true (is ?brokenObj_2_ T_javafe.ast.ImportDeclVec)) (not (= ?brokenObj_2_ null))) (forall ((?i_17.62.31 Int)) (=> (and (<= 0 ?i_17.62.31) (< ?i_17.62.31 (select1 count_17.67.33 ?brokenObj_2_))) (not (= (select1 (select1 elems (select1 elements_17.61.39 ?brokenObj_2_)) ?i_17.62.31) null)))))) (= ?v_9 T_java.lang.Boolean) (= ?v_3 (- (+ 1 LAST_KEYWORD_56.103.26) FIRST_KEYWORD_56.51.26)) (forall ((?brokenObj_3_ Int)) (=> (and (= Smt.true (is ?brokenObj_3_ T_javafe.ast.CompilationUnit)) (not (= ?brokenObj_3_ null))) (not (= (select1 loc_6.30.13 ?brokenObj_3_) NULL_15.60.26)))) (forall ((?brokenObj_4_ Int)) (let ((?v_205 (select1 tokenType_23.90.8 ?brokenObj_4_))) (=> (and (= Smt.true (is ?brokenObj_4_ T_javafe.ast.Identifier)) (not (= ?brokenObj_4_ null))) (and (not (= ?v_205 BOOLEANLIT_57.38.26)) (not (= ?v_205 INTLIT_57.39.26)) (not (= ?v_205 LONGLIT_57.40.26)) (not (= ?v_205 FLOATLIT_57.42.26)) (not (= ?v_205 DOUBLELIT_57.43.26)) (not (= ?v_205 STRINGLIT_57.44.26)) (not (= ?v_205 CHARLIT_57.41.26)) (not (= ?v_205 LEXICALPRAGMA_56.24.26)) (not (= ?v_205 MODIFIERPRAGMA_56.25.26)) (not (= ?v_205 STMTPRAGMA_56.26.26)) (not (= ?v_205 TYPEDECLELEMPRAGMA_56.27.26)) (not (= ?v_205 TYPEMODIFIERPRAGMA_56.28.26)))))) (nonnullelements otherStrings_56.193.30 elems) ?v_6 (forall ((?brokenObj_5_ Int)) (=> (and (= Smt.true (is ?brokenObj_5_ T_javafe.ast.TypeDeclVec)) (not (= ?brokenObj_5_ null))) (<= 0 (select1 count_25.67.33 ?brokenObj_5_)))) (forall ((?brokenObj_6_ Int)) (=> (and (= Smt.true (is ?brokenObj_6_ T_javafe.ast.ImportDeclVec)) (not (= ?brokenObj_6_ null))) (<= (select1 count_17.67.33 ?brokenObj_6_) (arrayLength (select1 elements_17.61.39 ?brokenObj_6_))))) (= (arrayLength otherCodes_56.202.27) ?v_5) (forall ((?brokenObj_7_ Int)) (=> (and (= Smt.true (is ?brokenObj_7_ T_javafe.ast.ImportDeclVec)) (not (= ?brokenObj_7_ null))) (= (typeof (select1 elements_17.61.39 ?brokenObj_7_)) (array T_javafe.ast.ImportDecl)))) (forall ((?i_56.149.29 Int)) (let ((?v_206 (select1 (select1 elems punctuationCodes_56.164.19) ?i_56.149.29))) (=> (and (<= 0 ?i_56.149.29) (<= ?i_56.149.29 (arrayLength punctuationCodes_56.164.19))) (and (not (= ?v_206 IDENT_57.25.26)) (not (= ?v_206 BOOLEANLIT_57.38.26)) (not (= ?v_206 INTLIT_57.39.26)) (not (= ?v_206 LONGLIT_57.40.26)) (not (= ?v_206 FLOATLIT_57.42.26)) (not (= ?v_206 DOUBLELIT_57.43.26)) (not (= ?v_206 STRINGLIT_57.44.26)) (not (= ?v_206 CHARLIT_57.41.26)) (not (= ?v_206 LEXICALPRAGMA_56.24.26)) (not (= ?v_206 MODIFIERPRAGMA_56.25.26)) (not (= ?v_206 STMTPRAGMA_56.26.26)) (not (= ?v_206 TYPEDECLELEMPRAGMA_56.27.26)) (not (= ?v_206 TYPEMODIFIERPRAGMA_56.28.26)))))) (forall ((?brokenObj_8_ Int)) (=> (and (= Smt.true (is ?brokenObj_8_ T_javafe.ast.TypeDeclVec)) (not (= ?brokenObj_8_ null))) (= (select1 owner_4.35.28 (select1 elements_25.61.37 ?brokenObj_8_)) ?brokenObj_8_))) (forall ((?brokenObj_9_ Int)) (=> (and (= Smt.true (is ?brokenObj_9_ T_javafe.ast.ImportDecl)) (not (= ?brokenObj_9_ null))) (not (= (select1 loc_18.18.13 ?brokenObj_9_) NULL_15.60.26)))) (forall ((?brokenObj_10_ Int)) (=> (and (= Smt.true (is ?brokenObj_10_ T_javafe.ast.Name)) (not (= ?brokenObj_10_ null))) (>= (select1 length_22.50.25 ?brokenObj_10_) 1))) (forall ((?brokenObj_11_ Int)) (=> (and (= Smt.true (is ?brokenObj_11_ T_javafe.ast.TypeDeclVec)) (not (= ?brokenObj_11_ null))) (forall ((?i_25.62.31 Int)) (=> (and (<= 0 ?i_25.62.31) (< ?i_25.62.31 (select1 count_25.67.33 ?brokenObj_11_))) (not (= (select1 (select1 elems (select1 elements_25.61.37 ?brokenObj_11_)) ?i_25.62.31) null)))))) (forall ((?brokenObj_12_ Int)) (=> (and (= Smt.true (is ?brokenObj_12_ T_javafe.ast.TypeDecl)) (not (= ?brokenObj_12_ null))) (not (= (select1 loc_26.45.13 ?brokenObj_12_) NULL_15.60.26)))) (nonnullelements punctuationStrings_56.134.22 elems) (forall ((?brokenObj_13_ Int)) (=> (and (= Smt.true (is ?brokenObj_13_ T_javafe.ast.ImportDeclVec)) (not (= ?brokenObj_13_ null))) (<= 0 (select1 count_17.67.33 ?brokenObj_13_)))) (forall ((?brokenObj_14_ Int)) (=> (and (= Smt.true (is ?brokenObj_14_ T_javafe.ast.TypeDeclVec)) (not (= ?brokenObj_14_ null))) (<= (select1 count_25.67.33 ?brokenObj_14_) (arrayLength (select1 elements_25.61.37 ?brokenObj_14_))))) (nonnullelements keywordStrings_56.181.30 elems) (= noTokens_56.212.27 (+ (+ ?v_3 ?v_4) ?v_5)) (forall ((?brokenObj_15_ Int)) (=> (and (= Smt.true (is ?brokenObj_15_ T_javafe.ast.TypeDecl)) (not (= ?brokenObj_15_ null))) (not (= (select1 locCloseBrace_26.54.13 ?brokenObj_15_) NULL_15.60.26)))) (forall ((?brokenObj_16_ Int)) (=> (and (= Smt.true (is ?brokenObj_16_ T_javafe.ast.TypeDecl)) (not (= ?brokenObj_16_ null))) (not (= (select1 locId_26.48.13 ?brokenObj_16_) NULL_15.60.26)))) (forall ((?brokenObj_17_ Int)) (=> (and (= Smt.true (is ?brokenObj_17_ T_javafe.ast.TypeDecl)) (not (= ?brokenObj_17_ null))) (not (= (select1 locOpenBrace_26.51.13 ?brokenObj_17_) NULL_15.60.26)))) (or ?v_10 (and ?v_6 (or ?v_11 (and ?v_7 ?v_173 ?v_174 ?v_8 ?v_175 ?v_176 ?v_17 ?v_177 ?v_178 ?v_179 ?v_180 ?v_181 ?v_182 ?v_183 ?v_184 (or ?v_10 (and ?v_6 (or ?v_11 (and ?v_7 (not ?v_13)) (and ?v_7 ?v_13 ?v_185 (or ?v_11 (and ?v_7 (or (and ?v_14 (not ?v_15)) (and ?v_14 ?v_15 ?v_186 ?v_187 ?v_16 ?v_188 ?v_189 ?v_190 (or ?v_11 (and ?v_7 ?v_191 (or ?v_11 (and ?v_7 ?v_192 (or ?v_11 (and ?v_7 ?v_193 (or ?v_11 (and ?v_7 ?v_194 ?v_195 ?v_196 (or (and ?v_17 (or ?v_20 (and ?v_18 ?v_149 ?v_19 ?v_150 ?v_151 (or ?v_20 (and ?v_18 (or (not (and ?v_48 (< 0 ?v_21))) (and ?v_152 ?v_153 ?v_22 ?v_154 ?v_24 ?v_23 ?v_17 (or (not ?v_24) (and ?v_24 (or (not ?v_25) (and ?v_25 ?v_155 (or ?v_29 (and ?v_27 ?v_156 ?v_28 ?v_157 (or ?v_29 (and ?v_27 (or (and ?v_31 (not (and (<= 0 i_97.24_88.1_0_97.24_22.62.48) (< i_97.24_88.1_0_97.24_22.62.48 ?v_30)))) (and ?v_31 ?v_158 ?v_159 ?v_32 ?v_160 (or (and ?v_77 ?v_78 ?v_79 (or (and ?v_17 (or ?v_20 (and ?v_18 ?v_53 ?v_33 ?v_54 ?v_55 (or ?v_20 (and ?v_18 (or (not (and (<= 0 j_88.1_0_102.10) (< j_88.1_0_102.10 ?v_21))) (and ?v_56 ?v_57 ?v_34 ?v_58 ?v_36 ?v_35 ?v_17 (or (not ?v_36) (and ?v_36 (or (not ?v_37) (and ?v_37 ?v_59 (or ?v_41 (and ?v_39 ?v_60 ?v_40 ?v_61 (or ?v_41 (and ?v_39 (or (and ?v_43 (not (and (<= 0 i_111.21_88.1_0_102.5_0_111.21_22.62.48) (< i_111.21_88.1_0_102.5_0_111.21_22.62.48 ?v_42)))) (and ?v_43 ?v_62 ?v_63 ?v_44 ?v_64 (or (and ?v_45 ?v_29) (and ?v_65 tmp9_cand_113.13 ?v_17 (or ?v_29 (and ?v_27 (or ?v_110 (and ?v_66 ?v_49 ?v_67 (or ?v_29 (and ?v_27 ?v_68 ?v_69 ?v_50 ?v_70 ?v_71 (or ?v_41 (and ?v_39 ?v_72 ?v_73 ?v_51 ?v_74 ?v_75 (not ?v_52)))))))))))))))))))))))))))) (and ?v_17 ?v_18 ?v_53 ?v_33 ?v_54 ?v_55 ?v_82 ?v_83 ?v_17 ?v_20))) (and ?v_77 ?v_78 ?v_79 ?v_161 ?v_85 ?v_162 ?v_163 ?v_164 ?v_165 (or (and ?v_17 (or ?v_88 (and ?v_86 ?v_117 ?v_87 ?v_118 ?v_119 (or ?v_88 (and ?v_86 (or ?v_113 (and ?v_120 ?v_121 ?v_90 ?v_122 (or (not ?v_91) (and ?v_91 ?v_123 ?v_17 (or ?v_11 (and ?v_7 (or (and ?v_92 ?v_17 ?v_29) (and ?v_99 ?v_17 (or ?v_29 (and ?v_27 ?v_100 ?v_93 ?v_101 ?v_102 (or ?v_29 (and ?v_27 ?v_103 ?v_94 ?v_104 (or ?v_29 (and ?v_27 (or (and ?v_95 (not (and (< 0 len_136.7_88.1_0_126.5_0_136.7_22.171.36) (<= len_136.7_88.1_0_126.5_0_136.7_22.171.36 ?v_30)))) (and ?v_95 ?v_105 ?v_106 ?v_96 ?v_107 (or ?v_11 (and ?v_7 (not ?v_97)))))))))))) (and ?v_124 (or ?v_29 (and ?v_27 (or ?v_110 (and ?v_125 ?v_111 ?v_126 (or ?v_29 (and ?v_27 ?v_127 ?v_128 ?v_112 ?v_129 ?v_130 (or ?v_88 (and ?v_86 (or ?v_113 (and ?v_131 ?v_132 ?v_114 ?v_133 (or (not ?v_115) (and ?v_115 ?v_134 ?v_135 ?v_136 ?v_137 ?v_138 (not ?v_116)))))))))))))))))))))))))) (and ?v_17 ?v_86 ?v_117 ?v_87 ?v_118 ?v_119 ?v_167 ?v_168 ?v_17 ?v_88))))))))))))))))))))) (and ?v_17 ?v_18 ?v_149 ?v_19 ?v_150 ?v_151 ?v_198 ?v_199 ?v_17 ?v_20))))))))))))))))))))) (and (or (and ?v_6 ?v_7 ?v_173 ?v_174 ?v_8 ?v_175 ?v_176 ?v_17 ?v_177 ?v_178 ?v_179 ?v_180 ?v_181 ?v_182 ?v_183 ?v_184 ?v_6 ?v_7 ?v_13 ?v_185 ?v_7 ?v_14 ?v_15 ?v_186 ?v_187 ?v_16 ?v_188 ?v_189 ?v_190 ?v_7 ?v_191 ?v_7 ?v_192 ?v_7 ?v_193 ?v_7 ?v_194 ?v_195 ?v_196 ?v_203 ?v_201 (= EC_13_ EC_12_) ?v_204) (and ?v_6 ?v_7 ?v_173 ?v_174 ?v_8 ?v_175 (or (and ?v_202 ?v_17 ?v_17 (= EC_52.5_1_ ecReturn)) (and ?v_176 ?v_17 ?v_177 ?v_178 ?v_179 ?v_180 ?v_181 ?v_182 ?v_183 ?v_184 ?v_6 ?v_7 ?v_13 ?v_185 ?v_7 ?v_14 ?v_15 ?v_186 ?v_187 ?v_16 ?v_188 ?v_189 ?v_190 ?v_7 ?v_191 ?v_7 ?v_192 ?v_7 ?v_193 ?v_7 ?v_194 ?v_195 ?v_196 ?v_203 (not ?v_201) (= EC_52.5_1_ EC_12_))) (= EC_52.5 EC_52.5_1_))) (not ?v_204))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/javafe.tc.FlowInsensitiveChecks.682.smt2 b/test/regress/regress0/quantifiers/javafe.tc.FlowInsensitiveChecks.682.smt2 new file mode 100644 index 000000000..2867e618f --- /dev/null +++ b/test/regress/regress0/quantifiers/javafe.tc.FlowInsensitiveChecks.682.smt2 @@ -0,0 +1,1193 @@ +(set-logic AUFLIA) +(set-info :source | Simplify Theorem Prover Benchmark Suite |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun true_term () Int) +(declare-fun false_term () Int) +(assert (= true_term 1)) +(assert (= false_term 0)) +(declare-fun S_select (Int Int) Int) +(declare-fun S_store (Int Int Int) Int) +(assert (forall ((?m Int) (?i Int) (?x Int)) (= (S_select (S_store ?m ?i ?x) ?i) ?x))) +(assert (forall ((?m Int) (?i Int) (?j Int) (?x Int)) (=> (not (= ?i ?j)) (= (S_select (S_store ?m ?i ?x) ?j) (S_select ?m ?j))))) +(declare-fun PO_LT (Int Int) Int) +(assert (forall ((?t Int)) (= (PO_LT ?t ?t) true_term))) +(declare-fun T_java_lang_Object () Int) +(assert (= (PO_LT T_java_lang_Object T_java_lang_Object) true_term)) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t2) true_term)) (= (PO_LT ?t0 ?t2) true_term)))) +(assert (forall ((?t0 Int) (?t1 Int)) (=> (and (= (PO_LT ?t0 ?t1) true_term) (= (PO_LT ?t1 ?t0) true_term)) (= ?t0 ?t1)))) +(declare-fun T_boolean () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_boolean) true_term) (= ?t T_boolean)))) +(declare-fun T_char () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_char) true_term) (= ?t T_char)))) +(declare-fun T_byte () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_byte) true_term) (= ?t T_byte)))) +(declare-fun T_short () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_short) true_term) (= ?t T_short)))) +(declare-fun T_int () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_int) true_term) (= ?t T_int)))) +(declare-fun T_long () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_long) true_term) (= ?t T_long)))) +(declare-fun T_float () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_float) true_term) (= ?t T_float)))) +(declare-fun T_double () Int) +(assert (forall ((?t Int)) (=> (= (PO_LT ?t T_double) true_term) (= ?t T_double)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_boolean ?t) true_term) (= ?t T_boolean)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_char ?t) true_term) (= ?t T_char)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_byte ?t) true_term) (= ?t T_byte)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_short ?t) true_term) (= ?t T_short)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_int ?t) true_term) (= ?t T_int)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_long ?t) true_term) (= ?t T_long)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_float ?t) true_term) (= ?t T_float)))) +(assert (forall ((?t Int)) (=> (= (PO_LT T_double ?t) true_term) (= ?t T_double)))) +(declare-fun asChild (Int Int) Int) +(declare-fun classDown (Int Int) Int) +(assert (forall ((?t0 Int) (?t1 Int) (?t2 Int)) (let ((?v_0 (asChild ?t1 ?t2))) (=> (= (PO_LT ?t0 ?v_0) true_term) (= (classDown ?t2 ?t0) ?v_0))))) +(declare-fun T_java_lang_Cloneable () Int) +(assert (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term)) +(declare-fun array (Int) Int) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) T_java_lang_Cloneable) true_term))) +(declare-fun elemtype (Int) Int) +(assert (forall ((?t Int)) (= (elemtype (array ?t)) ?t))) +(assert (forall ((?t0 Int) (?t1 Int)) (let ((?v_0 (elemtype ?t0))) (= (= (PO_LT ?t0 (array ?t1)) true_term) (and (= ?t0 (array ?v_0)) (= (PO_LT ?v_0 ?t1) true_term)))))) +(declare-fun is (Int Int) Int) +(declare-fun cast (Int Int) Int) +(assert (forall ((?x Int) (?t Int)) (= (is (cast ?x ?t) ?t) true_term))) +(assert (forall ((?x Int) (?t Int)) (=> (= (is ?x ?t) true_term) (= (cast ?x ?t) ?x)))) +(assert true) +(assert (forall ((?x Int)) (= (= (is ?x T_char) true_term) (and (<= 0 ?x) (<= ?x 65535))))) +(assert (forall ((?x Int)) (= (= (is ?x T_byte) true_term) (and (<= (- 128) ?x) (<= ?x 127))))) +(assert (forall ((?x Int)) (= (= (is ?x T_short) true_term) (and (<= (- 32768) ?x) (<= ?x 32767))))) +(declare-fun intFirst () Int) +(declare-fun intLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_int) true_term) (and (<= intFirst ?x) (<= ?x intLast))))) +(declare-fun longFirst () Int) +(declare-fun longLast () Int) +(assert (forall ((?x Int)) (= (= (is ?x T_long) true_term) (and (<= longFirst ?x) (<= ?x longLast))))) +(assert (< longFirst intFirst)) +(assert (< intFirst (- 1000000))) +(assert (< 1000000 intLast)) +(assert (< intLast longLast)) +(declare-fun null () Int) +(declare-fun typeof (Int) Int) +(assert (forall ((?x Int) (?t Int)) (=> (= (PO_LT ?t T_java_lang_Object) true_term) (= (= (is ?x ?t) true_term) (or (= ?x null) (= (PO_LT (typeof ?x) ?t) true_term)))))) +(declare-fun asField (Int Int) Int) +(assert (forall ((?f Int) (?t Int) (?x Int)) (= (is (S_select (asField ?f ?t) ?x) ?t) true_term))) +(declare-fun asElems (Int) Int) +(assert (forall ((?e Int) (?a Int) (?i Int)) (= (is (S_select (S_select (asElems ?e) ?a) ?i) (elemtype (typeof ?a))) true_term))) +(declare-fun vAllocTime (Int) Int) +(declare-fun isAllocated (Int Int) Int) +(assert (forall ((?x Int) (?a0 Int)) (= (= (isAllocated ?x ?a0) true_term) (< (vAllocTime ?x) ?a0)))) +(declare-fun fClosedTime (Int) Int) +(assert (forall ((?x Int) (?f Int) (?a0 Int)) (=> (and (< (fClosedTime ?f) ?a0) (= (isAllocated ?x ?a0) true_term)) (= (isAllocated (S_select ?f ?x) ?a0) true_term)))) +(declare-fun eClosedTime (Int) Int) +(assert (forall ((?a Int) (?e Int) (?i Int) (?a0 Int)) (=> (and (< (eClosedTime ?e) ?a0) (= (isAllocated ?a ?a0) true_term)) (= (isAllocated (S_select (S_select ?e ?a) ?i) ?a0) true_term)))) +(declare-fun asLockSet (Int) Int) +(declare-fun max (Int) Int) +(assert (forall ((?S Int)) (let ((?v_0 (asLockSet ?S))) (= (S_select ?v_0 (max ?v_0)) true_term)))) +(assert (forall ((?S Int)) (= (S_select (asLockSet ?S) null) true_term))) +(declare-fun lockLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun lockLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (lockLT ?x ?y) true_term) (< ?x ?y)))) +(assert (forall ((?S Int) (?mu Int)) (let ((?v_0 (asLockSet ?S))) (=> (= (S_select ?v_0 ?mu) true_term) (= (lockLE ?mu (max ?v_0)) true_term))))) +(assert (forall ((?x Int)) (=> (= (PO_LT (typeof ?x) T_java_lang_Object) true_term) (= (lockLE null ?x) true_term)))) +(declare-fun arrayLength (Int) Int) +(assert (forall ((?a Int)) (let ((?v_0 (arrayLength ?a))) (and (<= 0 ?v_0) (= (is ?v_0 T_int) true_term))))) +(declare-fun arrayFresh (Int Int Int Int Int Int Int) Int) +(declare-fun arrayShapeMore (Int Int) Int) +(declare-fun arrayParent (Int) Int) +(declare-fun arrayPosition (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?s Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeMore ?n ?s) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (let ((?v_0 (S_select (S_select ?e ?a) ?i))) (and (= (arrayFresh ?v_0 ?a0 ?b0 ?e ?s (elemtype ?T) ?v) true_term) (= (arrayParent ?v_0) ?a) (= (arrayPosition ?v_0) ?i)))))))) +(declare-fun arrayShapeOne (Int) Int) +(assert (forall ((?a Int) (?a0 Int) (?b0 Int) (?e Int) (?n Int) (?T Int) (?v Int)) (= (= (arrayFresh ?a ?a0 ?b0 ?e (arrayShapeOne ?n) ?T ?v) true_term) (and (<= ?a0 (vAllocTime ?a)) (= (isAllocated ?a ?b0) true_term) (not (= ?a null)) (= (typeof ?a) ?T) (= (arrayLength ?a) ?n) (forall ((?i Int)) (= (S_select (S_select ?e ?a) ?i) ?v)))))) +(declare-fun arrayType () Int) +(assert (= arrayType (asChild arrayType T_java_lang_Object))) +(assert (forall ((?t Int)) (= (PO_LT (array ?t) arrayType) true_term))) +(declare-fun isNewArray (Int) Int) +(assert (forall ((?s Int)) (=> (= true_term (isNewArray ?s)) (= (PO_LT (typeof ?s) arrayType) true_term)))) +(declare-fun boolAnd (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolAnd ?a ?b) true_term) (and (= ?a true_term) (= ?b true_term))))) +(declare-fun boolEq (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolEq ?a ?b) true_term) (= (= ?a true_term) (= ?b true_term))))) +(declare-fun boolImplies (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolImplies ?a ?b) true_term) (=> (= ?a true_term) (= ?b true_term))))) +(declare-fun boolNE (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolNE ?a ?b) true_term) (not (= (= ?a true_term) (= ?b true_term)))))) +(declare-fun boolNot (Int) Int) +(assert (forall ((?a Int)) (= (= (boolNot ?a) true_term) (not (= ?a true_term))))) +(declare-fun boolOr (Int Int) Int) +(assert (forall ((?a Int) (?b Int)) (= (= (boolOr ?a ?b) true_term) (or (= ?a true_term) (= ?b true_term))))) +(declare-fun integralEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun stringCat (Int Int) Int) +(declare-fun T_java_lang_String () Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (stringCat ?x ?y))) (and (not (= ?v_0 null)) (= (PO_LT (typeof ?v_0) T_java_lang_String) true_term))))) +(declare-fun integralGE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGE ?x ?y) true_term) (>= ?x ?y)))) +(declare-fun integralGT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralGT ?x ?y) true_term) (> ?x ?y)))) +(declare-fun integralLE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLE ?x ?y) true_term) (<= ?x ?y)))) +(declare-fun integralLT (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralLT ?x ?y) true_term) (< ?x ?y)))) +(declare-fun integralNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (integralNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun refEQ (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refEQ ?x ?y) true_term) (= ?x ?y)))) +(declare-fun refNE (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (= (= (refNE ?x ?y) true_term) (not (= ?x ?y))))) +(declare-fun nonnullelements (Int Int) Int) +(assert (forall ((?x Int) (?e Int)) (= (= (nonnullelements ?x ?e) true_term) (and (not (= ?x null)) (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i (arrayLength ?x))) (not (= (S_select (S_select ?e ?x) ?i) null)))))))) +(declare-fun classLiteral (Int) Int) +(declare-fun T_java_lang_Class () Int) +(declare-fun alloc () Int) +(assert (forall ((?t Int)) (let ((?v_0 (classLiteral ?t))) (and (not (= ?v_0 null)) (= (is ?v_0 T_java_lang_Class) true_term) (= (isAllocated ?v_0 alloc) true_term))))) +(declare-fun integralAnd (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (or (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralAnd ?x ?y))))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?x) (<= (integralAnd ?x ?y) ?x)))) +(assert (forall ((?x Int) (?y Int)) (=> (<= 0 ?y) (<= (integralAnd ?x ?y) ?y)))) +(declare-fun integralOr (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (let ((?v_0 (integralOr ?x ?y))) (=> (and (<= 0 ?x) (<= 0 ?y)) (and (<= ?x ?v_0) (<= ?y ?v_0)))))) +(declare-fun integralXor (Int Int) Int) +(assert (forall ((?x Int) (?y Int)) (=> (and (<= 0 ?x) (<= 0 ?y)) (<= 0 (integralXor ?x ?y))))) +(declare-fun intShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 31)) (<= 1 (intShiftL 1 ?n))))) +(declare-fun longShiftL (Int Int) Int) +(assert (forall ((?n Int)) (=> (and (<= 0 ?n) (< ?n 63)) (<= 1 (longShiftL 1 ?n))))) +(assert true) +(declare-fun T_javafe_ast_VarInitVec () Int) +(declare-fun T_javafe_ast_WhileStmt () Int) +(declare-fun T_javafe_ast_Stmt () Int) +(declare-fun T_javafe_ast_StmtVec () Int) +(declare-fun T_javafe_ast_ExprVec () Int) +(declare-fun T_javafe_ast_CastExpr () Int) +(declare-fun T_javafe_ast_Expr () Int) +(declare-fun T_javafe_ast_AmbiguousMethodInvocation () Int) +(declare-fun T_javafe_ast_TypeDecl () Int) +(declare-fun T_javafe_ast_ASTNode () Int) +(declare-fun T_javafe_ast_TypeDeclElem () Int) +(declare-fun T_java_lang_Throwable () Int) +(declare-fun T_java_io_Serializable () Int) +(declare-fun T_javafe_ast_LiteralExpr () Int) +(declare-fun T_javafe_ast_ImportDecl () Int) +(declare-fun T_javafe_ast_TryFinallyStmt () Int) +(declare-fun T_javafe_ast_InterfaceDecl () Int) +(declare-fun T_java_lang_RuntimeException () Int) +(declare-fun T_java_lang_Exception () Int) +(declare-fun T_javafe_ast_VariableAccess () Int) +(declare-fun T_javafe_tc_Types () Int) +(declare-fun T_javafe_ast_ThrowStmt () Int) +(declare-fun T_javafe_ast_PrimitiveType () Int) +(declare-fun T_javafe_ast_Type () Int) +(declare-fun T_javafe_tc_PrepTypeDeclaration () Int) +(declare-fun T_javafe_ast_ConstructorInvocation () Int) +(declare-fun T_javafe_ast_SwitchStmt () Int) +(declare-fun T_javafe_ast_GenericBlockStmt () Int) +(declare-fun T_javafe_ast_FormalParaDecl () Int) +(declare-fun T_javafe_ast_GenericVarDecl () Int) +(declare-fun T_javafe_tc_TagConstants () Int) +(declare-fun T_javafe_parser_TagConstants () Int) +(declare-fun T_java_util_EscjavaKeyValue () Int) +(declare-fun T_javafe_ast_CompilationUnit () Int) +(declare-fun T_javafe_ast_VarInit () Int) +(declare-fun T_java_lang_Integer () Int) +(declare-fun T_java_lang_Number () Int) +(declare-fun T_java_lang_Comparable () Int) +(declare-fun T_javafe_ast_ModifierPragmaVec () Int) +(declare-fun T_javafe_ast_TypeObjectDesignator () Int) +(declare-fun T_javafe_ast_ObjectDesignator () Int) +(declare-fun T_javafe_ast_CompoundName () Int) +(declare-fun T_javafe_ast_Name () Int) +(declare-fun T_javafe_ast_TryCatchStmt () Int) +(declare-fun T_javafe_ast_Modifiers () Int) +(declare-fun T_javafe_tc_FlowInsensitiveChecks () Int) +(declare-fun T_javafe_ast_TypeModifierPragma () Int) +(declare-fun T_javafe_ast_TypeNameVec () Int) +(declare-fun T_javafe_ast_ContinueStmt () Int) +(declare-fun T_javafe_ast_BranchStmt () Int) +(declare-fun T_javafe_ast_UnaryExpr () Int) +(declare-fun T_javafe_ast_NewInstanceExpr () Int) +(declare-fun T_javafe_ast_IfStmt () Int) +(declare-fun T_javafe_ast_TagConstants () Int) +(declare-fun T_javafe_ast_OperatorTags () Int) +(declare-fun T_javafe_ast_MethodInvocation () Int) +(declare-fun T_javafe_util_ErrorSet () Int) +(declare-fun T_javafe_ast_IdentifierVec () Int) +(declare-fun T_javafe_ast_RoutineDecl () Int) +(declare-fun T_javafe_ast_SimpleName () Int) +(declare-fun T_javafe_ast_TypeDeclElemPragma () Int) +(declare-fun T_javafe_tc_TypeSig () Int) +(declare-fun T_javafe_ast_SwitchLabel () Int) +(declare-fun T_javafe_ast_SkipStmt () Int) +(declare-fun T_javafe_tc_FieldDeclVec () Int) +(declare-fun T_javafe_tc_TypeSigVec () Int) +(declare-fun T_javafe_ast_ParenExpr () Int) +(declare-fun T_javafe_tc_Env () Int) +(declare-fun T_javafe_tc_EnvForLocalType () Int) +(declare-fun T_javafe_ast_ArrayInit () Int) +(declare-fun T_javafe_tc_LookupException () Int) +(declare-fun T_java_lang_Double () Int) +(declare-fun T_javafe_ast_GeneratedTags () Int) +(declare-fun T_javafe_ast_TypeName () Int) +(declare-fun T_javafe_ast_LocalVarDecl () Int) +(declare-fun T_javafe_util_Set () Int) +(declare-fun T_javafe_tc_MethodDeclVec () Int) +(declare-fun T_javafe_ast_ModifierPragma () Int) +(declare-fun T_javafe_ast_ReturnStmt () Int) +(declare-fun T_javafe_ast_FieldAccess () Int) +(declare-fun T_javafe_ast_BlockStmt () Int) +(declare-fun T_javafe_ast_Identifier () Int) +(declare-fun T_javafe_ast_OnDemandImportDecl () Int) +(declare-fun T_java_util_Map () Int) +(declare-fun T_javafe_util_Location () Int) +(declare-fun T_java_lang_ClassCastException () Int) +(declare-fun T_javafe_ast_InstanceOfExpr () Int) +(declare-fun T_javafe_ast_ThisExpr () Int) +(declare-fun T_javafe_ast_ClassDeclStmt () Int) +(declare-fun T_java_util_Dictionary () Int) +(declare-fun T_java_lang_Float () Int) +(declare-fun T_javafe_ast_InitBlock () Int) +(declare-fun T_javafe_tc_EnvForCU () Int) +(declare-fun T_javafe_ast_ClassDecl () Int) +(declare-fun T_javafe_ast_DoStmt () Int) +(declare-fun T_javafe_ast_BreakStmt () Int) +(declare-fun T_javafe_ast_ClassLiteral () Int) +(declare-fun T_javafe_ast_ConstructorDecl () Int) +(declare-fun T_javafe_tc_ConstantExpr () Int) +(declare-fun T_javafe_ast_BinaryExpr () Int) +(declare-fun T_javafe_ast_CatchClause () Int) +(declare-fun T_javafe_ast_ArrayRefExpr () Int) +(declare-fun T_javafe_ast_VarDeclStmt () Int) +(declare-fun T_java_util_Hashtable () Int) +(declare-fun T_javafe_ast_ArrayType () Int) +(declare-fun T_javafe_tc_EnvForLocals () Int) +(declare-fun T_javafe_ast_LabelStmt () Int) +(declare-fun T_javafe_util_Assert () Int) +(declare-fun T_javafe_ast_TypeDeclElemVec () Int) +(declare-fun T_javafe_ast_ExprObjectDesignator () Int) +(declare-fun T_javafe_ast_ASTDecoration () Int) +(declare-fun T_java_lang_Boolean () Int) +(declare-fun T_javafe_ast_CondExpr () Int) +(declare-fun T_javafe_ast_SingleTypeImportDecl () Int) +(declare-fun T_javafe_ast_FormalParaDeclVec () Int) +(declare-fun T_javafe_ast_AmbiguousVariableAccess () Int) +(declare-fun T_javafe_ast_SuperObjectDesignator () Int) +(declare-fun T_javafe_ast_MethodDecl () Int) +(declare-fun T_javafe_ast_EvalStmt () Int) +(declare-fun T_javafe_ast_SynchronizeStmt () Int) +(declare-fun T_javafe_util_StackVector () Int) +(declare-fun T_javafe_ast_ForStmt () Int) +(declare-fun T_javafe_ast_TypeModifierPragmaVec () Int) +(declare-fun T_javafe_ast_CatchClauseVec () Int) +(declare-fun T_javafe_ast_NewArrayExpr () Int) +(declare-fun T_javafe_ast_PrettyPrint () Int) +(declare-fun T_javafe_ast_FieldDecl () Int) +(declare-fun T_javafe_tc_EnvForTypeSig () Int) +(declare-fun T_java_lang_Long () Int) +(declare-fun T_javafe_ast_StmtPragma () Int) +(declare-fun DIST_ZERO_1 () Int) +(declare-fun T__TYPE () Int) +(declare-fun EQ_29_25_26 () Int) +(declare-fun ACC_FINAL_31_23_26 () Int) +(declare-fun RETURNSTMT_30_33_7 () Int) +(declare-fun NOT_29_56_26 () Int) +(declare-fun CLASSLITERAL_30_60_7 () Int) +(declare-fun ACC_STATIC_31_22_26 () Int) +(declare-fun NE_29_24_26 () Int) +(declare-fun EVALSTMT_30_32_7 () Int) +(declare-fun UNARYSUB_29_55_26 () Int) +(declare-fun METHODINVOCATION_30_59_7 () Int) +(declare-fun BITAND_29_23_26 () Int) +(declare-fun SYNCHRONIZESTMT_30_31_7 () Int) +(declare-fun UNARYADD_29_54_26 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_30_58_7 () Int) +(declare-fun otherCodes_27_202_27 () Int) +(declare-fun BITXOR_29_22_26 () Int) +(declare-fun DOSTMT_30_30_7 () Int) +(declare-fun ASGBITXOR_29_51_26 () Int) +(declare-fun FIELDACCESS_30_57_7 () Int) +(declare-fun punctuationStrings_27_134_22 () Int) +(declare-fun CHECKED_5_776_28 () Int) +(declare-fun BITOR_29_21_26 () Int) +(declare-fun WHILESTMT_30_29_7 () Int) +(declare-fun ASGBITOR_29_50_26 () Int) +(declare-fun PREPPED_5_775_28 () Int) +(declare-fun VARIABLEACCESS_30_56_7 () Int) +(declare-fun CLASSDECLSTMT_30_28_7 () Int) +(declare-fun ASGBITAND_29_49_26 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_30_55_7 () Int) +(declare-fun AND_29_20_26 () Int) +(declare-fun VARDECLSTMT_30_27_7 () Int) +(declare-fun ASGURSHIFT_29_48_26 () Int) +(declare-fun PARENEXPR_30_54_7 () Int) +(declare-fun NULLLIT_28_45_26 () Int) +(declare-fun PARSED_5_772_28 () Int) +(declare-fun OR_29_19_26 () Int) +(declare-fun SWITCHSTMT_30_26_7 () Int) +(declare-fun ASGRSHIFT_29_47_26 () Int) +(declare-fun CASTEXPR_30_53_7 () Int) +(declare-fun LAST_KEYWORD_27_103_26 () Int) +(declare-fun STRINGLIT_28_44_26 () Int) +(declare-fun BLOCKSTMT_30_25_7 () Int) +(declare-fun NULL_27_82_26 () Int) +(declare-fun ASGLSHIFT_29_46_26 () Int) +(declare-fun INSTANCEOFEXPR_30_52_7 () Int) +(declare-fun DOUBLELIT_28_43_26 () Int) +(declare-fun FORMALPARADECL_30_24_7 () Int) +(declare-fun map_5_301_35 () Int) +(declare-fun ASGSUB_29_45_26 () Int) +(declare-fun CONDEXPR_30_51_7 () Int) +(declare-fun otherStrings_27_193_30 () Int) +(declare-fun FLOATLIT_28_42_26 () Int) +(declare-fun FIELDDECL_30_23_7 () Int) +(declare-fun ASGADD_29_44_26 () Int) +(declare-fun NEWARRAYEXPR_30_50_7 () Int) +(declare-fun CHARLIT_28_41_26 () Int) +(declare-fun LOCALVARDECL_30_22_7 () Int) +(declare-fun whereDecoration_20_597_41 () Int) +(declare-fun ASGREM_29_43_26 () Int) +(declare-fun NEWINSTANCEEXPR_30_49_7 () Int) +(declare-fun LONGLIT_28_40_26 () Int) +(declare-fun INITBLOCK_30_21_7 () Int) +(declare-fun ASGDIV_29_42_26 () Int) +(declare-fun ARRAYREFEXPR_30_48_7 () Int) +(declare-fun INTLIT_28_39_26 () Int) +(declare-fun METHODDECL_30_20_7 () Int) +(declare-fun ASGMUL_29_41_26 () Int) +(declare-fun THISEXPR_30_47_7 () Int) +(declare-fun BOOLEANLIT_28_38_26 () Int) +(declare-fun CONSTRUCTORDECL_30_19_7 () Int) +(declare-fun ASSIGN_29_40_26 () Int) +(declare-fun TYPEMODIFIERPRAGMA_27_28_26 () Int) +(declare-fun ARRAYINIT_30_46_7 () Int) +(declare-fun SHORTTYPE_28_36_26 () Int) +(declare-fun INTERFACEDECL_30_18_7 () Int) +(declare-fun TYPESIG_26_6_28 () Int) +(declare-fun STAR_29_37_26 () Int) +(declare-fun CATCHCLAUSE_30_45_7 () Int) +(declare-fun NOTACCESSIBLE_86_13_26 () Int) +(declare-fun TYPEDECLELEMPRAGMA_27_27_26 () Int) +(declare-fun BYTETYPE_28_35_26 () Int) +(declare-fun CLASSDECL_30_17_7 () Int) +(declare-fun MOD_29_36_26 () Int) +(declare-fun BADTYPECOMBO_86_12_26 () Int) +(declare-fun CONSTRUCTORINVOCATION_30_44_7 () Int) +(declare-fun NULLTYPE_28_34_26 () Int) +(declare-fun STMTPRAGMA_27_26_26 () Int) +(declare-fun ONDEMANDIMPORTDECL_30_16_7 () Int) +(declare-fun DIV_29_35_26 () Int) +(declare-fun TRYCATCHSTMT_30_43_7 () Int) +(declare-fun VOIDTYPE_28_33_26 () Int) +(declare-fun SINGLETYPEIMPORTDECL_30_15_7 () Int) +(declare-fun SUB_29_34_26 () Int) +(declare-fun AMBIGUOUS_86_11_26 () Int) +(declare-fun MODIFIERPRAGMA_27_25_26 () Int) +(declare-fun TRYFINALLYSTMT_30_42_7 () Int) +(declare-fun DOUBLETYPE_28_32_26 () Int) +(declare-fun NOTFOUND_86_10_26 () Int) +(declare-fun COMPILATIONUNIT_30_14_7 () Int) +(declare-fun ADD_29_33_26 () Int) +(declare-fun FIRST_KEYWORD_27_51_26 () Int) +(declare-fun SWITCHLABEL_30_41_7 () Int) +(declare-fun LEXICALPRAGMA_27_24_26 () Int) +(declare-fun FLOATTYPE_28_31_26 () Int) +(declare-fun URSHIFT_29_32_26 () Int) +(declare-fun SKIPSTMT_30_40_7 () Int) +(declare-fun COMPOUNDNAME_30_67_7 () Int) +(declare-fun CHARTYPE_28_30_26 () Int) +(declare-fun RSHIFT_29_31_26 () Int) +(declare-fun FORSTMT_30_39_7 () Int) +(declare-fun SIMPLENAME_30_66_7 () Int) +(declare-fun LONGTYPE_28_29_26 () Int) +(declare-fun LSHIFT_29_30_26 () Int) +(declare-fun IFSTMT_30_38_7 () Int) +(declare-fun POSTFIXDEC_29_63_26 () Int) +(declare-fun ARRAYTYPE_30_65_7 () Int) +(declare-fun INTTYPE_28_28_26 () Int) +(declare-fun LT_29_29_26 () Int) +(declare-fun LABELSTMT_30_37_7 () Int) +(declare-fun POSTFIXINC_29_62_26 () Int) +(declare-fun noTokens_27_212_27 () Int) +(declare-fun TYPENAME_30_64_7 () Int) +(declare-fun BOOLEANTYPE_28_27_26 () Int) +(declare-fun LE_29_28_26 () Int) +(declare-fun CONTINUESTMT_30_36_7 () Int) +(declare-fun punctuationCodes_27_164_19 () Int) +(declare-fun DEC_29_59_26 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_30_63_7 () Int) +(declare-fun IDENT_28_25_26 () Int) +(declare-fun GT_29_27_26 () Int) +(declare-fun BREAKSTMT_30_35_7 () Int) +(declare-fun INC_29_58_26 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_30_62_7 () Int) +(declare-fun sigDecoration_5_104_38 () Int) +(declare-fun GE_29_26_26 () Int) +(declare-fun keywordStrings_27_181_30 () Int) +(declare-fun THROWSTMT_30_34_7 () Int) +(declare-fun NULL_44_60_26 () Int) +(declare-fun BITNOT_29_57_26 () Int) +(declare-fun EXPROBJECTDESIGNATOR_30_61_7 () Int) +(assert (let ((?v_0 (array T_int)) (?v_1 (array T_java_lang_String))) (and (= (PO_LT T_javafe_ast_VarInitVec T_java_lang_Object) true_term) (= T_javafe_ast_VarInitVec (asChild T_javafe_ast_VarInitVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_WhileStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_WhileStmt (asChild T_javafe_ast_WhileStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_StmtVec T_java_lang_Object) true_term) (= T_javafe_ast_StmtVec (asChild T_javafe_ast_StmtVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ExprVec T_java_lang_Object) true_term) (= T_javafe_ast_ExprVec (asChild T_javafe_ast_ExprVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_CastExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CastExpr (asChild T_javafe_ast_CastExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousMethodInvocation (asChild T_javafe_ast_AmbiguousMethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeDecl (asChild T_javafe_ast_TypeDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_java_lang_Throwable T_java_lang_Object) true_term) (= T_java_lang_Throwable (asChild T_java_lang_Throwable T_java_lang_Object)) (= (PO_LT T_java_lang_Throwable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_LiteralExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_LiteralExpr (asChild T_javafe_ast_LiteralExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ImportDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ImportDecl (asChild T_javafe_ast_ImportDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryFinallyStmt (asChild T_javafe_ast_TryFinallyStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_InterfaceDecl (asChild T_javafe_ast_InterfaceDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_java_lang_RuntimeException T_java_lang_Exception) true_term) (= T_java_lang_RuntimeException (asChild T_java_lang_RuntimeException T_java_lang_Exception)) (= (PO_LT T_javafe_ast_VariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_VariableAccess (asChild T_javafe_ast_VariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_tc_Types T_java_lang_Object) true_term) (= T_javafe_tc_Types (asChild T_javafe_tc_Types T_java_lang_Object)) (= (PO_LT T_javafe_ast_ThrowStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ThrowStmt (asChild T_javafe_ast_ThrowStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_PrimitiveType T_javafe_ast_Type) true_term) (= T_javafe_ast_PrimitiveType (asChild T_javafe_ast_PrimitiveType T_javafe_ast_Type)) (= (PO_LT T_javafe_tc_PrepTypeDeclaration T_java_lang_Object) true_term) (= T_javafe_tc_PrepTypeDeclaration (asChild T_javafe_tc_PrepTypeDeclaration T_java_lang_Object)) (= (PO_LT T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ConstructorInvocation (asChild T_javafe_ast_ConstructorInvocation T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_SwitchStmt (asChild T_javafe_ast_SwitchStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FormalParaDecl (asChild T_javafe_ast_FormalParaDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_tc_TagConstants T_javafe_parser_TagConstants) true_term) (= T_javafe_tc_TagConstants (asChild T_javafe_tc_TagConstants T_javafe_parser_TagConstants)) (= (PO_LT T_java_util_EscjavaKeyValue T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CompilationUnit (asChild T_javafe_ast_CompilationUnit T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_Expr T_javafe_ast_VarInit) true_term) (= T_javafe_ast_Expr (asChild T_javafe_ast_Expr T_javafe_ast_VarInit)) (= (PO_LT T_java_lang_Integer T_java_lang_Number) true_term) (= T_java_lang_Integer (asChild T_java_lang_Integer T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Integer) true_term) (= ?t T_java_lang_Integer))) (= (PO_LT T_java_lang_Integer T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_ModifierPragmaVec T_java_lang_Object) true_term) (= T_javafe_ast_ModifierPragmaVec (asChild T_javafe_ast_ModifierPragmaVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_TypeObjectDesignator (asChild T_javafe_ast_TypeObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_CompoundName T_javafe_ast_Name) true_term) (= T_javafe_ast_CompoundName (asChild T_javafe_ast_CompoundName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_TryCatchStmt (asChild T_javafe_ast_TryCatchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_Modifiers T_java_lang_Object) true_term) (= T_javafe_ast_Modifiers (asChild T_javafe_ast_Modifiers T_java_lang_Object)) (= (PO_LT T_javafe_tc_FlowInsensitiveChecks T_java_lang_Object) true_term) (= T_javafe_tc_FlowInsensitiveChecks (asChild T_javafe_tc_FlowInsensitiveChecks T_java_lang_Object)) (= (PO_LT T_javafe_ast_TypeModifierPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeModifierPragma (asChild T_javafe_ast_TypeModifierPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeNameVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeNameVec (asChild T_javafe_ast_TypeNameVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_GenericVarDecl (asChild T_javafe_ast_GenericVarDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_ContinueStmt (asChild T_javafe_ast_ContinueStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_javafe_ast_UnaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_UnaryExpr (asChild T_javafe_ast_UnaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewInstanceExpr (asChild T_javafe_ast_NewInstanceExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_IfStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_IfStmt (asChild T_javafe_ast_IfStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TypeDeclElem T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_TagConstants T_javafe_ast_OperatorTags) true_term) (= T_javafe_ast_TagConstants (asChild T_javafe_ast_TagConstants T_javafe_ast_OperatorTags)) (= (PO_LT T_javafe_ast_MethodInvocation T_javafe_ast_Expr) true_term) (= T_javafe_ast_MethodInvocation (asChild T_javafe_ast_MethodInvocation T_javafe_ast_Expr)) (= (PO_LT T_java_lang_String T_java_lang_Object) true_term) (= T_java_lang_String (asChild T_java_lang_String T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_String) true_term) (= ?t T_java_lang_String))) (= (PO_LT T_java_lang_String T_java_io_Serializable) true_term) (= (PO_LT T_java_lang_String T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_util_ErrorSet T_java_lang_Object) true_term) (= T_javafe_util_ErrorSet (asChild T_javafe_util_ErrorSet T_java_lang_Object)) (= (PO_LT T_javafe_parser_TagConstants T_javafe_ast_TagConstants) true_term) (= T_javafe_parser_TagConstants (asChild T_javafe_parser_TagConstants T_javafe_ast_TagConstants)) (= (PO_LT T_java_lang_Exception T_java_lang_Throwable) true_term) (= T_java_lang_Exception (asChild T_java_lang_Exception T_java_lang_Throwable)) (= (PO_LT T_javafe_ast_IdentifierVec T_java_lang_Object) true_term) (= T_javafe_ast_IdentifierVec (asChild T_javafe_ast_IdentifierVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_RoutineDecl (asChild T_javafe_ast_RoutineDecl T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_RoutineDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_ast_SimpleName T_javafe_ast_Name) true_term) (= T_javafe_ast_SimpleName (asChild T_javafe_ast_SimpleName T_javafe_ast_Name)) (= (PO_LT T_javafe_ast_TypeDeclElemPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_TypeDeclElemPragma (asChild T_javafe_ast_TypeDeclElemPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeDeclElemPragma T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_tc_TypeSig T_javafe_ast_Type) true_term) (= T_javafe_tc_TypeSig (asChild T_javafe_tc_TypeSig T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_SwitchLabel T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SwitchLabel (asChild T_javafe_ast_SwitchLabel T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_SkipStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SkipStmt (asChild T_javafe_ast_SkipStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_tc_FieldDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_FieldDeclVec (asChild T_javafe_tc_FieldDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_tc_TypeSigVec T_java_lang_Object) true_term) (= T_javafe_tc_TypeSigVec (asChild T_javafe_tc_TypeSigVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ParenExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ParenExpr (asChild T_javafe_ast_ParenExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_tc_Env T_java_lang_Object) true_term) (= T_javafe_tc_Env (asChild T_javafe_tc_Env T_java_lang_Object)) (= (PO_LT T_javafe_ast_BranchStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_BranchStmt (asChild T_javafe_ast_BranchStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_tc_EnvForLocalType T_javafe_tc_Env) true_term) (= T_javafe_tc_EnvForLocalType (asChild T_javafe_tc_EnvForLocalType T_javafe_tc_Env)) (= (PO_LT T_javafe_tc_EnvForLocalType T_java_lang_Cloneable) true_term) (= (PO_LT T_javafe_ast_ArrayInit T_javafe_ast_VarInit) true_term) (= T_javafe_ast_ArrayInit (asChild T_javafe_ast_ArrayInit T_javafe_ast_VarInit)) (= (PO_LT T_javafe_tc_LookupException T_java_lang_Exception) true_term) (= T_javafe_tc_LookupException (asChild T_javafe_tc_LookupException T_java_lang_Exception)) (= (PO_LT T_java_lang_Double T_java_lang_Number) true_term) (= T_java_lang_Double (asChild T_java_lang_Double T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Double) true_term) (= ?t T_java_lang_Double))) (= (PO_LT T_java_lang_Double T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_OperatorTags T_java_lang_Object) true_term) (= T_javafe_ast_OperatorTags (asChild T_javafe_ast_OperatorTags T_java_lang_Object)) (= (PO_LT T_javafe_ast_OperatorTags T_javafe_ast_GeneratedTags) true_term) (= (PO_LT T_javafe_ast_VarInit T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_VarInit (asChild T_javafe_ast_VarInit T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_TypeName T_javafe_ast_Type) true_term) (= T_javafe_ast_TypeName (asChild T_javafe_ast_TypeName T_javafe_ast_Type)) (= (PO_LT T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_LocalVarDecl (asChild T_javafe_ast_LocalVarDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_util_Set T_java_lang_Object) true_term) (= T_javafe_util_Set (asChild T_javafe_util_Set T_java_lang_Object)) (= (PO_LT T_javafe_util_Set T_java_lang_Cloneable) true_term) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Object) true_term) (= T_javafe_ast_ASTNode (asChild T_javafe_ast_ASTNode T_java_lang_Object)) (= (PO_LT T_javafe_ast_ASTNode T_java_lang_Cloneable) true_term) (= (PO_LT T_javafe_tc_MethodDeclVec T_java_lang_Object) true_term) (= T_javafe_tc_MethodDeclVec (asChild T_javafe_tc_MethodDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_ModifierPragma T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ModifierPragma (asChild T_javafe_ast_ModifierPragma T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ReturnStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ReturnStmt (asChild T_javafe_ast_ReturnStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_FieldAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_FieldAccess (asChild T_javafe_ast_FieldAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt) true_term) (= T_javafe_ast_BlockStmt (asChild T_javafe_ast_BlockStmt T_javafe_ast_GenericBlockStmt)) (= (PO_LT T_javafe_ast_Identifier T_java_lang_Object) true_term) (= T_javafe_ast_Identifier (asChild T_javafe_ast_Identifier T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_javafe_ast_Identifier) true_term) (= ?t T_javafe_ast_Identifier))) (= (PO_LT T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_OnDemandImportDecl (asChild T_javafe_ast_OnDemandImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_java_util_Map T_java_lang_Object) true_term) (= (PO_LT T_java_util_Map T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_ObjectDesignator (asChild T_javafe_ast_ObjectDesignator T_javafe_ast_ASTNode)) (= (PO_LT T_java_lang_Comparable T_java_lang_Object) true_term) (= (PO_LT T_javafe_util_Location T_java_lang_Object) true_term) (= T_javafe_util_Location (asChild T_javafe_util_Location T_java_lang_Object)) (= (PO_LT T_java_lang_ClassCastException T_java_lang_RuntimeException) true_term) (= T_java_lang_ClassCastException (asChild T_java_lang_ClassCastException T_java_lang_RuntimeException)) (= (PO_LT T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_InstanceOfExpr (asChild T_javafe_ast_InstanceOfExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ThisExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ThisExpr (asChild T_javafe_ast_ThisExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ClassDeclStmt (asChild T_javafe_ast_ClassDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_util_Dictionary T_java_lang_Object) true_term) (= T_java_util_Dictionary (asChild T_java_util_Dictionary T_java_lang_Object)) (= (PO_LT T_java_util_Dictionary T_java_util_EscjavaKeyValue) true_term) (= (PO_LT T_java_lang_Float T_java_lang_Number) true_term) (= T_java_lang_Float (asChild T_java_lang_Float T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Float) true_term) (= ?t T_java_lang_Float))) (= (PO_LT T_java_lang_Float T_java_lang_Comparable) true_term) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_InitBlock (asChild T_javafe_ast_InitBlock T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_InitBlock T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_tc_EnvForCU T_javafe_tc_Env) true_term) (= T_javafe_tc_EnvForCU (asChild T_javafe_tc_EnvForCU T_javafe_tc_Env)) (= (PO_LT T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl) true_term) (= T_javafe_ast_ClassDecl (asChild T_javafe_ast_ClassDecl T_javafe_ast_TypeDecl)) (= (PO_LT T_javafe_ast_DoStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_DoStmt (asChild T_javafe_ast_DoStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_io_Serializable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt) true_term) (= T_javafe_ast_BreakStmt (asChild T_javafe_ast_BreakStmt T_javafe_ast_BranchStmt)) (= (PO_LT T_javafe_ast_ClassLiteral T_javafe_ast_Expr) true_term) (= T_javafe_ast_ClassLiteral (asChild T_javafe_ast_ClassLiteral T_javafe_ast_Expr)) (= (PO_LT T_java_lang_Cloneable T_java_lang_Object) true_term) (= (PO_LT T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_ConstructorDecl (asChild T_javafe_ast_ConstructorDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_javafe_tc_ConstantExpr T_java_lang_Object) true_term) (= T_javafe_tc_ConstantExpr (asChild T_javafe_tc_ConstantExpr T_java_lang_Object)) (= (PO_LT T_javafe_ast_BinaryExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_BinaryExpr (asChild T_javafe_ast_BinaryExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_Name T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Name (asChild T_javafe_ast_Name T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_CatchClause T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_CatchClause (asChild T_javafe_ast_CatchClause T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_ArrayRefExpr (asChild T_javafe_ast_ArrayRefExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_VarDeclStmt (asChild T_javafe_ast_VarDeclStmt T_javafe_ast_Stmt)) (= (PO_LT T_java_util_Hashtable T_java_util_Dictionary) true_term) (= T_java_util_Hashtable (asChild T_java_util_Hashtable T_java_util_Dictionary)) (= (PO_LT T_java_util_Hashtable T_java_util_Map) true_term) (= (PO_LT T_java_util_Hashtable T_java_lang_Cloneable) true_term) (= (PO_LT T_java_util_Hashtable T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_ArrayType T_javafe_ast_Type) true_term) (= T_javafe_ast_ArrayType (asChild T_javafe_ast_ArrayType T_javafe_ast_Type)) (= (PO_LT T_javafe_tc_EnvForLocals T_javafe_tc_Env) true_term) (= T_javafe_tc_EnvForLocals (asChild T_javafe_tc_EnvForLocals T_javafe_tc_Env)) (= (PO_LT T_javafe_tc_EnvForLocals T_java_lang_Cloneable) true_term) (= (PO_LT T_javafe_ast_LabelStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_LabelStmt (asChild T_javafe_ast_LabelStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_GeneratedTags T_java_lang_Object) true_term) (= (PO_LT T_javafe_util_Assert T_java_lang_Object) true_term) (= T_javafe_util_Assert (asChild T_javafe_util_Assert T_java_lang_Object)) (= (PO_LT T_javafe_ast_TypeDeclElemVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeDeclElemVec (asChild T_javafe_ast_TypeDeclElemVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_Stmt T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Stmt (asChild T_javafe_ast_Stmt T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_ExprObjectDesignator (asChild T_javafe_ast_ExprObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_GenericBlockStmt (asChild T_javafe_ast_GenericBlockStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_ASTDecoration T_java_lang_Object) true_term) (= T_javafe_ast_ASTDecoration (asChild T_javafe_ast_ASTDecoration T_java_lang_Object)) (= (PO_LT T_java_lang_Boolean T_java_lang_Object) true_term) (= T_java_lang_Boolean (asChild T_java_lang_Boolean T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Boolean) true_term) (= ?t T_java_lang_Boolean))) (= (PO_LT T_java_lang_Boolean T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_CondExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_CondExpr (asChild T_javafe_ast_CondExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl) true_term) (= T_javafe_ast_SingleTypeImportDecl (asChild T_javafe_ast_SingleTypeImportDecl T_javafe_ast_ImportDecl)) (= (PO_LT T_javafe_ast_FormalParaDeclVec T_java_lang_Object) true_term) (= T_javafe_ast_FormalParaDeclVec (asChild T_javafe_ast_FormalParaDeclVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr) true_term) (= T_javafe_ast_AmbiguousVariableAccess (asChild T_javafe_ast_AmbiguousVariableAccess T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator) true_term) (= T_javafe_ast_SuperObjectDesignator (asChild T_javafe_ast_SuperObjectDesignator T_javafe_ast_ObjectDesignator)) (= (PO_LT T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl) true_term) (= T_javafe_ast_MethodDecl (asChild T_javafe_ast_MethodDecl T_javafe_ast_RoutineDecl)) (= (PO_LT T_javafe_ast_EvalStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_EvalStmt (asChild T_javafe_ast_EvalStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_SynchronizeStmt (asChild T_javafe_ast_SynchronizeStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_util_StackVector T_java_lang_Object) true_term) (= T_javafe_util_StackVector (asChild T_javafe_util_StackVector T_java_lang_Object)) (forall ((?t Int)) (= (= (PO_LT ?t T_javafe_util_StackVector) true_term) (= ?t T_javafe_util_StackVector))) (= (PO_LT T_javafe_ast_ForStmt T_javafe_ast_Stmt) true_term) (= T_javafe_ast_ForStmt (asChild T_javafe_ast_ForStmt T_javafe_ast_Stmt)) (= (PO_LT T_javafe_ast_TypeModifierPragmaVec T_java_lang_Object) true_term) (= T_javafe_ast_TypeModifierPragmaVec (asChild T_javafe_ast_TypeModifierPragmaVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_Type T_javafe_ast_ASTNode) true_term) (= T_javafe_ast_Type (asChild T_javafe_ast_Type T_javafe_ast_ASTNode)) (= (PO_LT T_javafe_ast_CatchClauseVec T_java_lang_Object) true_term) (= T_javafe_ast_CatchClauseVec (asChild T_javafe_ast_CatchClauseVec T_java_lang_Object)) (= (PO_LT T_javafe_ast_NewArrayExpr T_javafe_ast_Expr) true_term) (= T_javafe_ast_NewArrayExpr (asChild T_javafe_ast_NewArrayExpr T_javafe_ast_Expr)) (= (PO_LT T_javafe_ast_PrettyPrint T_java_lang_Object) true_term) (= T_javafe_ast_PrettyPrint (asChild T_javafe_ast_PrettyPrint T_java_lang_Object)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl) true_term) (= T_javafe_ast_FieldDecl (asChild T_javafe_ast_FieldDecl T_javafe_ast_GenericVarDecl)) (= (PO_LT T_javafe_ast_FieldDecl T_javafe_ast_TypeDeclElem) true_term) (= (PO_LT T_javafe_tc_EnvForTypeSig T_javafe_tc_Env) true_term) (= T_javafe_tc_EnvForTypeSig (asChild T_javafe_tc_EnvForTypeSig T_javafe_tc_Env)) (= (PO_LT T_java_lang_Long T_java_lang_Number) true_term) (= T_java_lang_Long (asChild T_java_lang_Long T_java_lang_Number)) (forall ((?t Int)) (= (= (PO_LT ?t T_java_lang_Long) true_term) (= ?t T_java_lang_Long))) (= (PO_LT T_java_lang_Long T_java_lang_Comparable) true_term) (= (PO_LT T_java_lang_Number T_java_lang_Object) true_term) (= T_java_lang_Number (asChild T_java_lang_Number T_java_lang_Object)) (= (PO_LT T_java_lang_Number T_java_io_Serializable) true_term) (= (PO_LT T_javafe_ast_StmtPragma T_javafe_ast_Stmt) true_term) (= T_javafe_ast_StmtPragma (asChild T_javafe_ast_StmtPragma T_javafe_ast_Stmt)) (and (= arrayType (+ DIST_ZERO_1 0)) (= T_boolean (+ DIST_ZERO_1 1)) (= T_char (+ DIST_ZERO_1 2)) (= T_byte (+ DIST_ZERO_1 3)) (= T_short (+ DIST_ZERO_1 4)) (= T_int (+ DIST_ZERO_1 5)) (= T_long (+ DIST_ZERO_1 6)) (= T_float (+ DIST_ZERO_1 7)) (= T_double (+ DIST_ZERO_1 8)) (= T__TYPE (+ DIST_ZERO_1 9)) (= T_javafe_ast_VarInitVec (+ DIST_ZERO_1 10)) (= T_javafe_ast_WhileStmt (+ DIST_ZERO_1 11)) (= T_javafe_ast_StmtVec (+ DIST_ZERO_1 12)) (= T_javafe_ast_ExprVec (+ DIST_ZERO_1 13)) (= T_javafe_ast_CastExpr (+ DIST_ZERO_1 14)) (= T_javafe_ast_AmbiguousMethodInvocation (+ DIST_ZERO_1 15)) (= T_javafe_ast_TypeDecl (+ DIST_ZERO_1 16)) (= T_java_lang_Throwable (+ DIST_ZERO_1 17)) (= T_javafe_ast_LiteralExpr (+ DIST_ZERO_1 18)) (= T_javafe_ast_ImportDecl (+ DIST_ZERO_1 19)) (= T_javafe_ast_TryFinallyStmt (+ DIST_ZERO_1 20)) (= T_javafe_ast_InterfaceDecl (+ DIST_ZERO_1 21)) (= T_java_lang_RuntimeException (+ DIST_ZERO_1 22)) (= T_javafe_ast_VariableAccess (+ DIST_ZERO_1 23)) (= T_javafe_tc_Types (+ DIST_ZERO_1 24)) (= T_javafe_ast_ThrowStmt (+ DIST_ZERO_1 25)) (= T_javafe_ast_PrimitiveType (+ DIST_ZERO_1 26)) (= T_javafe_tc_PrepTypeDeclaration (+ DIST_ZERO_1 27)) (= T_javafe_ast_ConstructorInvocation (+ DIST_ZERO_1 28)) (= T_javafe_ast_SwitchStmt (+ DIST_ZERO_1 29)) (= T_javafe_ast_FormalParaDecl (+ DIST_ZERO_1 30)) (= T_javafe_tc_TagConstants (+ DIST_ZERO_1 31)) (= T_java_util_EscjavaKeyValue (+ DIST_ZERO_1 32)) (= T_javafe_ast_CompilationUnit (+ DIST_ZERO_1 33)) (= T_javafe_ast_Expr (+ DIST_ZERO_1 34)) (= T_java_lang_Integer (+ DIST_ZERO_1 35)) (= T_javafe_ast_ModifierPragmaVec (+ DIST_ZERO_1 36)) (= T_javafe_ast_TypeObjectDesignator (+ DIST_ZERO_1 37)) (= T_javafe_ast_CompoundName (+ DIST_ZERO_1 38)) (= T_javafe_ast_TryCatchStmt (+ DIST_ZERO_1 39)) (= T_javafe_ast_Modifiers (+ DIST_ZERO_1 40)) (= T_javafe_tc_FlowInsensitiveChecks (+ DIST_ZERO_1 41)) (= T_javafe_ast_TypeModifierPragma (+ DIST_ZERO_1 42)) (= T_javafe_ast_TypeNameVec (+ DIST_ZERO_1 43)) (= T_javafe_ast_GenericVarDecl (+ DIST_ZERO_1 44)) (= T_javafe_ast_ContinueStmt (+ DIST_ZERO_1 45)) (= T_javafe_ast_UnaryExpr (+ DIST_ZERO_1 46)) (= T_javafe_ast_NewInstanceExpr (+ DIST_ZERO_1 47)) (= T_javafe_ast_IfStmt (+ DIST_ZERO_1 48)) (= T_javafe_ast_TypeDeclElem (+ DIST_ZERO_1 49)) (= T_javafe_ast_TagConstants (+ DIST_ZERO_1 50)) (= T_javafe_ast_MethodInvocation (+ DIST_ZERO_1 51)) (= T_java_lang_String (+ DIST_ZERO_1 52)) (= T_javafe_util_ErrorSet (+ DIST_ZERO_1 53)) (= T_javafe_parser_TagConstants (+ DIST_ZERO_1 54)) (= T_java_lang_Exception (+ DIST_ZERO_1 55)) (= T_javafe_ast_IdentifierVec (+ DIST_ZERO_1 56)) (= T_javafe_ast_RoutineDecl (+ DIST_ZERO_1 57)) (= T_javafe_ast_SimpleName (+ DIST_ZERO_1 58)) (= T_javafe_ast_TypeDeclElemPragma (+ DIST_ZERO_1 59)) (= T_javafe_tc_TypeSig (+ DIST_ZERO_1 60)) (= T_javafe_ast_SwitchLabel (+ DIST_ZERO_1 61)) (= T_javafe_ast_SkipStmt (+ DIST_ZERO_1 62)) (= T_javafe_tc_FieldDeclVec (+ DIST_ZERO_1 63)) (= T_javafe_tc_TypeSigVec (+ DIST_ZERO_1 64)) (= T_javafe_ast_ParenExpr (+ DIST_ZERO_1 65)) (= T_javafe_tc_Env (+ DIST_ZERO_1 66)) (= T_javafe_ast_BranchStmt (+ DIST_ZERO_1 67)) (= T_javafe_tc_EnvForLocalType (+ DIST_ZERO_1 68)) (= T_javafe_ast_ArrayInit (+ DIST_ZERO_1 69)) (= T_javafe_tc_LookupException (+ DIST_ZERO_1 70)) (= T_java_lang_Double (+ DIST_ZERO_1 71)) (= T_javafe_ast_OperatorTags (+ DIST_ZERO_1 72)) (= T_javafe_ast_VarInit (+ DIST_ZERO_1 73)) (= T_javafe_ast_TypeName (+ DIST_ZERO_1 74)) (= T_javafe_ast_LocalVarDecl (+ DIST_ZERO_1 75)) (= T_javafe_util_Set (+ DIST_ZERO_1 76)) (= T_javafe_ast_ASTNode (+ DIST_ZERO_1 77)) (= T_javafe_tc_MethodDeclVec (+ DIST_ZERO_1 78)) (= T_javafe_ast_ModifierPragma (+ DIST_ZERO_1 79)) (= T_javafe_ast_ReturnStmt (+ DIST_ZERO_1 80)) (= T_javafe_ast_FieldAccess (+ DIST_ZERO_1 81)) (= T_javafe_ast_BlockStmt (+ DIST_ZERO_1 82)) (= T_javafe_ast_Identifier (+ DIST_ZERO_1 83)) (= T_javafe_ast_OnDemandImportDecl (+ DIST_ZERO_1 84)) (= T_java_util_Map (+ DIST_ZERO_1 85)) (= T_javafe_ast_ObjectDesignator (+ DIST_ZERO_1 86)) (= T_java_lang_Comparable (+ DIST_ZERO_1 87)) (= T_javafe_util_Location (+ DIST_ZERO_1 88)) (= T_java_lang_ClassCastException (+ DIST_ZERO_1 89)) (= T_javafe_ast_InstanceOfExpr (+ DIST_ZERO_1 90)) (= T_javafe_ast_ThisExpr (+ DIST_ZERO_1 91)) (= T_javafe_ast_ClassDeclStmt (+ DIST_ZERO_1 92)) (= T_java_util_Dictionary (+ DIST_ZERO_1 93)) (= T_java_lang_Float (+ DIST_ZERO_1 94)) (= T_javafe_ast_InitBlock (+ DIST_ZERO_1 95)) (= T_javafe_tc_EnvForCU (+ DIST_ZERO_1 96)) (= T_javafe_ast_ClassDecl (+ DIST_ZERO_1 97)) (= T_javafe_ast_DoStmt (+ DIST_ZERO_1 98)) (= T_java_io_Serializable (+ DIST_ZERO_1 99)) (= T_javafe_ast_BreakStmt (+ DIST_ZERO_1 100)) (= T_java_lang_Object (+ DIST_ZERO_1 101)) (= T_javafe_ast_ClassLiteral (+ DIST_ZERO_1 102)) (= T_java_lang_Cloneable (+ DIST_ZERO_1 103)) (= T_javafe_ast_ConstructorDecl (+ DIST_ZERO_1 104)) (= T_javafe_tc_ConstantExpr (+ DIST_ZERO_1 105)) (= T_javafe_ast_BinaryExpr (+ DIST_ZERO_1 106)) (= T_javafe_ast_Name (+ DIST_ZERO_1 107)) (= T_javafe_ast_CatchClause (+ DIST_ZERO_1 108)) (= T_javafe_ast_ArrayRefExpr (+ DIST_ZERO_1 109)) (= T_javafe_ast_VarDeclStmt (+ DIST_ZERO_1 110)) (= T_java_util_Hashtable (+ DIST_ZERO_1 111)) (= T_javafe_ast_ArrayType (+ DIST_ZERO_1 112)) (= T_javafe_tc_EnvForLocals (+ DIST_ZERO_1 113)) (= T_javafe_ast_LabelStmt (+ DIST_ZERO_1 114)) (= T_javafe_ast_GeneratedTags (+ DIST_ZERO_1 115)) (= T_javafe_util_Assert (+ DIST_ZERO_1 116)) (= T_javafe_ast_TypeDeclElemVec (+ DIST_ZERO_1 117)) (= T_javafe_ast_Stmt (+ DIST_ZERO_1 118)) (= T_javafe_ast_ExprObjectDesignator (+ DIST_ZERO_1 119)) (= T_javafe_ast_GenericBlockStmt (+ DIST_ZERO_1 120)) (= T_javafe_ast_ASTDecoration (+ DIST_ZERO_1 121)) (= T_java_lang_Boolean (+ DIST_ZERO_1 122)) (= T_javafe_ast_CondExpr (+ DIST_ZERO_1 123)) (= T_javafe_ast_SingleTypeImportDecl (+ DIST_ZERO_1 124)) (= T_javafe_ast_FormalParaDeclVec (+ DIST_ZERO_1 125)) (= T_javafe_ast_AmbiguousVariableAccess (+ DIST_ZERO_1 126)) (= T_javafe_ast_SuperObjectDesignator (+ DIST_ZERO_1 127)) (= T_javafe_ast_MethodDecl (+ DIST_ZERO_1 128)) (= T_javafe_ast_EvalStmt (+ DIST_ZERO_1 129)) (= T_javafe_ast_SynchronizeStmt (+ DIST_ZERO_1 130)) (= T_javafe_util_StackVector (+ DIST_ZERO_1 131)) (= T_javafe_ast_ForStmt (+ DIST_ZERO_1 132)) (= T_javafe_ast_TypeModifierPragmaVec (+ DIST_ZERO_1 133)) (= T_javafe_ast_Type (+ DIST_ZERO_1 134)) (= T_javafe_ast_CatchClauseVec (+ DIST_ZERO_1 135)) (= T_javafe_ast_NewArrayExpr (+ DIST_ZERO_1 136)) (= T_javafe_ast_PrettyPrint (+ DIST_ZERO_1 137)) (= T_javafe_ast_FieldDecl (+ DIST_ZERO_1 138)) (= T_javafe_tc_EnvForTypeSig (+ DIST_ZERO_1 139)) (= T_java_lang_Long (+ DIST_ZERO_1 140)) (= T_java_lang_Number (+ DIST_ZERO_1 141)) (= T_javafe_ast_StmtPragma (+ DIST_ZERO_1 142))) (= true_term (is EQ_29_25_26 T_int)) (= EQ_29_25_26 60) (= true_term (is ACC_FINAL_31_23_26 T_int)) (= ACC_FINAL_31_23_26 16) (= true_term (is RETURNSTMT_30_33_7 T_int)) (= RETURNSTMT_30_33_7 19) (= true_term (is NOT_29_56_26 T_int)) (= NOT_29_56_26 87) (= true_term (is CLASSLITERAL_30_60_7 T_int)) (= CLASSLITERAL_30_60_7 46) (= true_term (is ACC_STATIC_31_22_26 T_int)) (= ACC_STATIC_31_22_26 8) (= true_term (is NE_29_24_26 T_int)) (= NE_29_24_26 59) (= true_term (is EVALSTMT_30_32_7 T_int)) (= EVALSTMT_30_32_7 18) (= true_term (is UNARYSUB_29_55_26 T_int)) (= UNARYSUB_29_55_26 86) (= true_term (is METHODINVOCATION_30_59_7 T_int)) (= METHODINVOCATION_30_59_7 45) (= true_term (is BITAND_29_23_26 T_int)) (= BITAND_29_23_26 58) (= true_term (is SYNCHRONIZESTMT_30_31_7 T_int)) (= SYNCHRONIZESTMT_30_31_7 17) (= true_term (is UNARYADD_29_54_26 T_int)) (= UNARYADD_29_54_26 85) (= true_term (is AMBIGUOUSMETHODINVOCATION_30_58_7 T_int)) (= AMBIGUOUSMETHODINVOCATION_30_58_7 44) (= true_term (is otherCodes_27_202_27 ?v_0)) (not (= otherCodes_27_202_27 null)) (= (typeof otherCodes_27_202_27) ?v_0) (= (arrayLength otherCodes_27_202_27) 15) (= true_term (is BITXOR_29_22_26 T_int)) (= BITXOR_29_22_26 57) (= true_term (is DOSTMT_30_30_7 T_int)) (= DOSTMT_30_30_7 16) (= true_term (is ASGBITXOR_29_51_26 T_int)) (= ASGBITXOR_29_51_26 84) (= true_term (is FIELDACCESS_30_57_7 T_int)) (= FIELDACCESS_30_57_7 43) (= true_term (is punctuationStrings_27_134_22 ?v_1)) (not (= punctuationStrings_27_134_22 null)) (= (typeof punctuationStrings_27_134_22) ?v_1) (= (arrayLength punctuationStrings_27_134_22) 48) (= true_term (is CHECKED_5_776_28 T_int)) (= CHECKED_5_776_28 6) (= true_term (is BITOR_29_21_26 T_int)) (= BITOR_29_21_26 56) (= true_term (is WHILESTMT_30_29_7 T_int)) (= WHILESTMT_30_29_7 15) (= true_term (is ASGBITOR_29_50_26 T_int)) (= ASGBITOR_29_50_26 83) (= true_term (is PREPPED_5_775_28 T_int)) (= PREPPED_5_775_28 5) (= true_term (is VARIABLEACCESS_30_56_7 T_int)) (= VARIABLEACCESS_30_56_7 42) (= true_term (is CLASSDECLSTMT_30_28_7 T_int)) (= CLASSDECLSTMT_30_28_7 14) (= true_term (is ASGBITAND_29_49_26 T_int)) (= ASGBITAND_29_49_26 82) (= true_term (is AMBIGUOUSVARIABLEACCESS_30_55_7 T_int)) (= AMBIGUOUSVARIABLEACCESS_30_55_7 41) (= true_term (is AND_29_20_26 T_int)) (= AND_29_20_26 55) (= true_term (is VARDECLSTMT_30_27_7 T_int)) (= VARDECLSTMT_30_27_7 13) (= true_term (is ASGURSHIFT_29_48_26 T_int)) (= ASGURSHIFT_29_48_26 81) (= true_term (is PARENEXPR_30_54_7 T_int)) (= PARENEXPR_30_54_7 40) (= true_term (is NULLLIT_28_45_26 T_int)) (= NULLLIT_28_45_26 111) (= true_term (is PARSED_5_772_28 T_int)) (= PARSED_5_772_28 2) (= true_term (is OR_29_19_26 T_int)) (= OR_29_19_26 54) (= true_term (is SWITCHSTMT_30_26_7 T_int)) (= SWITCHSTMT_30_26_7 12) (= true_term (is ASGRSHIFT_29_47_26 T_int)) (= ASGRSHIFT_29_47_26 80) (= true_term (is CASTEXPR_30_53_7 T_int)) (= CASTEXPR_30_53_7 39) (= true_term (is LAST_KEYWORD_27_103_26 T_int)) (= LAST_KEYWORD_27_103_26 183) (= true_term (is STRINGLIT_28_44_26 T_int)) (= STRINGLIT_28_44_26 110) (= true_term (is BLOCKSTMT_30_25_7 T_int)) (= BLOCKSTMT_30_25_7 11) (= true_term (is NULL_27_82_26 T_int)) (= NULL_27_82_26 163) (= true_term (is ASGLSHIFT_29_46_26 T_int)) (= ASGLSHIFT_29_46_26 79) (= true_term (is INSTANCEOFEXPR_30_52_7 T_int)) (= INSTANCEOFEXPR_30_52_7 38) (= true_term (is DOUBLELIT_28_43_26 T_int)) (= DOUBLELIT_28_43_26 109) (= true_term (is FORMALPARADECL_30_24_7 T_int)) (= FORMALPARADECL_30_24_7 10) (= true_term (is map_5_301_35 T_java_util_Hashtable)) (not (= map_5_301_35 null)) (= (typeof map_5_301_35) T_java_util_Hashtable) (= true_term (is ASGSUB_29_45_26 T_int)) (= ASGSUB_29_45_26 78) (= true_term (is CONDEXPR_30_51_7 T_int)) (= CONDEXPR_30_51_7 37) (= true_term (is otherStrings_27_193_30 ?v_1)) (not (= otherStrings_27_193_30 null)) (= (typeof otherStrings_27_193_30) ?v_1) (= (arrayLength otherStrings_27_193_30) 15) (= true_term (is FLOATLIT_28_42_26 T_int)) (= FLOATLIT_28_42_26 108) (= true_term (is FIELDDECL_30_23_7 T_int)) (= FIELDDECL_30_23_7 9) (= true_term (is ASGADD_29_44_26 T_int)) (= ASGADD_29_44_26 77) (= true_term (is NEWARRAYEXPR_30_50_7 T_int)) (= NEWARRAYEXPR_30_50_7 36) (= true_term (is CHARLIT_28_41_26 T_int)) (= CHARLIT_28_41_26 107) (= true_term (is LOCALVARDECL_30_22_7 T_int)) (= LOCALVARDECL_30_22_7 8) (= true_term (is whereDecoration_20_597_41 T_javafe_ast_ASTDecoration)) (not (= whereDecoration_20_597_41 null)) (= (typeof whereDecoration_20_597_41) T_javafe_ast_ASTDecoration) (= true_term (is ASGREM_29_43_26 T_int)) (= ASGREM_29_43_26 76) (= true_term (is NEWINSTANCEEXPR_30_49_7 T_int)) (= NEWINSTANCEEXPR_30_49_7 35) (= true_term (is LONGLIT_28_40_26 T_int)) (= LONGLIT_28_40_26 106) (= true_term (is INITBLOCK_30_21_7 T_int)) (= INITBLOCK_30_21_7 7) (= true_term (is ASGDIV_29_42_26 T_int)) (= ASGDIV_29_42_26 75) (= true_term (is ARRAYREFEXPR_30_48_7 T_int)) (= ARRAYREFEXPR_30_48_7 34) (= true_term (is INTLIT_28_39_26 T_int)) (= INTLIT_28_39_26 105) (= true_term (is METHODDECL_30_20_7 T_int)) (= METHODDECL_30_20_7 6) (= true_term (is ASGMUL_29_41_26 T_int)) (= ASGMUL_29_41_26 74) (= true_term (is THISEXPR_30_47_7 T_int)) (= THISEXPR_30_47_7 33) (= true_term (is BOOLEANLIT_28_38_26 T_int)) (= BOOLEANLIT_28_38_26 104) (= true_term (is CONSTRUCTORDECL_30_19_7 T_int)) (= CONSTRUCTORDECL_30_19_7 5) (= true_term (is ASSIGN_29_40_26 T_int)) (= ASSIGN_29_40_26 73) (= true_term (is TYPEMODIFIERPRAGMA_27_28_26 T_int)) (= TYPEMODIFIERPRAGMA_27_28_26 118) (= true_term (is ARRAYINIT_30_46_7 T_int)) (= ARRAYINIT_30_46_7 32) (= true_term (is SHORTTYPE_28_36_26 T_int)) (= SHORTTYPE_28_36_26 103) (= true_term (is INTERFACEDECL_30_18_7 T_int)) (= INTERFACEDECL_30_18_7 4) (= true_term (is TYPESIG_26_6_28 T_int)) (= TYPESIG_26_6_28 184) (= true_term (is STAR_29_37_26 T_int)) (= STAR_29_37_26 72) (= true_term (is CATCHCLAUSE_30_45_7 T_int)) (= CATCHCLAUSE_30_45_7 31) (= true_term (is NOTACCESSIBLE_86_13_26 T_int)) (= NOTACCESSIBLE_86_13_26 3) (= true_term (is TYPEDECLELEMPRAGMA_27_27_26 T_int)) (= TYPEDECLELEMPRAGMA_27_27_26 117) (= true_term (is BYTETYPE_28_35_26 T_int)) (= BYTETYPE_28_35_26 102) (= true_term (is CLASSDECL_30_17_7 T_int)) (= CLASSDECL_30_17_7 3) (= true_term (is MOD_29_36_26 T_int)) (= MOD_29_36_26 71) (= true_term (is BADTYPECOMBO_86_12_26 T_int)) (= BADTYPECOMBO_86_12_26 2) (= true_term (is CONSTRUCTORINVOCATION_30_44_7 T_int)) (= CONSTRUCTORINVOCATION_30_44_7 30) (= true_term (is NULLTYPE_28_34_26 T_int)) (= NULLTYPE_28_34_26 101) (= true_term (is STMTPRAGMA_27_26_26 T_int)) (= STMTPRAGMA_27_26_26 116) (= true_term (is ONDEMANDIMPORTDECL_30_16_7 T_int)) (= ONDEMANDIMPORTDECL_30_16_7 2) (= true_term (is DIV_29_35_26 T_int)) (= DIV_29_35_26 70) (= true_term (is TRYCATCHSTMT_30_43_7 T_int)) (= TRYCATCHSTMT_30_43_7 29) (= true_term (is VOIDTYPE_28_33_26 T_int)) (= VOIDTYPE_28_33_26 100) (= true_term (is SINGLETYPEIMPORTDECL_30_15_7 T_int)) (= SINGLETYPEIMPORTDECL_30_15_7 1) (= true_term (is SUB_29_34_26 T_int)) (= SUB_29_34_26 69) (= true_term (is AMBIGUOUS_86_11_26 T_int)) (= AMBIGUOUS_86_11_26 1) (= true_term (is MODIFIERPRAGMA_27_25_26 T_int)) (= MODIFIERPRAGMA_27_25_26 115) (= true_term (is TRYFINALLYSTMT_30_42_7 T_int)) (= TRYFINALLYSTMT_30_42_7 28) (= true_term (is DOUBLETYPE_28_32_26 T_int)) (= DOUBLETYPE_28_32_26 99) (= true_term (is NOTFOUND_86_10_26 T_int)) (= NOTFOUND_86_10_26 0) (= true_term (is COMPILATIONUNIT_30_14_7 T_int)) (= COMPILATIONUNIT_30_14_7 0) (= true_term (is ADD_29_33_26 T_int)) (= ADD_29_33_26 68) (= true_term (is FIRST_KEYWORD_27_51_26 T_int)) (= FIRST_KEYWORD_27_51_26 133) (= true_term (is SWITCHLABEL_30_41_7 T_int)) (= SWITCHLABEL_30_41_7 27) (= true_term (is LEXICALPRAGMA_27_24_26 T_int)) (= LEXICALPRAGMA_27_24_26 114) (= true_term (is FLOATTYPE_28_31_26 T_int)) (= FLOATTYPE_28_31_26 98) (= true_term (is URSHIFT_29_32_26 T_int)) (= URSHIFT_29_32_26 67) (= true_term (is SKIPSTMT_30_40_7 T_int)) (= SKIPSTMT_30_40_7 26) (= true_term (is COMPOUNDNAME_30_67_7 T_int)) (= COMPOUNDNAME_30_67_7 53) (= true_term (is CHARTYPE_28_30_26 T_int)) (= CHARTYPE_28_30_26 97) (= true_term (is RSHIFT_29_31_26 T_int)) (= RSHIFT_29_31_26 66) (= true_term (is FORSTMT_30_39_7 T_int)) (= FORSTMT_30_39_7 25) (= true_term (is SIMPLENAME_30_66_7 T_int)) (= SIMPLENAME_30_66_7 52) (= true_term (is LONGTYPE_28_29_26 T_int)) (= LONGTYPE_28_29_26 96) (= true_term (is LSHIFT_29_30_26 T_int)) (= LSHIFT_29_30_26 65) (= true_term (is IFSTMT_30_38_7 T_int)) (= IFSTMT_30_38_7 24) (= true_term (is POSTFIXDEC_29_63_26 T_int)) (= POSTFIXDEC_29_63_26 92) (= true_term (is ARRAYTYPE_30_65_7 T_int)) (= ARRAYTYPE_30_65_7 51) (= true_term (is INTTYPE_28_28_26 T_int)) (= INTTYPE_28_28_26 95) (= true_term (is LT_29_29_26 T_int)) (= LT_29_29_26 64) (= true_term (is LABELSTMT_30_37_7 T_int)) (= LABELSTMT_30_37_7 23) (= true_term (is POSTFIXINC_29_62_26 T_int)) (= POSTFIXINC_29_62_26 91) (= true_term (is noTokens_27_212_27 T_int)) (= true_term (is TYPENAME_30_64_7 T_int)) (= TYPENAME_30_64_7 50) (= true_term (is BOOLEANTYPE_28_27_26 T_int)) (= BOOLEANTYPE_28_27_26 94) (= true_term (is LE_29_28_26 T_int)) (= LE_29_28_26 63) (= true_term (is CONTINUESTMT_30_36_7 T_int)) (= CONTINUESTMT_30_36_7 22) (= true_term (is punctuationCodes_27_164_19 ?v_0)) (not (= punctuationCodes_27_164_19 null)) (= (typeof punctuationCodes_27_164_19) ?v_0) (= (arrayLength punctuationCodes_27_164_19) 48) (= true_term (is DEC_29_59_26 T_int)) (= DEC_29_59_26 90) (= true_term (is SUPEROBJECTDESIGNATOR_30_63_7 T_int)) (= SUPEROBJECTDESIGNATOR_30_63_7 49) (= true_term (is IDENT_28_25_26 T_int)) (= IDENT_28_25_26 93) (= true_term (is GT_29_27_26 T_int)) (= GT_29_27_26 62) (= true_term (is BREAKSTMT_30_35_7 T_int)) (= BREAKSTMT_30_35_7 21) (= true_term (is INC_29_58_26 T_int)) (= INC_29_58_26 89) (= true_term (is TYPEOBJECTDESIGNATOR_30_62_7 T_int)) (= TYPEOBJECTDESIGNATOR_30_62_7 48) (= true_term (is sigDecoration_5_104_38 T_javafe_ast_ASTDecoration)) (not (= sigDecoration_5_104_38 null)) (= (typeof sigDecoration_5_104_38) T_javafe_ast_ASTDecoration) (= true_term (is GE_29_26_26 T_int)) (= GE_29_26_26 61) (= true_term (is keywordStrings_27_181_30 ?v_1)) (not (= keywordStrings_27_181_30 null)) (= (typeof keywordStrings_27_181_30) ?v_1) (= (arrayLength keywordStrings_27_181_30) 51) (= true_term (is THROWSTMT_30_34_7 T_int)) (= THROWSTMT_30_34_7 20) (= true_term (is NULL_44_60_26 T_int)) (= NULL_44_60_26 0) (= true_term (is BITNOT_29_57_26 T_int)) (= BITNOT_29_57_26 88) (= true_term (is EXPROBJECTDESIGNATOR_30_61_7 T_int)) (= EXPROBJECTDESIGNATOR_30_61_7 47)))) +(declare-fun EQ_pre_29_25_26 () Int) +(declare-fun tmodifiers_pre_7_30_33 () Int) +(declare-fun tmodifiers_7_30_33 () Int) +(declare-fun ACC_FINAL_pre_31_23_26 () Int) +(declare-fun RETURNSTMT_pre_30_33_7 () Int) +(declare-fun expr_pre_78_15_28 () Int) +(declare-fun expr_78_15_28 () Int) +(declare-fun expr_pre_81_15_28 () Int) +(declare-fun expr_81_15_28 () Int) +(declare-fun NOT_pre_29_56_26 () Int) +(declare-fun loc_pre_164_16_13 () Int) +(declare-fun loc_164_16_13 () Int) +(declare-fun ids_pre_167_19_37 () Int) +(declare-fun ids_167_19_37 () Int) +(declare-fun locOpenBracket_pre_89_21_13 () Int) +(declare-fun locOpenBracket_89_21_13 () Int) +(declare-fun locOpenParen_pre_42_48_13 () Int) +(declare-fun locOpenParen_42_48_13 () Int) +(declare-fun name_pre_107_20_28 () Int) +(declare-fun name_107_20_28 () Int) +(declare-fun CLASSLITERAL_pre_30_60_7 () Int) +(declare-fun ACC_STATIC_pre_31_22_26 () Int) +(declare-fun elements_pre_45_61_37 () Int) +(declare-fun elements_45_61_37 () Int) +(declare-fun state_pre_5_787_15 () Int) +(declare-fun state_5_787_15 () Int) +(declare-fun id_pre_33_15_34 () Int) +(declare-fun id_33_15_34 () Int) +(declare-fun stmt_pre_73_17_28 () Int) +(declare-fun stmt_73_17_28 () Int) +(declare-fun locCloseBrace_pre_18_54_13 () Int) +(declare-fun locCloseBrace_18_54_13 () Int) +(declare-fun NE_pre_29_24_26 () Int) +(declare-fun loc_pre_74_33_13 () Int) +(declare-fun loc_74_33_13 () Int) +(declare-fun EVALSTMT_pre_30_32_7 () Int) +(declare-fun syntax_pre_7_28_29 () Int) +(declare-fun syntax_7_28_29 () Int) +(declare-fun sig_pre_48_39 () Int) +(declare-fun sig_48_39 () Int) +(declare-fun UNARYSUB_pre_29_55_26 () Int) +(declare-fun METHODINVOCATION_pre_30_59_7 () Int) +(declare-fun loc_pre_165_20_13 () Int) +(declare-fun loc_165_20_13 () Int) +(declare-fun type_pre_23_35_28 () Int) +(declare-fun type_23_35_28 () Int) +(declare-fun nullType_pre_38_131_4 () Int) +(declare-fun nullType_38_131_4 () Int) +(declare-fun BITAND_pre_29_23_26 () Int) +(declare-fun SYNCHRONIZESTMT_pre_30_31_7 () Int) +(declare-fun parent_pre_52_18_18 () Int) +(declare-fun parent_52_18_18 () Int) +(declare-fun UNARYADD_pre_29_54_26 () Int) +(declare-fun AMBIGUOUSMETHODINVOCATION_pre_30_58_7 () Int) +(declare-fun label_pre_73_15_34 () Int) +(declare-fun label_73_15_34 () Int) +(declare-fun otherCodes_pre_27_202_27 () Int) +(declare-fun BITXOR_pre_29_22_26 () Int) +(declare-fun loc_pre_80_20_13 () Int) +(declare-fun loc_80_20_13 () Int) +(declare-fun DOSTMT_pre_30_30_7 () Int) +(declare-fun loc_pre_112_22_13 () Int) +(declare-fun loc_112_22_13 () Int) +(declare-fun type_pre_99_24_28 () Int) +(declare-fun type_99_24_28 () Int) +(declare-fun ASGBITXOR_pre_29_51_26 () Int) +(declare-fun FIELDACCESS_pre_30_57_7 () Int) +(declare-fun locKeyword_pre_42_45_13 () Int) +(declare-fun locKeyword_42_45_13 () Int) +(declare-fun punctuationStrings_pre_27_134_22 () Int) +(declare-fun length_pre_98_50_25 () Int) +(declare-fun length_98_50_25 () Int) +(declare-fun loc_pre_39_35_13 () Int) +(declare-fun loc_39_35_13 () Int) +(declare-fun CHECKED_pre_5_776_28 () Int) +(declare-fun locCloseBracket_pre_94_23_13 () Int) +(declare-fun locCloseBracket_94_23_13 () Int) +(declare-fun BITOR_pre_29_21_26 () Int) +(declare-fun loc_pre_85_22_13 () Int) +(declare-fun loc_85_22_13 () Int) +(declare-fun count_pre_166_67_33 () Int) +(declare-fun count_166_67_33 () Int) +(declare-fun body_pre_74_30_28 () Int) +(declare-fun body_74_30_28 () Int) +(declare-fun WHILESTMT_pre_30_29_7 () Int) +(declare-fun count_pre_90_67_33 () Int) +(declare-fun count_90_67_33 () Int) +(declare-fun permitsNullValue_pre_64_31_27 () Int) +(declare-fun permitsNullValue_64_31_27 () Int) +(declare-fun locOpenBrace_pre_18_51_13 () Int) +(declare-fun locOpenBrace_18_51_13 () Int) +(declare-fun ASGBITOR_pre_29_50_26 () Int) +(declare-fun fieldSeq_pre_48_162_38 () Int) +(declare-fun fieldSeq_48_162_38 () Int) +(declare-fun PREPPED_pre_5_775_28 () Int) +(declare-fun VARIABLEACCESS_pre_30_56_7 () Int) +(declare-fun elemType_pre_89_18_28 () Int) +(declare-fun elemType_89_18_28 () Int) +(declare-fun locDots_pre_167_31_29 () Int) +(declare-fun locDots_167_31_29 () Int) +(declare-fun count_pre_122_67_33 () Int) +(declare-fun count_122_67_33 () Int) +(declare-fun CLASSDECLSTMT_pre_30_28_7 () Int) +(declare-fun locOpenBrackets_pre_99_65_29 () Int) +(declare-fun locOpenBrackets_99_65_29 () Int) +(declare-fun decl_pre_95_55_25 () Int) +(declare-fun decl_95_55_25 () Int) +(declare-fun charType_pre_38_127_4 () Int) +(declare-fun charType_38_127_4 () Int) +(declare-fun ASGBITAND_pre_29_49_26 () Int) +(declare-fun elements_pre_24_61_43 () Int) +(declare-fun elements_24_61_43 () Int) +(declare-fun locOpenBrace_pre_32_36_13 () Int) +(declare-fun locOpenBrace_32_36_13 () Int) +(declare-fun AMBIGUOUSVARIABLEACCESS_pre_30_55_7 () Int) +(declare-fun decl_pre_59_35_37 () Int) +(declare-fun decl_59_35_37 () Int) +(declare-fun id_pre_23_32_34 () Int) +(declare-fun id_23_32_34 () Int) +(declare-fun locDot_pre_108_21_13 () Int) +(declare-fun locDot_108_21_13 () Int) +(declare-fun locCloseParen_pre_102_24_13 () Int) +(declare-fun locCloseParen_102_24_13 () Int) +(declare-fun locOpenParen_pre_95_52_13 () Int) +(declare-fun locOpenParen_95_52_13 () Int) +(declare-fun body_pre_32_34_19 () Int) +(declare-fun body_32_34_19 () Int) +(declare-fun stmt_pre_80_17_33 () Int) +(declare-fun stmt_80_17_33 () Int) +(declare-fun forUpdate_pre_74_28_31 () Int) +(declare-fun forUpdate_74_28_31 () Int) +(declare-fun loc_pre_76_20_13 () Int) +(declare-fun loc_76_20_13 () Int) +(declare-fun AND_pre_29_20_26 () Int) +(declare-fun VARDECLSTMT_pre_30_27_7 () Int) +(declare-fun id_pre_112_19_34 () Int) +(declare-fun id_112_19_34 () Int) +(declare-fun ASGURSHIFT_pre_29_48_26 () Int) +(declare-fun elements_pre_123_61_39 () Int) +(declare-fun elements_123_61_39 () Int) +(declare-fun PARENEXPR_pre_30_54_7 () Int) +(declare-fun locDot_pre_42_41_13 () Int) +(declare-fun locDot_42_41_13 () Int) +(declare-fun raises_pre_32_32_35 () Int) +(declare-fun raises_32_32_35 () Int) +(declare-fun typeDecoration_pre_1853_31 () Int) +(declare-fun typeDecoration_1853_31 () Int) +(declare-fun elementType_pre_64_26_25 () Int) +(declare-fun elementType_64_26_25 () Int) +(declare-fun tag_pre_39_30_13 () Int) +(declare-fun tag_39_30_13 () Int) +(declare-fun NULLLIT_pre_28_45_26 () Int) +(declare-fun body_pre_85_19_33 () Int) +(declare-fun body_85_19_33 () Int) +(declare-fun PARSED_pre_5_772_28 () Int) +(declare-fun OR_pre_29_19_26 () Int) +(declare-fun SWITCHSTMT_pre_30_26_7 () Int) +(declare-fun locOpenBracket_pre_94_20_13 () Int) +(declare-fun locOpenBracket_94_20_13 () Int) +(declare-fun ASGRSHIFT_pre_29_47_26 () Int) +(declare-fun decl_pre_91_28_19 () Int) +(declare-fun decl_91_28_19 () Int) +(declare-fun locId_pre_18_48_13 () Int) +(declare-fun locId_18_48_13 () Int) +(declare-fun CASTEXPR_pre_30_53_7 () Int) +(declare-fun LAST_KEYWORD_pre_27_103_26 () Int) +(declare-fun elements_pre_43_61_33 () Int) +(declare-fun elements_43_61_33 () Int) +(declare-fun pmodifiers_pre_23_30_27 () Int) +(declare-fun pmodifiers_23_30_27 () Int) +(declare-fun expr_pre_80_15_28 () Int) +(declare-fun expr_80_15_28 () Int) +(declare-fun test_pre_74_26_28 () Int) +(declare-fun test_74_26_28 () Int) +(declare-fun STRINGLIT_pre_28_44_26 () Int) +(declare-fun locColon_pre_100_25_13 () Int) +(declare-fun locColon_100_25_13 () Int) +(declare-fun BLOCKSTMT_pre_30_25_7 () Int) +(declare-fun inst_pre_48_25_52 () Int) +(declare-fun inst_48_25_52 () Int) +(declare-fun NULL_pre_27_82_26 () Int) +(declare-fun ASGLSHIFT_pre_29_46_26 () Int) +(declare-fun modifiers_pre_23_28_13 () Int) +(declare-fun modifiers_23_28_13 () Int) +(declare-fun INSTANCEOFEXPR_pre_30_52_7 () Int) +(declare-fun args_pre_32_30_41 () Int) +(declare-fun args_32_30_41 () Int) +(declare-fun tokenType_pre_58_90_8 () Int) +(declare-fun tokenType_58_90_8 () Int) +(declare-fun longType_pre_38_123_4 () Int) +(declare-fun longType_38_123_4 () Int) +(declare-fun elements_pre_16_61_33 () Int) +(declare-fun elements_16_61_33 () Int) +(declare-fun superClass_pre_57_15_18 () Int) +(declare-fun superClass_57_15_18 () Int) +(declare-fun arg_pre_85_17_38 () Int) +(declare-fun arg_85_17_38 () Int) +(declare-fun DOUBLELIT_pre_28_43_26 () Int) +(declare-fun stmt_pre_76_17_28 () Int) +(declare-fun stmt_76_17_28 () Int) +(declare-fun loc_pre_95_49_13 () Int) +(declare-fun loc_95_49_13 () Int) +(declare-fun FORMALPARADECL_pre_30_24_7 () Int) +(declare-fun map_pre_5_301_35 () Int) +(declare-fun locOpenParen_pre_102_21_13 () Int) +(declare-fun locOpenParen_102_21_13 () Int) +(declare-fun locDot_pre_103_23_13 () Int) +(declare-fun locDot_103_23_13 () Int) +(declare-fun ASGSUB_pre_29_45_26 () Int) +(declare-fun permitsNullKey_pre_64_21_27 () Int) +(declare-fun permitsNullKey_64_21_27 () Int) +(declare-fun elements_pre_21_61_41 () Int) +(declare-fun elements_21_61_41 () Int) +(declare-fun CONDEXPR_pre_30_51_7 () Int) +(declare-fun decl_pre_111_34_20 () Int) +(declare-fun decl_111_34_20 () Int) +(declare-fun otherStrings_pre_27_193_30 () Int) +(declare-fun elements_pre_153_72_21 () Int) +(declare-fun elements_153_72_21 () Int) +(declare-fun loc_pre_66_29_13 () Int) +(declare-fun loc_66_29_13 () Int) +(declare-fun forInit_pre_74_24_31 () Int) +(declare-fun forInit_74_24_31 () Int) +(declare-fun FLOATLIT_pre_28_42_26 () Int) +(declare-fun locGuardOpenParen_pre_75_23_13 () Int) +(declare-fun locGuardOpenParen_75_23_13 () Int) +(declare-fun loc_pre_101_21_13 () Int) +(declare-fun loc_101_21_13 () Int) +(declare-fun FIELDDECL_pre_30_23_7 () Int) +(declare-fun count_pre_118_67_33 () Int) +(declare-fun count_118_67_33 () Int) +(declare-fun decorationType_pre_115_48_27 () Int) +(declare-fun decorationType_115_48_27 () Int) +(declare-fun ASGADD_pre_29_44_26 () Int) +(declare-fun index_pre_94_17_28 () Int) +(declare-fun index_94_17_28 () Int) +(declare-fun loc_pre_18_45_13 () Int) +(declare-fun loc_18_45_13 () Int) +(declare-fun enclosingEnv_pre_5_52_36 () Int) +(declare-fun enclosingEnv_5_52_36 () Int) +(declare-fun NEWARRAYEXPR_pre_30_50_7 () Int) +(declare-fun enclosingInstance_pre_42_37_14 () Int) +(declare-fun enclosingInstance_42_37_14 () Int) +(declare-fun elements_pre_84_61_40 () Int) +(declare-fun elements_84_61_40 () Int) +(declare-fun dontAddImplicitConstructorInvocations_pre_23_26 () Int) +(declare-fun dontAddImplicitConstructorInvocations_23_26 () Int) +(declare-fun locId_pre_91_24_13 () Int) +(declare-fun locId_91_24_13 () Int) +(declare-fun CHARLIT_pre_28_41_26 () Int) +(declare-fun expr_pre_76_15_28 () Int) +(declare-fun expr_76_15_28 () Int) +(declare-fun LOCALVARDECL_pre_30_22_7 () Int) +(declare-fun enclosingLabels_pre_77_22 () Int) +(declare-fun enclosingLabels_77_22 () Int) +(declare-fun whereDecoration_pre_20_597_41 () Int) +(declare-fun ASGREM_pre_29_43_26 () Int) +(declare-fun locQuestion_pre_100_22_13 () Int) +(declare-fun locQuestion_100_22_13 () Int) +(declare-fun pmodifiers_pre_32_26_27 () Int) +(declare-fun pmodifiers_32_26_27 () Int) +(declare-fun NEWINSTANCEEXPR_pre_30_49_7 () Int) +(declare-fun loc_pre_92_29_13 () Int) +(declare-fun loc_92_29_13 () Int) +(declare-fun LONGLIT_pre_28_40_26 () Int) +(declare-fun overridesDecoration_pre_48_154_45 () Int) +(declare-fun overridesDecoration_48_154_45 () Int) +(declare-fun modifiers_pre_32_24_13 () Int) +(declare-fun modifiers_32_24_13 () Int) +(declare-fun anonDecl_pre_95_45_19 () Int) +(declare-fun anonDecl_95_45_19 () Int) +(declare-fun keyType_pre_64_16_25 () Int) +(declare-fun keyType_64_16_25 () Int) +(declare-fun INITBLOCK_pre_30_21_7 () Int) +(declare-fun loc_pre_83_23_13 () Int) +(declare-fun loc_83_23_13 () Int) +(declare-fun floatType_pre_38_119_4 () Int) +(declare-fun floatType_38_119_4 () Int) +(declare-fun type_pre_102_18_28 () Int) +(declare-fun type_102_18_28 () Int) +(declare-fun array_pre_94_15_28 () Int) +(declare-fun array_94_15_28 () Int) +(declare-fun ASGDIV_pre_29_42_26 () Int) +(declare-fun ARRAYREFEXPR_pre_30_48_7 () Int) +(declare-fun expr_pre_66_26_14 () Int) +(declare-fun expr_66_26_14 () Int) +(declare-fun type_pre_109_27_28 () Int) +(declare-fun type_109_27_28 () Int) +(declare-fun locCloseBrace_pre_40_25_13 () Int) +(declare-fun locCloseBrace_40_25_13 () Int) +(declare-fun INTLIT_pre_28_39_26 () Int) +(declare-fun type_pre_101_18_28 () Int) +(declare-fun type_101_18_28 () Int) +(declare-fun METHODDECL_pre_30_20_7 () Int) +(declare-fun args_pre_111_30_31 () Int) +(declare-fun args_111_30_31 () Int) +(declare-fun ht_pre_155_33_36 () Int) +(declare-fun ht_155_33_36 () Int) +(declare-fun ASGMUL_pre_29_41_26 () Int) +(declare-fun typeEnv_pre_20_323_32 () Int) +(declare-fun typeEnv_20_323_32 () Int) +(declare-fun elems_pre_18_41_39 () Int) +(declare-fun elems_18_41_39 () Int) +(declare-fun lengthFieldDecl_pre_38_917_40 () Int) +(declare-fun lengthFieldDecl_38_917_40 () Int) +(declare-fun THISEXPR_pre_30_47_7 () Int) +(declare-fun parent_pre_32_21_18 () Int) +(declare-fun parent_32_21_18 () Int) +(declare-fun count_pre_47_67_33 () Int) +(declare-fun count_47_67_33 () Int) +(declare-fun locFinally_pre_82_25_13 () Int) +(declare-fun locFinally_82_25_13 () Int) +(declare-fun count_pre_15_67_33 () Int) +(declare-fun count_15_67_33 () Int) +(declare-fun loc_pre_60_18_13 () Int) +(declare-fun loc_60_18_13 () Int) +(declare-fun type_pre_103_20_28 () Int) +(declare-fun type_103_20_28 () Int) +(declare-fun id_pre_91_21_34 () Int) +(declare-fun id_91_21_34 () Int) +(declare-fun BOOLEANLIT_pre_28_38_26 () Int) +(declare-fun loc_pre_72_18_13 () Int) +(declare-fun loc_72_18_13 () Int) +(declare-fun CONSTRUCTORDECL_pre_30_19_7 () Int) +(declare-fun ASSIGN_pre_29_40_26 () Int) +(declare-fun TYPEMODIFIERPRAGMA_pre_27_28_26 () Int) +(declare-fun ARRAYINIT_pre_30_46_7 () Int) +(declare-fun els_pre_100_19_28 () Int) +(declare-fun els_100_19_28 () Int) +(declare-fun member_pre_5_44_39 () Int) +(declare-fun member_5_44_39 () Int) +(declare-fun args_pre_95_34_31 () Int) +(declare-fun args_95_34_31 () Int) +(declare-fun classPrefix_pre_92_25_14 () Int) +(declare-fun classPrefix_92_25_14 () Int) +(declare-fun loc_pre_75_20_13 () Int) +(declare-fun loc_75_20_13 () Int) +(declare-fun SHORTTYPE_pre_28_36_26 () Int) +(declare-fun locOpenParen_pre_111_28_13 () Int) +(declare-fun locOpenParen_111_28_13 () Int) +(declare-fun INTERFACEDECL_pre_30_18_7 () Int) +(declare-fun inst_pre_93_29_44 () Int) +(declare-fun inst_93_29_44 () Int) +(declare-fun init_pre_22_20_17 () Int) +(declare-fun init_22_20_17 () Int) +(declare-fun TYPESIG_pre_26_6_28 () Int) +(declare-fun STAR_pre_29_37_26 () Int) +(declare-fun locCloseParen_pre_106_21_13 () Int) +(declare-fun locCloseParen_106_21_13 () Int) +(declare-fun allowedExceptions_pre_74_25 () Int) +(declare-fun allowedExceptions_74_25 () Int) +(declare-fun CATCHCLAUSE_pre_30_45_7 () Int) +(declare-fun elements_pre_166_61_39 () Int) +(declare-fun elements_166_61_39 () Int) +(declare-fun elements_pre_90_61_36 () Int) +(declare-fun elements_90_61_36 () Int) +(declare-fun methods_pre_5_883_26 () Int) +(declare-fun methods_5_883_26 () Int) +(declare-fun NOTACCESSIBLE_pre_86_13_26 () Int) +(declare-fun TYPEDECLELEMPRAGMA_pre_27_27_26 () Int) +(declare-fun od_pre_91_19_40 () Int) +(declare-fun od_91_19_40 () Int) +(declare-fun doubleType_pre_38_115_4 () Int) +(declare-fun doubleType_38_115_4 () Int) +(declare-fun parent_pre_22_18_18 () Int) +(declare-fun parent_22_18_18 () Int) +(declare-fun locOpenBrace_pre_40_22_13 () Int) +(declare-fun locOpenBrace_40_22_13 () Int) +(declare-fun BYTETYPE_pre_28_35_26 () Int) +(declare-fun CLASSDECL_pre_30_17_7 () Int) +(declare-fun expr_pre_102_15_28 () Int) +(declare-fun expr_102_15_28 () Int) +(declare-fun MOD_pre_29_36_26 () Int) +(declare-fun constructorSeq_pre_48_171_38 () Int) +(declare-fun constructorSeq_48_171_38 () Int) +(declare-fun BADTYPECOMBO_pre_86_12_26 () Int) +(declare-fun thn_pre_100_17_28 () Int) +(declare-fun thn_100_17_28 () Int) +(declare-fun CONSTRUCTORINVOCATION_pre_30_44_7 () Int) +(declare-fun superInterfaces_pre_18_34_35 () Int) +(declare-fun superInterfaces_18_34_35 () Int) +(declare-fun elements_pre_122_61_38 () Int) +(declare-fun elements_122_61_38 () Int) +(declare-fun catchClauses_pre_83_20_38 () Int) +(declare-fun catchClauses_83_20_38 () Int) +(declare-fun locIds_pre_167_25_29 () Int) +(declare-fun locIds_167_25_29 () Int) +(declare-fun count_pre_45_67_33 () Int) +(declare-fun count_45_67_33 () Int) +(declare-fun type_pre_95_32_32 () Int) +(declare-fun type_95_32_32 () Int) +(declare-fun locOp_pre_104_43_13 () Int) +(declare-fun locOp_104_43_13 () Int) +(declare-fun expr_pre_60_15_28 () Int) +(declare-fun expr_60_15_28 () Int) +(declare-fun loc_pre_82_22_13 () Int) +(declare-fun loc_82_22_13 () Int) +(declare-fun loc_pre_99_49_13 () Int) +(declare-fun loc_99_49_13 () Int) +(declare-fun expr_pre_113_22_28 () Int) +(declare-fun expr_113_22_28 () Int) +(declare-fun NULLTYPE_pre_28_34_26 () Int) +(declare-fun expr_pre_101_15_28 () Int) +(declare-fun expr_101_15_28 () Int) +(declare-fun label_pre_72_15_20 () Int) +(declare-fun label_72_15_20 () Int) +(declare-fun STMTPRAGMA_pre_27_26_26 () Int) +(declare-fun ONDEMANDIMPORTDECL_pre_30_16_7 () Int) +(declare-fun locOp_pre_105_32_13 () Int) +(declare-fun locOp_105_32_13 () Int) +(declare-fun DIV_pre_29_35_26 () Int) +(declare-fun TRYCATCHSTMT_pre_30_43_7 () Int) +(declare-fun currentStackBottom_pre_153_87_33 () Int) +(declare-fun currentStackBottom_153_87_33 () Int) +(declare-fun superCall_pre_42_24_17 () Int) +(declare-fun superCall_42_24_17 () Int) +(declare-fun stmt_pre_75_17_28 () Int) +(declare-fun stmt_75_17_28 () Int) +(declare-fun simpleName_pre_5_37_38 () Int) +(declare-fun simpleName_5_37_38 () Int) +(declare-fun VOIDTYPE_pre_28_33_26 () Int) +(declare-fun SINGLETYPEIMPORTDECL_pre_30_15_7 () Int) +(declare-fun locId_pre_111_25_13 () Int) +(declare-fun locId_111_25_13 () Int) +(declare-fun locSuper_pre_114_20_13 () Int) +(declare-fun locSuper_114_20_13 () Int) +(declare-fun SUB_pre_29_34_26 () Int) +(declare-fun AMBIGUOUS_pre_86_11_26 () Int) +(declare-fun MODIFIERPRAGMA_pre_27_25_26 () Int) +(declare-fun test_pre_100_15_28 () Int) +(declare-fun test_100_15_28 () Int) +(declare-fun locCloseBrace_pre_88_24_13 () Int) +(declare-fun locCloseBrace_88_24_13 () Int) +(declare-fun TRYFINALLYSTMT_pre_30_42_7 () Int) +(declare-fun locDot_pre_95_29_13 () Int) +(declare-fun locDot_95_29_13 () Int) +(declare-fun decl_pre_50_38_43 () Int) +(declare-fun decl_50_38_43 () Int) +(declare-fun id_pre_18_32_34 () Int) +(declare-fun id_18_32_34 () Int) +(declare-fun tryClause_pre_83_18_28 () Int) +(declare-fun tryClause_83_18_28 () Int) +(declare-fun stmts_pre_40_19_31 () Int) +(declare-fun stmts_40_19_31 () Int) +(declare-fun loc_pre_79_22_13 () Int) +(declare-fun loc_79_22_13 () Int) +(declare-fun DOUBLETYPE_pre_28_32_26 () Int) +(declare-fun NOTFOUND_pre_86_10_26 () Int) +(declare-fun COMPILATIONUNIT_pre_30_14_7 () Int) +(declare-fun loc_pre_77_18_13 () Int) +(declare-fun loc_77_18_13 () Int) +(declare-fun ADD_pre_29_33_26 () Int) +(declare-fun intType_pre_38_111_4 () Int) +(declare-fun intType_38_111_4 () Int) +(declare-fun FIRST_KEYWORD_pre_27_51_26 () Int) +(declare-fun locType_pre_33_21_13 () Int) +(declare-fun locType_33_21_13 () Int) +(declare-fun SWITCHLABEL_pre_30_41_7 () Int) +(declare-fun LEXICALPRAGMA_pre_27_24_26 () Int) +(declare-fun enclosingType_pre_5_32_39 () Int) +(declare-fun enclosingType_5_32_39 () Int) +(declare-fun reason_pre_86_8_13 () Int) +(declare-fun reason_86_8_13 () Int) +(declare-fun right_pre_104_40_28 () Int) +(declare-fun right_104_40_28 () Int) +(declare-fun expr_pre_75_15_28 () Int) +(declare-fun expr_75_15_28 () Int) +(declare-fun locOpenParen_pre_106_18_13 () Int) +(declare-fun locOpenParen_106_18_13 () Int) +(declare-fun finallyClause_pre_82_19_28 () Int) +(declare-fun finallyClause_82_19_28 () Int) +(declare-fun dims_pre_99_45_31 () Int) +(declare-fun dims_99_45_31 () Int) +(declare-fun FLOATTYPE_pre_28_31_26 () Int) +(declare-fun expr_pre_105_29_28 () Int) +(declare-fun expr_105_29_28 () Int) +(declare-fun returnType_pre_68_19 () Int) +(declare-fun returnType_68_19 () Int) +(declare-fun URSHIFT_pre_29_32_26 () Int) +(declare-fun locOpenParen_pre_110_30_13 () Int) +(declare-fun locOpenParen_110_30_13 () Int) +(declare-fun SKIPSTMT_pre_30_40_7 () Int) +(declare-fun decl_pre_56_15_33 () Int) +(declare-fun decl_56_15_33 () Int) +(declare-fun pmodifiers_pre_18_30_27 () Int) +(declare-fun pmodifiers_18_30_27 () Int) +(declare-fun COMPOUNDNAME_pre_30_67_7 () Int) +(declare-fun fields_pre_5_875_27 () Int) +(declare-fun fields_5_875_27 () Int) +(declare-fun CHARTYPE_pre_28_30_26 () Int) +(declare-fun count_pre_24_67_33 () Int) +(declare-fun count_24_67_33 () Int) +(declare-fun init_pre_55_19_17 () Int) +(declare-fun init_55_19_17 () Int) +(declare-fun RSHIFT_pre_29_31_26 () Int) +(declare-fun modifiers_pre_18_28_13 () Int) +(declare-fun modifiers_18_28_13 () Int) +(declare-fun CU_pre_5_71_30 () Int) +(declare-fun CU_5_71_30 () Int) +(declare-fun FORSTMT_pre_30_39_7 () Int) +(declare-fun locOpenBrace_pre_88_21_13 () Int) +(declare-fun locOpenBrace_88_21_13 () Int) +(declare-fun tag_pre_124_32_13 () Int) +(declare-fun tag_124_32_13 () Int) +(declare-fun left_pre_104_38_28 () Int) +(declare-fun left_104_38_28 () Int) +(declare-fun elements_pre_118_61_47 () Int) +(declare-fun elements_118_61_47 () Int) +(declare-fun leftToRight_pre_65_22 () Int) +(declare-fun leftToRight_65_22 () Int) +(declare-fun specOnly_pre_18_26_17 () Int) +(declare-fun specOnly_18_26_17 () Int) +(declare-fun id_pre_111_20_34 () Int) +(declare-fun id_111_20_34 () Int) +(declare-fun SIMPLENAME_pre_30_66_7 () Int) +(declare-fun lenId_pre_38_914_30 () Int) +(declare-fun lenId_38_914_30 () Int) +(declare-fun tryClause_pre_82_17_28 () Int) +(declare-fun tryClause_82_17_28 () Int) +(declare-fun LONGTYPE_pre_28_29_26 () Int) +(declare-fun els_pre_79_19_28 () Int) +(declare-fun els_79_19_28 () Int) +(declare-fun hasParent_pre_19_149_30 () Int) +(declare-fun hasParent_19_149_30 () Int) +(declare-fun op_pre_105_26_13 () Int) +(declare-fun op_105_26_13 () Int) +(declare-fun count_pre_123_67_33 () Int) +(declare-fun count_123_67_33 () Int) +(declare-fun expr_pre_77_15_14 () Int) +(declare-fun expr_77_15_14 () Int) +(declare-fun shortType_pre_38_139_4 () Int) +(declare-fun shortType_38_139_4 () Int) +(declare-fun LSHIFT_pre_29_30_26 () Int) +(declare-fun enclosingInstance_pre_95_25_14 () Int) +(declare-fun enclosingInstance_95_25_14 () Int) +(declare-fun IFSTMT_pre_30_38_7 () Int) +(declare-fun POSTFIXDEC_pre_29_63_26 () Int) +(declare-fun loc_pre_160_18_13 () Int) +(declare-fun loc_160_18_13 () Int) +(declare-fun booleanType_pre_38_107_4 () Int) +(declare-fun booleanType_38_107_4 () Int) +(declare-fun ARRAYTYPE_pre_30_65_7 () Int) +(declare-fun expr_pre_106_15_28 () Int) +(declare-fun expr_106_15_28 () Int) +(declare-fun loc_pre_124_50_13 () Int) +(declare-fun loc_124_50_13 () Int) +(declare-fun INTTYPE_pre_28_28_26 () Int) +(declare-fun LT_pre_29_29_26 () Int) +(declare-fun block_pre_51_28_33 () Int) +(declare-fun block_51_28_33 () Int) +(declare-fun LABELSTMT_pre_30_37_7 () Int) +(declare-fun count_pre_43_67_33 () Int) +(declare-fun count_43_67_33 () Int) +(declare-fun POSTFIXINC_pre_29_62_26 () Int) +(declare-fun op_pre_104_35_13 () Int) +(declare-fun op_104_35_13 () Int) +(declare-fun locId_pre_32_43_13 () Int) +(declare-fun locId_32_43_13 () Int) +(declare-fun noTokens_pre_27_212_27 () Int) +(declare-fun od_pre_111_18_40 () Int) +(declare-fun od_111_18_40 () Int) +(declare-fun TYPENAME_pre_30_64_7 () Int) +(declare-fun thn_pre_79_17_28 () Int) +(declare-fun thn_79_17_28 () Int) +(declare-fun BOOLEANTYPE_pre_28_27_26 () Int) +(declare-fun owner_pre_4_35_28 () Int) +(declare-fun owner_4_35_28 () Int) +(declare-fun methodSeq_pre_48_167_38 () Int) +(declare-fun methodSeq_48_167_38 () Int) +(declare-fun returnType_pre_33_18_28 () Int) +(declare-fun returnType_33_18_28 () Int) +(declare-fun loc_pre_121_30_13 () Int) +(declare-fun loc_121_30_13 () Int) +(declare-fun LE_pre_29_28_26 () Int) +(declare-fun CONTINUESTMT_pre_30_36_7 () Int) +(declare-fun loc_pre_78_18_13 () Int) +(declare-fun loc_78_18_13 () Int) +(declare-fun punctuationCodes_pre_27_164_19 () Int) +(declare-fun elems_pre_88_18_34 () Int) +(declare-fun elems_88_18_34 () Int) +(declare-fun DEC_pre_29_59_26 () Int) +(declare-fun rootSEnv_pre_54_45 () Int) +(declare-fun rootSEnv_54_45 () Int) +(declare-fun count_pre_16_67_33 () Int) +(declare-fun count_16_67_33 () Int) +(declare-fun locFirstSemi_pre_74_36_13 () Int) +(declare-fun locFirstSemi_74_36_13 () Int) +(declare-fun SUPEROBJECTDESIGNATOR_pre_30_63_7 () Int) +(declare-fun IDENT_pre_28_25_26 () Int) +(declare-fun parent_pre_18_59_18 () Int) +(declare-fun parent_18_59_18 () Int) +(declare-fun elements_pre_47_61_43 () Int) +(declare-fun elements_47_61_43 () Int) +(declare-fun branchDecoration_pre_1898_31 () Int) +(declare-fun branchDecoration_1898_31 () Int) +(declare-fun decl_pre_42_54_25 () Int) +(declare-fun decl_42_54_25 () Int) +(declare-fun locId_pre_73_20_13 () Int) +(declare-fun locId_73_20_13 () Int) +(declare-fun name_pre_46_18_28 () Int) +(declare-fun name_46_18_28 () Int) +(declare-fun count_pre_21_67_33 () Int) +(declare-fun count_21_67_33 () Int) +(declare-fun GT_pre_29_27_26 () Int) +(declare-fun decl_pre_54_15_36 () Int) +(declare-fun decl_54_15_36 () Int) +(declare-fun elementType_pre_155_22_27 () Int) +(declare-fun elementType_155_22_27 () Int) +(declare-fun elements_pre_15_61_36 () Int) +(declare-fun elements_15_61_36 () Int) +(declare-fun BREAKSTMT_pre_30_35_7 () Int) +(declare-fun INC_pre_29_58_26 () Int) +(declare-fun init_pre_99_35_19 () Int) +(declare-fun init_99_35_19 () Int) +(declare-fun byteType_pre_38_135_4 () Int) +(declare-fun byteType_38_135_4 () Int) +(declare-fun args_pre_42_51_31 () Int) +(declare-fun args_42_51_31 () Int) +(declare-fun TYPEOBJECTDESIGNATOR_pre_30_62_7 () Int) +(declare-fun sigDecoration_pre_5_104_38 () Int) +(declare-fun expr_pre_79_15_28 () Int) +(declare-fun expr_79_15_28 () Int) +(declare-fun value_pre_124_45_16 () Int) +(declare-fun value_124_45_16 () Int) +(declare-fun elementCount_pre_153_79_33 () Int) +(declare-fun elementCount_153_79_33 () Int) +(declare-fun locOpenParen_pre_80_23_13 () Int) +(declare-fun locOpenParen_80_23_13 () Int) +(declare-fun modifiers_pre_51_24_13 () Int) +(declare-fun modifiers_51_24_13 () Int) +(declare-fun elementType_pre_153_43_27 () Int) +(declare-fun elementType_153_43_27 () Int) +(declare-fun locId_pre_23_38_13 () Int) +(declare-fun locId_23_38_13 () Int) +(declare-fun decl_pre_112_26_38 () Int) +(declare-fun decl_112_26_38 () Int) +(declare-fun GE_pre_29_26_26 () Int) +(declare-fun voidType_pre_38_103_4 () Int) +(declare-fun voidType_38_103_4 () Int) +(declare-fun keywordStrings_pre_27_181_30 () Int) +(declare-fun myTypeDecl_pre_5_63_40 () Int) +(declare-fun myTypeDecl_5_63_40 () Int) +(declare-fun THROWSTMT_pre_30_34_7 () Int) +(declare-fun NULL_pre_44_60_26 () Int) +(declare-fun parent_pre_51_22_18 () Int) +(declare-fun parent_51_22_18 () Int) +(declare-fun count_pre_84_67_33 () Int) +(declare-fun count_84_67_33 () Int) +(declare-fun rootIEnv_pre_51_45 () Int) +(declare-fun rootIEnv_51_45 () Int) +(declare-fun BITNOT_pre_29_57_26 () Int) +(declare-fun loc_pre_32_40_13 () Int) +(declare-fun loc_32_40_13 () Int) +(declare-fun EXPROBJECTDESIGNATOR_pre_30_61_7 () Int) +(declare-fun elems_pre () Int) +(declare-fun elems () Int) +(declare-fun LS () Int) +(declare-fun alloc_pre () Int) +(declare-fun this () Int) +(declare-fun leftExpr_1535_39 () Int) +(declare-fun rightExpr_1535_54 () Int) +(declare-fun RES_1536_24_1536_24 () Int) +(declare-fun EC_1536_24_1536_24 () Int) +(declare-fun ecReturn () Int) +(declare-fun RES_1537_18_1537_18 () Int) +(declare-fun EC_1537_18_1537_18 () Int) +(declare-fun RES_1543_11_1543_11 () Int) +(declare-fun EC_1543_11_1543_11 () Int) +(declare-fun RES_1550_11_1550_11 () Int) +(declare-fun EC_1550_11_1550_11 () Int) +(declare-fun RES_1551_14_1551_14 () Int) +(declare-fun EC_1551_14_1551_14 () Int) +(declare-fun RES () Int) +(declare-fun EC () Int) +(declare-fun tmp1_cand_1551_5 () Int) +(declare-fun RES_1557_15_1557_15 () Int) +(declare-fun EC_1557_15_1557_15 () Int) +(declare-fun RES_1558_14_1558_14 () Int) +(declare-fun EC_1558_14_1558_14 () Int) +(declare-fun RES_1_ () Int) +(declare-fun tmp2_cand_1557_52 () Int) +(declare-fun EC_1_ () Int) +(declare-fun RES_1560_15_1560_15 () Int) +(declare-fun EC_1560_15_1560_15 () Int) +(declare-fun RES_1561_14_1561_14 () Int) +(declare-fun EC_1561_14_1561_14 () Int) +(declare-fun RES_2_ () Int) +(declare-fun EC_2_ () Int) +(declare-fun tmp5_cand_1560_53 () Int) +(declare-fun RES_1570_16_1570_16 () Int) +(declare-fun EC_1570_16_1570_16 () Int) +(declare-fun RES_3_ () Int) +(declare-fun tmp10_cor_1570_53 () Int) +(declare-fun EC_3_ () Int) +(declare-fun RES_1571_10_1571_10 () Int) +(declare-fun EC_1571_10_1571_10 () Int) +(declare-fun RES_4_ () Int) +(declare-fun EC_4_ () Int) +(declare-fun tmp9_cor_1571_48 () Int) +(declare-fun RES_1572_10_1572_10 () Int) +(declare-fun EC_1572_10_1572_10 () Int) +(declare-fun RES_1574_35_1574_35 () Int) +(declare-fun EC_1574_35_1574_35 () Int) +(declare-fun t_1574_2_1574_2_67_16_71 () Int) +(declare-fun RES_1574_2_1574_2 () Int) +(declare-fun EC_1574_2_1574_2 () Int) +(declare-fun RES_5_ () Int) +(declare-fun tmp8_cand_1573_2 () Int) +(declare-fun EC_5_ () Int) +(declare-fun RES_1577_16_1577_16 () Int) +(declare-fun EC_1577_16_1577_16 () Int) +(declare-fun RES_6_ () Int) +(declare-fun EC_6_ () Int) +(declare-fun tmp17_cor_1577_54 () Int) +(declare-fun RES_1578_10_1578_10 () Int) +(declare-fun EC_1578_10_1578_10 () Int) +(declare-fun RES_7_ () Int) +(declare-fun tmp16_cor_1578_49 () Int) +(declare-fun EC_7_ () Int) +(declare-fun RES_1579_10_1579_10 () Int) +(declare-fun EC_1579_10_1579_10 () Int) +(declare-fun RES_1581_35_1581_35 () Int) +(declare-fun EC_1581_35_1581_35 () Int) +(declare-fun t_1581_2_1581_2_67_16_71 () Int) +(declare-fun RES_1599_11_1599_11 () Int) +(declare-fun EC_1599_11_1599_11 () Int) +(declare-fun RES_1600_11_1600_11 () Int) +(declare-fun EC_1600_11_1600_11 () Int) +(declare-fun RES_8_ () Int) +(declare-fun EC_8_ () Int) +(declare-fun tmp23_cand_1599_48 () Int) +(declare-fun RES_1602_11_1602_11 () Int) +(declare-fun EC_1602_11_1602_11 () Int) +(declare-fun RES_1603_11_1603_11 () Int) +(declare-fun EC_1603_11_1603_11 () Int) +(declare-fun RES_9_ () Int) +(declare-fun EC_9_ () Int) +(declare-fun tmp25_cand_1602_49 () Int) +(declare-fun RES_1615_11_1615_11 () Int) +(declare-fun EC_1615_11_1615_11 () Int) +(declare-fun RES_1616_14_1616_14 () Int) +(declare-fun EC_1616_14_1616_14 () Int) +(declare-fun RES_10_ () Int) +(declare-fun EC_10_ () Int) +(declare-fun tmp27_cand_1616_5 () Int) +(declare-fun RES_1617_9_1617_9 () Int) +(declare-fun EC_1617_9_1617_9 () Int) +(declare-fun RES_11_ () Int) +(declare-fun RES_1581_2_1581_2 () Int) +(declare-fun EC_1581_2_1581_2 () Int) +(declare-fun RES_12_ () Int) +(declare-fun EC_11_ () Int) +(declare-fun tmp15_cand_1580_2 () Int) +(declare-fun RES_1591_18_1591_18 () Int) +(declare-fun EC_1591_18_1591_18 () Int) +(declare-fun RES_1619_9_1619_9 () Int) +(declare-fun EC_1619_9_1619_9 () Int) +(declare-fun EC_12_ () Int) +(assert (let ((?v_0 (array T_int)) (?v_1 (array T_java_lang_String)) (?v_64 (= true_term (is nullType_38_131_4 T_javafe_ast_PrimitiveType))) (?v_38 (= true_term (is charType_38_127_4 T_javafe_ast_PrimitiveType))) (?v_20 (= true_term (is shortType_38_139_4 T_javafe_ast_PrimitiveType))) (?v_15 (= true_term (is byteType_38_135_4 T_javafe_ast_PrimitiveType))) (?v_2 (not (= leftExpr_1535_39 null))) (?v_4 (not (= rightExpr_1535_54 null))) (?v_12 (not (= byteType_38_135_4 null))) (?v_17 (not (= shortType_38_139_4 null))) (?v_34 (not (= charType_38_127_4 null))) (?v_62 (not (= nullType_38_131_4 null)))) (let ((?v_59 (not ?v_2)) (?v_70 (= true_term (is RES_1536_24_1536_24 T_javafe_ast_Type))) (?v_71 (= true_term (isAllocated RES_1536_24_1536_24 alloc))) (?v_3 (= EC_1536_24_1536_24 ecReturn)) (?v_6 (not (= RES_1536_24_1536_24 null)))) (let ((?v_72 (=> ?v_3 ?v_6)) (?v_39 (not ?v_4)) (?v_73 (= true_term (is RES_1537_18_1537_18 T_javafe_ast_Type))) (?v_74 (= true_term (isAllocated RES_1537_18_1537_18 alloc))) (?v_5 (= EC_1537_18_1537_18 ecReturn)) (?v_7 (not (= RES_1537_18_1537_18 null)))) (let ((?v_75 (=> ?v_5 ?v_7)) (?v_76 (= true_term (is RES_1543_11_1543_11 T_boolean))) (?v_8 (= EC_1543_11_1543_11 ecReturn)) (?v_9 (= true_term RES_1543_11_1543_11)) (?v_40 (= true_term (is RES_1536_24_1536_24 T_javafe_ast_PrimitiveType)))) (let ((?v_14 (and ?v_40 ?v_6)) (?v_60 (= true_term (is RES_1537_18_1537_18 T_javafe_ast_PrimitiveType)))) (let ((?v_19 (and ?v_60 ?v_7))) (let ((?v_77 (=> (and ?v_8 ?v_9) (= ?v_14 ?v_19))) (?v_78 (not ?v_9)) (?v_11 (= true_term true_term)) (?v_79 (= true_term (is RES_1550_11_1550_11 T_boolean))) (?v_80 (= EC_1550_11_1550_11 ecReturn)) (?v_10 (= true_term RES_1550_11_1550_11))) (let ((?v_81 (or (and ?v_10 (= true_term (is RES_1551_14_1551_14 T_boolean)) (= EC_1551_14_1551_14 ecReturn) (= RES RES_1551_14_1551_14) (= EC EC_1551_14_1551_14) (= tmp1_cand_1551_5 RES_1551_14_1551_14)) (and (not ?v_10) ?v_11 (= RES RES_1550_11_1550_11) (= EC EC_1550_11_1550_11) (= tmp1_cand_1551_5 false_term)))) (?v_61 (= true_term tmp1_cand_1551_5)) (?v_26 (not (and ?v_6 ?v_12))) (?v_82 (= true_term (is RES_1557_15_1557_15 T_boolean))) (?v_13 (= EC_1557_15_1557_15 ecReturn)) (?v_16 (= true_term RES_1557_15_1557_15)) (?v_22 (and ?v_15 ?v_12))) (let ((?v_28 (= ?v_14 ?v_22))) (let ((?v_83 (=> (and ?v_13 ?v_16) ?v_28)) (?v_51 (not (and ?v_7 ?v_17))) (?v_18 (= EC_1558_14_1558_14 ecReturn)) (?v_25 (and ?v_20 ?v_17))) (let ((?v_54 (= ?v_19 ?v_25))) (let ((?v_84 (or (and ?v_16 (= true_term (is RES_1558_14_1558_14 T_boolean)) ?v_18 (=> (and ?v_18 (= true_term RES_1558_14_1558_14)) ?v_54) (= RES_1_ RES_1558_14_1558_14) (= tmp2_cand_1557_52 RES_1558_14_1558_14) (= EC_1_ EC_1558_14_1558_14)) (and (not ?v_16) ?v_11 (= RES_1_ RES_1557_15_1557_15) (= tmp2_cand_1557_52 false_term) (= EC_1_ EC_1557_15_1557_15)))) (?v_85 (= true_term tmp2_cand_1557_52))) (let ((?v_86 (not ?v_85)) (?v_47 (not (and ?v_7 ?v_12))) (?v_87 (= true_term (is RES_1560_15_1560_15 T_boolean))) (?v_21 (= EC_1560_15_1560_15 ecReturn)) (?v_23 (= true_term RES_1560_15_1560_15)) (?v_49 (= ?v_19 ?v_22))) (let ((?v_88 (=> (and ?v_21 ?v_23) ?v_49)) (?v_30 (not (and ?v_6 ?v_17))) (?v_24 (= EC_1561_14_1561_14 ecReturn)) (?v_33 (= ?v_14 ?v_25))) (let ((?v_89 (or (and ?v_23 (= true_term (is RES_1561_14_1561_14 T_boolean)) ?v_24 (=> (and ?v_24 (= true_term RES_1561_14_1561_14)) ?v_33) (= RES_2_ RES_1561_14_1561_14) (= EC_2_ EC_1561_14_1561_14) (= tmp5_cand_1560_53 RES_1561_14_1561_14)) (and (not ?v_23) ?v_11 (= RES_2_ RES_1560_15_1560_15) (= EC_2_ EC_1560_15_1560_15) (= tmp5_cand_1560_53 false_term)))) (?v_90 (= true_term tmp5_cand_1560_53))) (let ((?v_92 (not ?v_90)) (?v_93 (= true_term (is RES_1570_16_1570_16 T_boolean))) (?v_27 (= EC_1570_16_1570_16 ecReturn)) (?v_29 (= true_term RES_1570_16_1570_16))) (let ((?v_94 (=> (and ?v_27 ?v_29) ?v_28)) (?v_31 (not ?v_29)) (?v_32 (= EC_1571_10_1571_10 ecReturn))) (let ((?v_95 (or (and ?v_29 ?v_11 (= RES_3_ RES_1570_16_1570_16) (= tmp10_cor_1570_53 true_term) (= EC_3_ EC_1570_16_1570_16)) (and ?v_31 (= true_term (is RES_1571_10_1571_10 T_boolean)) ?v_32 (=> (and ?v_32 (= true_term RES_1571_10_1571_10)) ?v_33) (= RES_3_ RES_1571_10_1571_10) (= tmp10_cor_1570_53 RES_1571_10_1571_10) (= EC_3_ EC_1571_10_1571_10)))) (?v_35 (= true_term tmp10_cor_1570_53))) (let ((?v_36 (not ?v_35)) (?v_37 (= EC_1572_10_1572_10 ecReturn)) (?v_58 (and ?v_38 ?v_34))) (let ((?v_96 (or (and ?v_35 ?v_11 (= RES_4_ RES_3_) (= EC_4_ EC_3_) (= tmp9_cor_1571_48 true_term)) (and ?v_36 (= true_term (is RES_1572_10_1572_10 T_boolean)) ?v_37 (=> (and ?v_37 (= true_term RES_1572_10_1572_10)) (= ?v_14 ?v_58)) (= RES_4_ RES_1572_10_1572_10) (= EC_4_ EC_1572_10_1572_10) (= tmp9_cor_1571_48 RES_1572_10_1572_10)))) (?v_41 (= true_term tmp9_cor_1571_48)) (?v_42 (= true_term (is RES_1574_35_1574_35 T_java_lang_Object))) (?v_43 (= true_term (isAllocated RES_1574_35_1574_35 alloc))) (?v_44 (= EC_1574_35_1574_35 ecReturn)) (?v_45 (= t_1574_2_1574_2_67_16_71 (cast RES_1536_24_1536_24 T_javafe_ast_PrimitiveType))) (?v_46 (not (= t_1574_2_1574_2_67_16_71 null)))) (let ((?v_97 (or (and ?v_41 ?v_4 ?v_42 ?v_43 ?v_44 ?v_40 ?v_45 ?v_46 (= true_term (is RES_1574_2_1574_2 T_boolean)) (= EC_1574_2_1574_2 ecReturn) (= RES_5_ RES_1574_2_1574_2) (= tmp8_cand_1573_2 RES_1574_2_1574_2) (= EC_5_ EC_1574_2_1574_2)) (and (not ?v_41) ?v_11 (= RES_5_ RES_4_) (= tmp8_cand_1573_2 false_term) (= EC_5_ EC_4_)))) (?v_98 (= true_term tmp8_cand_1573_2))) (let ((?v_99 (not ?v_98)) (?v_100 (= true_term (is RES_1577_16_1577_16 T_boolean))) (?v_48 (= EC_1577_16_1577_16 ecReturn)) (?v_50 (= true_term RES_1577_16_1577_16))) (let ((?v_101 (=> (and ?v_48 ?v_50) ?v_49)) (?v_52 (not ?v_50)) (?v_53 (= EC_1578_10_1578_10 ecReturn))) (let ((?v_102 (or (and ?v_50 ?v_11 (= RES_6_ RES_1577_16_1577_16) (= EC_6_ EC_1577_16_1577_16) (= tmp17_cor_1577_54 true_term)) (and ?v_52 (= true_term (is RES_1578_10_1578_10 T_boolean)) ?v_53 (=> (and ?v_53 (= true_term RES_1578_10_1578_10)) ?v_54) (= RES_6_ RES_1578_10_1578_10) (= EC_6_ EC_1578_10_1578_10) (= tmp17_cor_1577_54 RES_1578_10_1578_10)))) (?v_55 (= true_term tmp17_cor_1577_54))) (let ((?v_56 (not ?v_55)) (?v_57 (= EC_1579_10_1579_10 ecReturn))) (let ((?v_103 (or (and ?v_55 ?v_11 (= RES_7_ RES_6_) (= tmp16_cor_1578_49 true_term) (= EC_7_ EC_6_)) (and ?v_56 (= true_term (is RES_1579_10_1579_10 T_boolean)) ?v_57 (=> (and ?v_57 (= true_term RES_1579_10_1579_10)) (= ?v_19 ?v_58)) (= RES_7_ RES_1579_10_1579_10) (= tmp16_cor_1578_49 RES_1579_10_1579_10) (= EC_7_ EC_1579_10_1579_10)))) (?v_104 (= true_term tmp16_cor_1578_49)) (?v_105 (= true_term (is RES_1581_35_1581_35 T_java_lang_Object))) (?v_106 (= true_term (isAllocated RES_1581_35_1581_35 alloc))) (?v_107 (= EC_1581_35_1581_35 ecReturn)) (?v_108 (= t_1581_2_1581_2_67_16_71 (cast RES_1537_18_1537_18 T_javafe_ast_PrimitiveType))) (?v_109 (not (= t_1581_2_1581_2_67_16_71 null))) (?v_112 (not ?v_61)) (?v_113 (= true_term (is RES_1599_11_1599_11 T_boolean))) (?v_63 (= EC_1599_11_1599_11 ecReturn)) (?v_65 (= true_term RES_1599_11_1599_11)) (?v_67 (and ?v_64 ?v_62))) (let ((?v_114 (=> (and ?v_63 ?v_65) (= ?v_14 ?v_67))) (?v_115 (or (and ?v_65 (= true_term (is RES_1600_11_1600_11 T_boolean)) (= EC_1600_11_1600_11 ecReturn) (= RES_8_ RES_1600_11_1600_11) (= EC_8_ EC_1600_11_1600_11) (= tmp23_cand_1599_48 RES_1600_11_1600_11)) (and (not ?v_65) ?v_11 (= RES_8_ RES_1599_11_1599_11) (= EC_8_ EC_1599_11_1599_11) (= tmp23_cand_1599_48 false_term)))) (?v_116 (= true_term tmp23_cand_1599_48))) (let ((?v_117 (not ?v_116)) (?v_118 (= true_term (is RES_1602_11_1602_11 T_boolean))) (?v_66 (= EC_1602_11_1602_11 ecReturn)) (?v_68 (= true_term RES_1602_11_1602_11))) (let ((?v_119 (=> (and ?v_66 ?v_68) (= ?v_19 ?v_67))) (?v_120 (or (and ?v_68 (= true_term (is RES_1603_11_1603_11 T_boolean)) (= EC_1603_11_1603_11 ecReturn) (= RES_9_ RES_1603_11_1603_11) (= EC_9_ EC_1603_11_1603_11) (= tmp25_cand_1602_49 RES_1603_11_1603_11)) (and (not ?v_68) ?v_11 (= RES_9_ RES_1602_11_1602_11) (= EC_9_ EC_1602_11_1602_11) (= tmp25_cand_1602_49 false_term)))) (?v_121 (= true_term tmp25_cand_1602_49))) (let ((?v_122 (not ?v_121)) (?v_123 (= true_term (is RES_1615_11_1615_11 T_boolean))) (?v_124 (= EC_1615_11_1615_11 ecReturn)) (?v_69 (= true_term RES_1615_11_1615_11))) (let ((?v_125 (or (and ?v_69 (= true_term (is RES_1616_14_1616_14 T_boolean)) (= EC_1616_14_1616_14 ecReturn) (= RES_10_ RES_1616_14_1616_14) (= EC_10_ EC_1616_14_1616_14) (= tmp27_cand_1616_5 RES_1616_14_1616_14)) (and (not ?v_69) ?v_11 (= RES_10_ RES_1615_11_1615_11) (= EC_10_ EC_1615_11_1615_11) (= tmp27_cand_1616_5 false_term)))) (?v_126 (= true_term tmp27_cand_1616_5)) (?v_127 (= true_term (is RES_1617_9_1617_9 T_boolean))) (?v_128 (= EC_1617_9_1617_9 ecReturn)) (?v_129 (= true_term RES_1617_9_1617_9))) (let ((?v_130 (not ?v_129)) (?v_91 (= RES_11_ shortType_38_139_4)) (?v_110 (= true_term tmp15_cand_1580_2)) (?v_111 (= EC_1591_18_1591_18 ecReturn)) (?v_131 (= true_term (is RES_1619_9_1619_9 T_boolean))) (?v_132 (= EC_1619_9_1619_9 ecReturn)) (?v_133 (= true_term RES_1619_9_1619_9))) (not (=> true (=> (and (= EQ_pre_29_25_26 EQ_29_25_26) (= true_term (is EQ_29_25_26 T_int)) (= tmodifiers_pre_7_30_33 tmodifiers_7_30_33) (= tmodifiers_7_30_33 (asField tmodifiers_7_30_33 T_javafe_ast_TypeModifierPragmaVec)) (< (fClosedTime tmodifiers_7_30_33) alloc) (= ACC_FINAL_pre_31_23_26 ACC_FINAL_31_23_26) (= true_term (is ACC_FINAL_31_23_26 T_int)) (= RETURNSTMT_pre_30_33_7 RETURNSTMT_30_33_7) (= true_term (is RETURNSTMT_30_33_7 T_int)) (= expr_pre_78_15_28 expr_78_15_28) (= expr_78_15_28 (asField expr_78_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_78_15_28) alloc) (forall ((?s Int)) (=> (not (= ?s null)) (not (= (S_select expr_78_15_28 ?s) null)))) (= expr_pre_81_15_28 expr_81_15_28) (= expr_81_15_28 (asField expr_81_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_81_15_28) alloc) (forall ((?s_1_ Int)) (=> (not (= ?s_1_ null)) (not (= (S_select expr_81_15_28 ?s_1_) null)))) (= NOT_pre_29_56_26 NOT_29_56_26) (= true_term (is NOT_29_56_26 T_int)) (= loc_pre_164_16_13 loc_164_16_13) (= loc_164_16_13 (asField loc_164_16_13 T_int)) (= ids_pre_167_19_37 ids_167_19_37) (= ids_167_19_37 (asField ids_167_19_37 T_javafe_ast_IdentifierVec)) (< (fClosedTime ids_167_19_37) alloc) (forall ((?s_2_ Int)) (=> (not (= ?s_2_ null)) (not (= (S_select ids_167_19_37 ?s_2_) null)))) (= locOpenBracket_pre_89_21_13 locOpenBracket_89_21_13) (= locOpenBracket_89_21_13 (asField locOpenBracket_89_21_13 T_int)) (= locOpenParen_pre_42_48_13 locOpenParen_42_48_13) (= locOpenParen_42_48_13 (asField locOpenParen_42_48_13 T_int)) (= name_pre_107_20_28 name_107_20_28) (= name_107_20_28 (asField name_107_20_28 T_javafe_ast_Name)) (< (fClosedTime name_107_20_28) alloc) (forall ((?s_3_ Int)) (=> (not (= ?s_3_ null)) (not (= (S_select name_107_20_28 ?s_3_) null)))) (= CLASSLITERAL_pre_30_60_7 CLASSLITERAL_30_60_7) (= true_term (is CLASSLITERAL_30_60_7 T_int)) (= ACC_STATIC_pre_31_22_26 ACC_STATIC_31_22_26) (= true_term (is ACC_STATIC_31_22_26 T_int)) (= elements_pre_45_61_37 elements_45_61_37) (= elements_45_61_37 (asField elements_45_61_37 (array T_javafe_ast_TypeName))) (< (fClosedTime elements_45_61_37) alloc) (forall ((?s_4_ Int)) (=> (not (= ?s_4_ null)) (not (= (S_select elements_45_61_37 ?s_4_) null)))) (= state_pre_5_787_15 state_5_787_15) (= state_5_787_15 (asField state_5_787_15 T_int)) (= id_pre_33_15_34 id_33_15_34) (= id_33_15_34 (asField id_33_15_34 T_javafe_ast_Identifier)) (< (fClosedTime id_33_15_34) alloc) (forall ((?s_5_ Int)) (=> (not (= ?s_5_ null)) (not (= (S_select id_33_15_34 ?s_5_) null)))) (= stmt_pre_73_17_28 stmt_73_17_28) (= stmt_73_17_28 (asField stmt_73_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_73_17_28) alloc) (forall ((?s_6_ Int)) (=> (not (= ?s_6_ null)) (not (= (S_select stmt_73_17_28 ?s_6_) null)))) (= locCloseBrace_pre_18_54_13 locCloseBrace_18_54_13) (= locCloseBrace_18_54_13 (asField locCloseBrace_18_54_13 T_int)) (= NE_pre_29_24_26 NE_29_24_26) (= true_term (is NE_29_24_26 T_int)) (= loc_pre_74_33_13 loc_74_33_13) (= loc_74_33_13 (asField loc_74_33_13 T_int)) (= EVALSTMT_pre_30_32_7 EVALSTMT_30_32_7) (= true_term (is EVALSTMT_30_32_7 T_int)) (= syntax_pre_7_28_29 syntax_7_28_29) (= syntax_7_28_29 (asField syntax_7_28_29 T_boolean)) (= sig_pre_48_39 sig_48_39) (= sig_48_39 (asField sig_48_39 T_javafe_tc_TypeSig)) (< (fClosedTime sig_48_39) alloc) (= UNARYSUB_pre_29_55_26 UNARYSUB_29_55_26) (= true_term (is UNARYSUB_29_55_26 T_int)) (= METHODINVOCATION_pre_30_59_7 METHODINVOCATION_30_59_7) (= true_term (is METHODINVOCATION_30_59_7 T_int)) (= loc_pre_165_20_13 loc_165_20_13) (= loc_165_20_13 (asField loc_165_20_13 T_int)) (= type_pre_23_35_28 type_23_35_28) (= type_23_35_28 (asField type_23_35_28 T_javafe_ast_Type)) (< (fClosedTime type_23_35_28) alloc) (forall ((?s_7_ Int)) (=> (not (= ?s_7_ null)) (not (= (S_select type_23_35_28 ?s_7_) null)))) (= nullType_pre_38_131_4 nullType_38_131_4) ?v_64 (= true_term (isAllocated nullType_38_131_4 alloc)) (= BITAND_pre_29_23_26 BITAND_29_23_26) (= true_term (is BITAND_29_23_26 T_int)) (= SYNCHRONIZESTMT_pre_30_31_7 SYNCHRONIZESTMT_30_31_7) (= true_term (is SYNCHRONIZESTMT_30_31_7 T_int)) (= parent_pre_52_18_18 parent_52_18_18) (= parent_52_18_18 (asField parent_52_18_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_52_18_18) alloc) (= UNARYADD_pre_29_54_26 UNARYADD_29_54_26) (= true_term (is UNARYADD_29_54_26 T_int)) (= AMBIGUOUSMETHODINVOCATION_pre_30_58_7 AMBIGUOUSMETHODINVOCATION_30_58_7) (= true_term (is AMBIGUOUSMETHODINVOCATION_30_58_7 T_int)) (= label_pre_73_15_34 label_73_15_34) (= label_73_15_34 (asField label_73_15_34 T_javafe_ast_Identifier)) (< (fClosedTime label_73_15_34) alloc) (forall ((?s_8_ Int)) (=> (not (= ?s_8_ null)) (not (= (S_select label_73_15_34 ?s_8_) null)))) (= otherCodes_pre_27_202_27 otherCodes_27_202_27) (= true_term (is otherCodes_27_202_27 ?v_0)) (= true_term (isAllocated otherCodes_27_202_27 alloc)) (= BITXOR_pre_29_22_26 BITXOR_29_22_26) (= true_term (is BITXOR_29_22_26 T_int)) (= loc_pre_80_20_13 loc_80_20_13) (= loc_80_20_13 (asField loc_80_20_13 T_int)) (= DOSTMT_pre_30_30_7 DOSTMT_30_30_7) (= true_term (is DOSTMT_30_30_7 T_int)) (= loc_pre_112_22_13 loc_112_22_13) (= loc_112_22_13 (asField loc_112_22_13 T_int)) (= type_pre_99_24_28 type_99_24_28) (= type_99_24_28 (asField type_99_24_28 T_javafe_ast_Type)) (< (fClosedTime type_99_24_28) alloc) (forall ((?s_9_ Int)) (=> (not (= ?s_9_ null)) (not (= (S_select type_99_24_28 ?s_9_) null)))) (= ASGBITXOR_pre_29_51_26 ASGBITXOR_29_51_26) (= true_term (is ASGBITXOR_29_51_26 T_int)) (= FIELDACCESS_pre_30_57_7 FIELDACCESS_30_57_7) (= true_term (is FIELDACCESS_30_57_7 T_int)) (= locKeyword_pre_42_45_13 locKeyword_42_45_13) (= locKeyword_42_45_13 (asField locKeyword_42_45_13 T_int)) (= punctuationStrings_pre_27_134_22 punctuationStrings_27_134_22) (= true_term (is punctuationStrings_27_134_22 ?v_1)) (= true_term (isAllocated punctuationStrings_27_134_22 alloc)) (= length_pre_98_50_25 length_98_50_25) (= length_98_50_25 (asField length_98_50_25 T_int)) (= loc_pre_39_35_13 loc_39_35_13) (= loc_39_35_13 (asField loc_39_35_13 T_int)) (= CHECKED_pre_5_776_28 CHECKED_5_776_28) (= true_term (is CHECKED_5_776_28 T_int)) (= locCloseBracket_pre_94_23_13 locCloseBracket_94_23_13) (= locCloseBracket_94_23_13 (asField locCloseBracket_94_23_13 T_int)) (= BITOR_pre_29_21_26 BITOR_29_21_26) (= true_term (is BITOR_29_21_26 T_int)) (= loc_pre_85_22_13 loc_85_22_13) (= loc_85_22_13 (asField loc_85_22_13 T_int)) (= count_pre_166_67_33 count_166_67_33) (= count_166_67_33 (asField count_166_67_33 T_int)) (= body_pre_74_30_28 body_74_30_28) (= body_74_30_28 (asField body_74_30_28 T_javafe_ast_Stmt)) (< (fClosedTime body_74_30_28) alloc) (forall ((?s_10_ Int)) (=> (not (= ?s_10_ null)) (not (= (S_select body_74_30_28 ?s_10_) null)))) (= WHILESTMT_pre_30_29_7 WHILESTMT_30_29_7) (= true_term (is WHILESTMT_30_29_7 T_int)) (= count_pre_90_67_33 count_90_67_33) (= count_90_67_33 (asField count_90_67_33 T_int)) (= permitsNullValue_pre_64_31_27 permitsNullValue_64_31_27) (= permitsNullValue_64_31_27 (asField permitsNullValue_64_31_27 T_boolean)) (= locOpenBrace_pre_18_51_13 locOpenBrace_18_51_13) (= locOpenBrace_18_51_13 (asField locOpenBrace_18_51_13 T_int)) (= ASGBITOR_pre_29_50_26 ASGBITOR_29_50_26) (= true_term (is ASGBITOR_29_50_26 T_int)) (= fieldSeq_pre_48_162_38 fieldSeq_48_162_38) (= fieldSeq_48_162_38 (asField fieldSeq_48_162_38 T_javafe_util_StackVector)) (< (fClosedTime fieldSeq_48_162_38) alloc) (forall ((?s_11_ Int)) (=> (not (= ?s_11_ null)) (not (= (S_select fieldSeq_48_162_38 ?s_11_) null)))) (= PREPPED_pre_5_775_28 PREPPED_5_775_28) (= true_term (is PREPPED_5_775_28 T_int)) (= VARIABLEACCESS_pre_30_56_7 VARIABLEACCESS_30_56_7) (= true_term (is VARIABLEACCESS_30_56_7 T_int)) (= elemType_pre_89_18_28 elemType_89_18_28) (= elemType_89_18_28 (asField elemType_89_18_28 T_javafe_ast_Type)) (< (fClosedTime elemType_89_18_28) alloc) (forall ((?s_12_ Int)) (=> (not (= ?s_12_ null)) (not (= (S_select elemType_89_18_28 ?s_12_) null)))) (= locDots_pre_167_31_29 locDots_167_31_29) (= locDots_167_31_29 (asField locDots_167_31_29 ?v_0)) (< (fClosedTime locDots_167_31_29) alloc) (forall ((?s_13_ Int)) (=> (not (= ?s_13_ null)) (not (= (S_select locDots_167_31_29 ?s_13_) null)))) (= count_pre_122_67_33 count_122_67_33) (= count_122_67_33 (asField count_122_67_33 T_int)) (= CLASSDECLSTMT_pre_30_28_7 CLASSDECLSTMT_30_28_7) (= true_term (is CLASSDECLSTMT_30_28_7 T_int)) (= locOpenBrackets_pre_99_65_29 locOpenBrackets_99_65_29) (= locOpenBrackets_99_65_29 (asField locOpenBrackets_99_65_29 ?v_0)) (< (fClosedTime locOpenBrackets_99_65_29) alloc) (forall ((?s_14_ Int)) (=> (not (= ?s_14_ null)) (not (= (S_select locOpenBrackets_99_65_29 ?s_14_) null)))) (= decl_pre_95_55_25 decl_95_55_25) (= decl_95_55_25 (asField decl_95_55_25 T_javafe_ast_ConstructorDecl)) (< (fClosedTime decl_95_55_25) alloc) (= charType_pre_38_127_4 charType_38_127_4) ?v_38 (= true_term (isAllocated charType_38_127_4 alloc)) (= ASGBITAND_pre_29_49_26 ASGBITAND_29_49_26) (= true_term (is ASGBITAND_29_49_26 T_int)) (= elements_pre_24_61_43 elements_24_61_43) (= elements_24_61_43 (asField elements_24_61_43 (array T_javafe_ast_ModifierPragma))) (< (fClosedTime elements_24_61_43) alloc) (forall ((?s_15_ Int)) (=> (not (= ?s_15_ null)) (not (= (S_select elements_24_61_43 ?s_15_) null)))) (= locOpenBrace_pre_32_36_13 locOpenBrace_32_36_13) (= locOpenBrace_32_36_13 (asField locOpenBrace_32_36_13 T_int)) (= AMBIGUOUSVARIABLEACCESS_pre_30_55_7 AMBIGUOUSVARIABLEACCESS_30_55_7) (= true_term (is AMBIGUOUSVARIABLEACCESS_30_55_7 T_int)) (= decl_pre_59_35_37 decl_59_35_37) (= decl_59_35_37 (asField decl_59_35_37 T_javafe_ast_TypeDecl)) (< (fClosedTime decl_59_35_37) alloc) (forall ((?s_16_ Int)) (=> (not (= ?s_16_ null)) (not (= (S_select decl_59_35_37 ?s_16_) null)))) (= id_pre_23_32_34 id_23_32_34) (= id_23_32_34 (asField id_23_32_34 T_javafe_ast_Identifier)) (< (fClosedTime id_23_32_34) alloc) (forall ((?s_17_ Int)) (=> (not (= ?s_17_ null)) (not (= (S_select id_23_32_34 ?s_17_) null)))) (= locDot_pre_108_21_13 locDot_108_21_13) (= locDot_108_21_13 (asField locDot_108_21_13 T_int)) (= locCloseParen_pre_102_24_13 locCloseParen_102_24_13) (= locCloseParen_102_24_13 (asField locCloseParen_102_24_13 T_int)) (= locOpenParen_pre_95_52_13 locOpenParen_95_52_13) (= locOpenParen_95_52_13 (asField locOpenParen_95_52_13 T_int)) (= body_pre_32_34_19 body_32_34_19) (= body_32_34_19 (asField body_32_34_19 T_javafe_ast_BlockStmt)) (< (fClosedTime body_32_34_19) alloc) (= stmt_pre_80_17_33 stmt_80_17_33) (= stmt_80_17_33 (asField stmt_80_17_33 T_javafe_ast_BlockStmt)) (< (fClosedTime stmt_80_17_33) alloc) (forall ((?s_18_ Int)) (=> (not (= ?s_18_ null)) (not (= (S_select stmt_80_17_33 ?s_18_) null)))) (= forUpdate_pre_74_28_31 forUpdate_74_28_31) (= forUpdate_74_28_31 (asField forUpdate_74_28_31 T_javafe_ast_ExprVec)) (< (fClosedTime forUpdate_74_28_31) alloc) (forall ((?s_19_ Int)) (=> (not (= ?s_19_ null)) (not (= (S_select forUpdate_74_28_31 ?s_19_) null)))) (= loc_pre_76_20_13 loc_76_20_13) (= loc_76_20_13 (asField loc_76_20_13 T_int)) (= AND_pre_29_20_26 AND_29_20_26) (= true_term (is AND_29_20_26 T_int)) (= VARDECLSTMT_pre_30_27_7 VARDECLSTMT_30_27_7) (= true_term (is VARDECLSTMT_30_27_7 T_int)) (= id_pre_112_19_34 id_112_19_34) (= id_112_19_34 (asField id_112_19_34 T_javafe_ast_Identifier)) (< (fClosedTime id_112_19_34) alloc) (forall ((?s_20_ Int)) (=> (not (= ?s_20_ null)) (not (= (S_select id_112_19_34 ?s_20_) null)))) (= ASGURSHIFT_pre_29_48_26 ASGURSHIFT_29_48_26) (= true_term (is ASGURSHIFT_29_48_26 T_int)) (= elements_pre_123_61_39 elements_123_61_39) (= elements_123_61_39 (asField elements_123_61_39 (array T_javafe_ast_MethodDecl))) (< (fClosedTime elements_123_61_39) alloc) (forall ((?s_21_ Int)) (=> (not (= ?s_21_ null)) (not (= (S_select elements_123_61_39 ?s_21_) null)))) (= PARENEXPR_pre_30_54_7 PARENEXPR_30_54_7) (= true_term (is PARENEXPR_30_54_7 T_int)) (= locDot_pre_42_41_13 locDot_42_41_13) (= locDot_42_41_13 (asField locDot_42_41_13 T_int)) (= raises_pre_32_32_35 raises_32_32_35) (= raises_32_32_35 (asField raises_32_32_35 T_javafe_ast_TypeNameVec)) (< (fClosedTime raises_32_32_35) alloc) (forall ((?s_22_ Int)) (=> (not (= ?s_22_ null)) (not (= (S_select raises_32_32_35 ?s_22_) null)))) (= typeDecoration_pre_1853_31 typeDecoration_1853_31) (= true_term (is typeDecoration_1853_31 T_javafe_ast_ASTDecoration)) (= true_term (isAllocated typeDecoration_1853_31 alloc)) (= elementType_pre_64_26_25 elementType_64_26_25) (= elementType_64_26_25 (asField elementType_64_26_25 T__TYPE)) (= tag_pre_39_30_13 tag_39_30_13) (= tag_39_30_13 (asField tag_39_30_13 T_int)) (= NULLLIT_pre_28_45_26 NULLLIT_28_45_26) (= true_term (is NULLLIT_28_45_26 T_int)) (= body_pre_85_19_33 body_85_19_33) (= body_85_19_33 (asField body_85_19_33 T_javafe_ast_BlockStmt)) (< (fClosedTime body_85_19_33) alloc) (forall ((?s_23_ Int)) (=> (not (= ?s_23_ null)) (not (= (S_select body_85_19_33 ?s_23_) null)))) (= PARSED_pre_5_772_28 PARSED_5_772_28) (= true_term (is PARSED_5_772_28 T_int)) (= OR_pre_29_19_26 OR_29_19_26) (= true_term (is OR_29_19_26 T_int)) (= SWITCHSTMT_pre_30_26_7 SWITCHSTMT_30_26_7) (= true_term (is SWITCHSTMT_30_26_7 T_int)) (= locOpenBracket_pre_94_20_13 locOpenBracket_94_20_13) (= locOpenBracket_94_20_13 (asField locOpenBracket_94_20_13 T_int)) (= ASGRSHIFT_pre_29_47_26 ASGRSHIFT_29_47_26) (= true_term (is ASGRSHIFT_29_47_26 T_int)) (= decl_pre_91_28_19 decl_91_28_19) (= decl_91_28_19 (asField decl_91_28_19 T_javafe_ast_FieldDecl)) (< (fClosedTime decl_91_28_19) alloc) (= locId_pre_18_48_13 locId_18_48_13) (= locId_18_48_13 (asField locId_18_48_13 T_int)) (= CASTEXPR_pre_30_53_7 CASTEXPR_30_53_7) (= true_term (is CASTEXPR_30_53_7 T_int)) (= LAST_KEYWORD_pre_27_103_26 LAST_KEYWORD_27_103_26) (= true_term (is LAST_KEYWORD_27_103_26 T_int)) (= elements_pre_43_61_33 elements_43_61_33) (= elements_43_61_33 (asField elements_43_61_33 (array T_javafe_ast_Expr))) (< (fClosedTime elements_43_61_33) alloc) (forall ((?s_24_ Int)) (=> (not (= ?s_24_ null)) (not (= (S_select elements_43_61_33 ?s_24_) null)))) (= pmodifiers_pre_23_30_27 pmodifiers_23_30_27) (= pmodifiers_23_30_27 (asField pmodifiers_23_30_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_23_30_27) alloc) (= expr_pre_80_15_28 expr_80_15_28) (= expr_80_15_28 (asField expr_80_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_80_15_28) alloc) (forall ((?s_25_ Int)) (=> (not (= ?s_25_ null)) (not (= (S_select expr_80_15_28 ?s_25_) null)))) (= test_pre_74_26_28 test_74_26_28) (= test_74_26_28 (asField test_74_26_28 T_javafe_ast_Expr)) (< (fClosedTime test_74_26_28) alloc) (forall ((?s_26_ Int)) (=> (not (= ?s_26_ null)) (not (= (S_select test_74_26_28 ?s_26_) null)))) (= STRINGLIT_pre_28_44_26 STRINGLIT_28_44_26) (= true_term (is STRINGLIT_28_44_26 T_int)) (= locColon_pre_100_25_13 locColon_100_25_13) (= locColon_100_25_13 (asField locColon_100_25_13 T_int)) (= BLOCKSTMT_pre_30_25_7 BLOCKSTMT_30_25_7) (= true_term (is BLOCKSTMT_30_25_7 T_int)) (= inst_pre_48_25_52 inst_48_25_52) (= true_term (is inst_48_25_52 T_javafe_tc_PrepTypeDeclaration)) (= true_term (isAllocated inst_48_25_52 alloc)) (not (= inst_48_25_52 null)) (= NULL_pre_27_82_26 NULL_27_82_26) (= true_term (is NULL_27_82_26 T_int)) (= ASGLSHIFT_pre_29_46_26 ASGLSHIFT_29_46_26) (= true_term (is ASGLSHIFT_29_46_26 T_int)) (= modifiers_pre_23_28_13 modifiers_23_28_13) (= modifiers_23_28_13 (asField modifiers_23_28_13 T_int)) (= INSTANCEOFEXPR_pre_30_52_7 INSTANCEOFEXPR_30_52_7) (= true_term (is INSTANCEOFEXPR_30_52_7 T_int)) (= args_pre_32_30_41 args_32_30_41) (= args_32_30_41 (asField args_32_30_41 T_javafe_ast_FormalParaDeclVec)) (< (fClosedTime args_32_30_41) alloc) (forall ((?s_27_ Int)) (=> (not (= ?s_27_ null)) (not (= (S_select args_32_30_41 ?s_27_) null)))) (= tokenType_pre_58_90_8 tokenType_58_90_8) (= tokenType_58_90_8 (asField tokenType_58_90_8 T_int)) (= longType_pre_38_123_4 longType_38_123_4) (= true_term (is longType_38_123_4 T_javafe_ast_PrimitiveType)) (= true_term (isAllocated longType_38_123_4 alloc)) (= elements_pre_16_61_33 elements_16_61_33) (= elements_16_61_33 (asField elements_16_61_33 (array T_javafe_ast_Stmt))) (< (fClosedTime elements_16_61_33) alloc) (forall ((?s_28_ Int)) (=> (not (= ?s_28_ null)) (not (= (S_select elements_16_61_33 ?s_28_) null)))) (= superClass_pre_57_15_18 superClass_57_15_18) (= superClass_57_15_18 (asField superClass_57_15_18 T_javafe_ast_TypeName)) (< (fClosedTime superClass_57_15_18) alloc) (= arg_pre_85_17_38 arg_85_17_38) (= arg_85_17_38 (asField arg_85_17_38 T_javafe_ast_FormalParaDecl)) (< (fClosedTime arg_85_17_38) alloc) (forall ((?s_29_ Int)) (=> (not (= ?s_29_ null)) (not (= (S_select arg_85_17_38 ?s_29_) null)))) (= DOUBLELIT_pre_28_43_26 DOUBLELIT_28_43_26) (= true_term (is DOUBLELIT_28_43_26 T_int)) (= stmt_pre_76_17_28 stmt_76_17_28) (= stmt_76_17_28 (asField stmt_76_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_76_17_28) alloc) (forall ((?s_30_ Int)) (=> (not (= ?s_30_ null)) (not (= (S_select stmt_76_17_28 ?s_30_) null)))) (= loc_pre_95_49_13 loc_95_49_13) (= loc_95_49_13 (asField loc_95_49_13 T_int)) (= FORMALPARADECL_pre_30_24_7 FORMALPARADECL_30_24_7) (= true_term (is FORMALPARADECL_30_24_7 T_int)) (= map_pre_5_301_35 map_5_301_35) (= true_term (is map_5_301_35 T_java_util_Hashtable)) (= true_term (isAllocated map_5_301_35 alloc)) (= locOpenParen_pre_102_21_13 locOpenParen_102_21_13) (= locOpenParen_102_21_13 (asField locOpenParen_102_21_13 T_int)) (= locDot_pre_103_23_13 locDot_103_23_13) (= locDot_103_23_13 (asField locDot_103_23_13 T_int)) (= ASGSUB_pre_29_45_26 ASGSUB_29_45_26) (= true_term (is ASGSUB_29_45_26 T_int)) (= permitsNullKey_pre_64_21_27 permitsNullKey_64_21_27) (= permitsNullKey_64_21_27 (asField permitsNullKey_64_21_27 T_boolean)) (= elements_pre_21_61_41 elements_21_61_41) (= elements_21_61_41 (asField elements_21_61_41 (array T_javafe_ast_TypeDeclElem))) (< (fClosedTime elements_21_61_41) alloc) (forall ((?s_31_ Int)) (=> (not (= ?s_31_ null)) (not (= (S_select elements_21_61_41 ?s_31_) null)))) (= CONDEXPR_pre_30_51_7 CONDEXPR_30_51_7) (= true_term (is CONDEXPR_30_51_7 T_int)) (= decl_pre_111_34_20 decl_111_34_20) (= decl_111_34_20 (asField decl_111_34_20 T_javafe_ast_MethodDecl)) (< (fClosedTime decl_111_34_20) alloc) (= otherStrings_pre_27_193_30 otherStrings_27_193_30) (= true_term (is otherStrings_27_193_30 ?v_1)) (= true_term (isAllocated otherStrings_27_193_30 alloc)) (= elements_pre_153_72_21 elements_153_72_21) (= elements_153_72_21 (asField elements_153_72_21 (array T_java_lang_Object))) (< (fClosedTime elements_153_72_21) alloc) (= loc_pre_66_29_13 loc_66_29_13) (= loc_66_29_13 (asField loc_66_29_13 T_int)) (= forInit_pre_74_24_31 forInit_74_24_31) (= forInit_74_24_31 (asField forInit_74_24_31 T_javafe_ast_StmtVec)) (< (fClosedTime forInit_74_24_31) alloc) (forall ((?s_32_ Int)) (=> (not (= ?s_32_ null)) (not (= (S_select forInit_74_24_31 ?s_32_) null)))) (= FLOATLIT_pre_28_42_26 FLOATLIT_28_42_26) (= true_term (is FLOATLIT_28_42_26 T_int)) (= locGuardOpenParen_pre_75_23_13 locGuardOpenParen_75_23_13) (= locGuardOpenParen_75_23_13 (asField locGuardOpenParen_75_23_13 T_int)) (= loc_pre_101_21_13 loc_101_21_13) (= loc_101_21_13 (asField loc_101_21_13 T_int)) (= FIELDDECL_pre_30_23_7 FIELDDECL_30_23_7) (= true_term (is FIELDDECL_30_23_7 T_int)) (= count_pre_118_67_33 count_118_67_33) (= count_118_67_33 (asField count_118_67_33 T_int)) (= decorationType_pre_115_48_27 decorationType_115_48_27) (= decorationType_115_48_27 (asField decorationType_115_48_27 T__TYPE)) (= ASGADD_pre_29_44_26 ASGADD_29_44_26) (= true_term (is ASGADD_29_44_26 T_int)) (= index_pre_94_17_28 index_94_17_28) (= index_94_17_28 (asField index_94_17_28 T_javafe_ast_Expr)) (< (fClosedTime index_94_17_28) alloc) (forall ((?s_33_ Int)) (=> (not (= ?s_33_ null)) (not (= (S_select index_94_17_28 ?s_33_) null)))) (= loc_pre_18_45_13 loc_18_45_13) (= loc_18_45_13 (asField loc_18_45_13 T_int)) (= enclosingEnv_pre_5_52_36 enclosingEnv_5_52_36) (= enclosingEnv_5_52_36 (asField enclosingEnv_5_52_36 T_javafe_tc_Env)) (< (fClosedTime enclosingEnv_5_52_36) alloc) (= NEWARRAYEXPR_pre_30_50_7 NEWARRAYEXPR_30_50_7) (= true_term (is NEWARRAYEXPR_30_50_7 T_int)) (= enclosingInstance_pre_42_37_14 enclosingInstance_42_37_14) (= enclosingInstance_42_37_14 (asField enclosingInstance_42_37_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_42_37_14) alloc) (= elements_pre_84_61_40 elements_84_61_40) (= elements_84_61_40 (asField elements_84_61_40 (array T_javafe_ast_CatchClause))) (< (fClosedTime elements_84_61_40) alloc) (forall ((?s_34_ Int)) (=> (not (= ?s_34_ null)) (not (= (S_select elements_84_61_40 ?s_34_) null)))) (= dontAddImplicitConstructorInvocations_pre_23_26 dontAddImplicitConstructorInvocations_23_26) (= true_term (is dontAddImplicitConstructorInvocations_23_26 T_boolean)) (= locId_pre_91_24_13 locId_91_24_13) (= locId_91_24_13 (asField locId_91_24_13 T_int)) (= CHARLIT_pre_28_41_26 CHARLIT_28_41_26) (= true_term (is CHARLIT_28_41_26 T_int)) (= expr_pre_76_15_28 expr_76_15_28) (= expr_76_15_28 (asField expr_76_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_76_15_28) alloc) (forall ((?s_35_ Int)) (=> (not (= ?s_35_ null)) (not (= (S_select expr_76_15_28 ?s_35_) null)))) (= LOCALVARDECL_pre_30_22_7 LOCALVARDECL_30_22_7) (= true_term (is LOCALVARDECL_30_22_7 T_int)) (= enclosingLabels_pre_77_22 enclosingLabels_77_22) (= enclosingLabels_77_22 (asField enclosingLabels_77_22 T_javafe_ast_StmtVec)) (< (fClosedTime enclosingLabels_77_22) alloc) (= whereDecoration_pre_20_597_41 whereDecoration_20_597_41) (= true_term (is whereDecoration_20_597_41 T_javafe_ast_ASTDecoration)) (= true_term (isAllocated whereDecoration_20_597_41 alloc)) (= ASGREM_pre_29_43_26 ASGREM_29_43_26) (= true_term (is ASGREM_29_43_26 T_int)) (= locQuestion_pre_100_22_13 locQuestion_100_22_13) (= locQuestion_100_22_13 (asField locQuestion_100_22_13 T_int)) (= pmodifiers_pre_32_26_27 pmodifiers_32_26_27) (= pmodifiers_32_26_27 (asField pmodifiers_32_26_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_32_26_27) alloc) (= NEWINSTANCEEXPR_pre_30_49_7 NEWINSTANCEEXPR_30_49_7) (= true_term (is NEWINSTANCEEXPR_30_49_7 T_int)) (= loc_pre_92_29_13 loc_92_29_13) (= loc_92_29_13 (asField loc_92_29_13 T_int)) (= LONGLIT_pre_28_40_26 LONGLIT_28_40_26) (= true_term (is LONGLIT_28_40_26 T_int)) (= overridesDecoration_pre_48_154_45 overridesDecoration_48_154_45) (= true_term (is overridesDecoration_48_154_45 T_javafe_ast_ASTDecoration)) (= true_term (isAllocated overridesDecoration_48_154_45 alloc)) (not (= overridesDecoration_48_154_45 null)) (= modifiers_pre_32_24_13 modifiers_32_24_13) (= modifiers_32_24_13 (asField modifiers_32_24_13 T_int)) (= anonDecl_pre_95_45_19 anonDecl_95_45_19) (= anonDecl_95_45_19 (asField anonDecl_95_45_19 T_javafe_ast_ClassDecl)) (< (fClosedTime anonDecl_95_45_19) alloc) (= keyType_pre_64_16_25 keyType_64_16_25) (= keyType_64_16_25 (asField keyType_64_16_25 T__TYPE)) (= INITBLOCK_pre_30_21_7 INITBLOCK_30_21_7) (= true_term (is INITBLOCK_30_21_7 T_int)) (= loc_pre_83_23_13 loc_83_23_13) (= loc_83_23_13 (asField loc_83_23_13 T_int)) (= floatType_pre_38_119_4 floatType_38_119_4) (= true_term (is floatType_38_119_4 T_javafe_ast_PrimitiveType)) (= true_term (isAllocated floatType_38_119_4 alloc)) (= type_pre_102_18_28 type_102_18_28) (= type_102_18_28 (asField type_102_18_28 T_javafe_ast_Type)) (< (fClosedTime type_102_18_28) alloc) (forall ((?s_36_ Int)) (=> (not (= ?s_36_ null)) (not (= (S_select type_102_18_28 ?s_36_) null)))) (= array_pre_94_15_28 array_94_15_28) (= array_94_15_28 (asField array_94_15_28 T_javafe_ast_Expr)) (< (fClosedTime array_94_15_28) alloc) (forall ((?s_37_ Int)) (=> (not (= ?s_37_ null)) (not (= (S_select array_94_15_28 ?s_37_) null)))) (= ASGDIV_pre_29_42_26 ASGDIV_29_42_26) (= true_term (is ASGDIV_29_42_26 T_int)) (= ARRAYREFEXPR_pre_30_48_7 ARRAYREFEXPR_30_48_7) (= true_term (is ARRAYREFEXPR_30_48_7 T_int)) (= expr_pre_66_26_14 expr_66_26_14) (= expr_66_26_14 (asField expr_66_26_14 T_javafe_ast_Expr)) (< (fClosedTime expr_66_26_14) alloc) (= type_pre_109_27_28 type_109_27_28) (= type_109_27_28 (asField type_109_27_28 T_javafe_ast_Type)) (< (fClosedTime type_109_27_28) alloc) (forall ((?s_38_ Int)) (=> (not (= ?s_38_ null)) (not (= (S_select type_109_27_28 ?s_38_) null)))) (= locCloseBrace_pre_40_25_13 locCloseBrace_40_25_13) (= locCloseBrace_40_25_13 (asField locCloseBrace_40_25_13 T_int)) (= INTLIT_pre_28_39_26 INTLIT_28_39_26) (= true_term (is INTLIT_28_39_26 T_int)) (= type_pre_101_18_28 type_101_18_28) (= type_101_18_28 (asField type_101_18_28 T_javafe_ast_Type)) (< (fClosedTime type_101_18_28) alloc) (forall ((?s_39_ Int)) (=> (not (= ?s_39_ null)) (not (= (S_select type_101_18_28 ?s_39_) null)))) (= METHODDECL_pre_30_20_7 METHODDECL_30_20_7) (= true_term (is METHODDECL_30_20_7 T_int)) (= args_pre_111_30_31 args_111_30_31) (= args_111_30_31 (asField args_111_30_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_111_30_31) alloc) (forall ((?s_40_ Int)) (=> (not (= ?s_40_ null)) (not (= (S_select args_111_30_31 ?s_40_) null)))) (= ht_pre_155_33_36 ht_155_33_36) (= ht_155_33_36 (asField ht_155_33_36 T_java_util_Hashtable)) (< (fClosedTime ht_155_33_36) alloc) (forall ((?s_41_ Int)) (=> (not (= ?s_41_ null)) (not (= (S_select ht_155_33_36 ?s_41_) null)))) (= ASGMUL_pre_29_41_26 ASGMUL_29_41_26) (= true_term (is ASGMUL_29_41_26 T_int)) (= typeEnv_pre_20_323_32 typeEnv_20_323_32) (= true_term (is typeEnv_20_323_32 T_javafe_ast_ASTDecoration)) (= true_term (isAllocated typeEnv_20_323_32 alloc)) (= elems_pre_18_41_39 elems_18_41_39) (= elems_18_41_39 (asField elems_18_41_39 T_javafe_ast_TypeDeclElemVec)) (< (fClosedTime elems_18_41_39) alloc) (forall ((?s_42_ Int)) (=> (not (= ?s_42_ null)) (not (= (S_select elems_18_41_39 ?s_42_) null)))) (= lengthFieldDecl_pre_38_917_40 lengthFieldDecl_38_917_40) (= true_term (is lengthFieldDecl_38_917_40 T_javafe_ast_FieldDecl)) (= true_term (isAllocated lengthFieldDecl_38_917_40 alloc)) (not (= lengthFieldDecl_38_917_40 null)) (= THISEXPR_pre_30_47_7 THISEXPR_30_47_7) (= true_term (is THISEXPR_30_47_7 T_int)) (= parent_pre_32_21_18 parent_32_21_18) (= parent_32_21_18 (asField parent_32_21_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_32_21_18) alloc) (= count_pre_47_67_33 count_47_67_33) (= count_47_67_33 (asField count_47_67_33 T_int)) (= locFinally_pre_82_25_13 locFinally_82_25_13) (= locFinally_82_25_13 (asField locFinally_82_25_13 T_int)) (= count_pre_15_67_33 count_15_67_33) (= count_15_67_33 (asField count_15_67_33 T_int)) (= loc_pre_60_18_13 loc_60_18_13) (= loc_60_18_13 (asField loc_60_18_13 T_int)) (= type_pre_103_20_28 type_103_20_28) (= type_103_20_28 (asField type_103_20_28 T_javafe_ast_Type)) (< (fClosedTime type_103_20_28) alloc) (forall ((?s_43_ Int)) (=> (not (= ?s_43_ null)) (not (= (S_select type_103_20_28 ?s_43_) null)))) (= id_pre_91_21_34 id_91_21_34) (= id_91_21_34 (asField id_91_21_34 T_javafe_ast_Identifier)) (< (fClosedTime id_91_21_34) alloc) (forall ((?s_44_ Int)) (=> (not (= ?s_44_ null)) (not (= (S_select id_91_21_34 ?s_44_) null)))) (= BOOLEANLIT_pre_28_38_26 BOOLEANLIT_28_38_26) (= true_term (is BOOLEANLIT_28_38_26 T_int)) (= loc_pre_72_18_13 loc_72_18_13) (= loc_72_18_13 (asField loc_72_18_13 T_int)) (= CONSTRUCTORDECL_pre_30_19_7 CONSTRUCTORDECL_30_19_7) (= true_term (is CONSTRUCTORDECL_30_19_7 T_int)) (= ASSIGN_pre_29_40_26 ASSIGN_29_40_26) (= true_term (is ASSIGN_29_40_26 T_int)) (= TYPEMODIFIERPRAGMA_pre_27_28_26 TYPEMODIFIERPRAGMA_27_28_26) (= true_term (is TYPEMODIFIERPRAGMA_27_28_26 T_int)) (= ARRAYINIT_pre_30_46_7 ARRAYINIT_30_46_7) (= true_term (is ARRAYINIT_30_46_7 T_int)) (= els_pre_100_19_28 els_100_19_28) (= els_100_19_28 (asField els_100_19_28 T_javafe_ast_Expr)) (< (fClosedTime els_100_19_28) alloc) (forall ((?s_45_ Int)) (=> (not (= ?s_45_ null)) (not (= (S_select els_100_19_28 ?s_45_) null)))) (= member_pre_5_44_39 member_5_44_39) (= member_5_44_39 (asField member_5_44_39 T_boolean)) (= args_pre_95_34_31 args_95_34_31) (= args_95_34_31 (asField args_95_34_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_95_34_31) alloc) (forall ((?s_46_ Int)) (=> (not (= ?s_46_ null)) (not (= (S_select args_95_34_31 ?s_46_) null)))) (= classPrefix_pre_92_25_14 classPrefix_92_25_14) (= classPrefix_92_25_14 (asField classPrefix_92_25_14 T_javafe_ast_Type)) (< (fClosedTime classPrefix_92_25_14) alloc) (= loc_pre_75_20_13 loc_75_20_13) (= loc_75_20_13 (asField loc_75_20_13 T_int)) (= SHORTTYPE_pre_28_36_26 SHORTTYPE_28_36_26) (= true_term (is SHORTTYPE_28_36_26 T_int)) (= locOpenParen_pre_111_28_13 locOpenParen_111_28_13) (= locOpenParen_111_28_13 (asField locOpenParen_111_28_13 T_int)) (= INTERFACEDECL_pre_30_18_7 INTERFACEDECL_30_18_7) (= true_term (is INTERFACEDECL_30_18_7 T_int)) (= inst_pre_93_29_44 inst_93_29_44) (= true_term (is inst_93_29_44 T_javafe_ast_PrettyPrint)) (= true_term (isAllocated inst_93_29_44 alloc)) (not (= inst_93_29_44 null)) (= init_pre_22_20_17 init_22_20_17) (= init_22_20_17 (asField init_22_20_17 T_javafe_ast_VarInit)) (< (fClosedTime init_22_20_17) alloc) (= TYPESIG_pre_26_6_28 TYPESIG_26_6_28) (= true_term (is TYPESIG_26_6_28 T_int)) (= STAR_pre_29_37_26 STAR_29_37_26) (= true_term (is STAR_29_37_26 T_int)) (= locCloseParen_pre_106_21_13 locCloseParen_106_21_13) (= locCloseParen_106_21_13 (asField locCloseParen_106_21_13 T_int)) (= allowedExceptions_pre_74_25 allowedExceptions_74_25) (= allowedExceptions_74_25 (asField allowedExceptions_74_25 T_javafe_tc_TypeSigVec)) (< (fClosedTime allowedExceptions_74_25) alloc) (= CATCHCLAUSE_pre_30_45_7 CATCHCLAUSE_30_45_7) (= true_term (is CATCHCLAUSE_30_45_7 T_int)) (= elements_pre_166_61_39 elements_166_61_39) (= elements_166_61_39 (asField elements_166_61_39 (array T_javafe_ast_Identifier))) (< (fClosedTime elements_166_61_39) alloc) (forall ((?s_47_ Int)) (=> (not (= ?s_47_ null)) (not (= (S_select elements_166_61_39 ?s_47_) null)))) (= elements_pre_90_61_36 elements_90_61_36) (= elements_90_61_36 (asField elements_90_61_36 (array T_javafe_ast_VarInit))) (< (fClosedTime elements_90_61_36) alloc) (forall ((?s_48_ Int)) (=> (not (= ?s_48_ null)) (not (= (S_select elements_90_61_36 ?s_48_) null)))) (= methods_pre_5_883_26 methods_5_883_26) (= methods_5_883_26 (asField methods_5_883_26 T_javafe_tc_MethodDeclVec)) (< (fClosedTime methods_5_883_26) alloc) (= NOTACCESSIBLE_pre_86_13_26 NOTACCESSIBLE_86_13_26) (= true_term (is NOTACCESSIBLE_86_13_26 T_int)) (= TYPEDECLELEMPRAGMA_pre_27_27_26 TYPEDECLELEMPRAGMA_27_27_26) (= true_term (is TYPEDECLELEMPRAGMA_27_27_26 T_int)) (= od_pre_91_19_40 od_91_19_40) (= od_91_19_40 (asField od_91_19_40 T_javafe_ast_ObjectDesignator)) (< (fClosedTime od_91_19_40) alloc) (forall ((?s_49_ Int)) (=> (not (= ?s_49_ null)) (not (= (S_select od_91_19_40 ?s_49_) null)))) (= doubleType_pre_38_115_4 doubleType_38_115_4) (= true_term (is doubleType_38_115_4 T_javafe_ast_PrimitiveType)) (= true_term (isAllocated doubleType_38_115_4 alloc)) (= parent_pre_22_18_18 parent_22_18_18) (= parent_22_18_18 (asField parent_22_18_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_22_18_18) alloc) (= locOpenBrace_pre_40_22_13 locOpenBrace_40_22_13) (= locOpenBrace_40_22_13 (asField locOpenBrace_40_22_13 T_int)) (= BYTETYPE_pre_28_35_26 BYTETYPE_28_35_26) (= true_term (is BYTETYPE_28_35_26 T_int)) (= CLASSDECL_pre_30_17_7 CLASSDECL_30_17_7) (= true_term (is CLASSDECL_30_17_7 T_int)) (= expr_pre_102_15_28 expr_102_15_28) (= expr_102_15_28 (asField expr_102_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_102_15_28) alloc) (forall ((?s_50_ Int)) (=> (not (= ?s_50_ null)) (not (= (S_select expr_102_15_28 ?s_50_) null)))) (= MOD_pre_29_36_26 MOD_29_36_26) (= true_term (is MOD_29_36_26 T_int)) (= constructorSeq_pre_48_171_38 constructorSeq_48_171_38) (= constructorSeq_48_171_38 (asField constructorSeq_48_171_38 T_javafe_util_StackVector)) (< (fClosedTime constructorSeq_48_171_38) alloc) (forall ((?s_51_ Int)) (=> (not (= ?s_51_ null)) (not (= (S_select constructorSeq_48_171_38 ?s_51_) null)))) (= BADTYPECOMBO_pre_86_12_26 BADTYPECOMBO_86_12_26) (= true_term (is BADTYPECOMBO_86_12_26 T_int)) (= thn_pre_100_17_28 thn_100_17_28) (= thn_100_17_28 (asField thn_100_17_28 T_javafe_ast_Expr)) (< (fClosedTime thn_100_17_28) alloc) (forall ((?s_52_ Int)) (=> (not (= ?s_52_ null)) (not (= (S_select thn_100_17_28 ?s_52_) null)))) (= CONSTRUCTORINVOCATION_pre_30_44_7 CONSTRUCTORINVOCATION_30_44_7) (= true_term (is CONSTRUCTORINVOCATION_30_44_7 T_int)) (= superInterfaces_pre_18_34_35 superInterfaces_18_34_35) (= superInterfaces_18_34_35 (asField superInterfaces_18_34_35 T_javafe_ast_TypeNameVec)) (< (fClosedTime superInterfaces_18_34_35) alloc) (forall ((?s_53_ Int)) (=> (not (= ?s_53_ null)) (not (= (S_select superInterfaces_18_34_35 ?s_53_) null)))) (= elements_pre_122_61_38 elements_122_61_38) (= elements_122_61_38 (asField elements_122_61_38 (array T_javafe_ast_FieldDecl))) (< (fClosedTime elements_122_61_38) alloc) (forall ((?s_54_ Int)) (=> (not (= ?s_54_ null)) (not (= (S_select elements_122_61_38 ?s_54_) null)))) (= catchClauses_pre_83_20_38 catchClauses_83_20_38) (= catchClauses_83_20_38 (asField catchClauses_83_20_38 T_javafe_ast_CatchClauseVec)) (< (fClosedTime catchClauses_83_20_38) alloc) (forall ((?s_55_ Int)) (=> (not (= ?s_55_ null)) (not (= (S_select catchClauses_83_20_38 ?s_55_) null)))) (= locIds_pre_167_25_29 locIds_167_25_29) (= locIds_167_25_29 (asField locIds_167_25_29 ?v_0)) (< (fClosedTime locIds_167_25_29) alloc) (forall ((?s_56_ Int)) (=> (not (= ?s_56_ null)) (not (= (S_select locIds_167_25_29 ?s_56_) null)))) (= count_pre_45_67_33 count_45_67_33) (= count_45_67_33 (asField count_45_67_33 T_int)) (= type_pre_95_32_32 type_95_32_32) (= type_95_32_32 (asField type_95_32_32 T_javafe_ast_TypeName)) (< (fClosedTime type_95_32_32) alloc) (forall ((?s_57_ Int)) (=> (not (= ?s_57_ null)) (not (= (S_select type_95_32_32 ?s_57_) null)))) (= locOp_pre_104_43_13 locOp_104_43_13) (= locOp_104_43_13 (asField locOp_104_43_13 T_int)) (= expr_pre_60_15_28 expr_60_15_28) (= expr_60_15_28 (asField expr_60_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_60_15_28) alloc) (forall ((?s_58_ Int)) (=> (not (= ?s_58_ null)) (not (= (S_select expr_60_15_28 ?s_58_) null)))) (= loc_pre_82_22_13 loc_82_22_13) (= loc_82_22_13 (asField loc_82_22_13 T_int)) (= loc_pre_99_49_13 loc_99_49_13) (= loc_99_49_13 (asField loc_99_49_13 T_int)) (= expr_pre_113_22_28 expr_113_22_28) (= expr_113_22_28 (asField expr_113_22_28 T_javafe_ast_Expr)) (< (fClosedTime expr_113_22_28) alloc) (forall ((?s_59_ Int)) (=> (not (= ?s_59_ null)) (not (= (S_select expr_113_22_28 ?s_59_) null)))) (= NULLTYPE_pre_28_34_26 NULLTYPE_28_34_26) (= true_term (is NULLTYPE_28_34_26 T_int)) (= expr_pre_101_15_28 expr_101_15_28) (= expr_101_15_28 (asField expr_101_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_101_15_28) alloc) (forall ((?s_60_ Int)) (=> (not (= ?s_60_ null)) (not (= (S_select expr_101_15_28 ?s_60_) null)))) (= label_pre_72_15_20 label_72_15_20) (= label_72_15_20 (asField label_72_15_20 T_javafe_ast_Identifier)) (< (fClosedTime label_72_15_20) alloc) (= STMTPRAGMA_pre_27_26_26 STMTPRAGMA_27_26_26) (= true_term (is STMTPRAGMA_27_26_26 T_int)) (= ONDEMANDIMPORTDECL_pre_30_16_7 ONDEMANDIMPORTDECL_30_16_7) (= true_term (is ONDEMANDIMPORTDECL_30_16_7 T_int)) (= locOp_pre_105_32_13 locOp_105_32_13) (= locOp_105_32_13 (asField locOp_105_32_13 T_int)) (= DIV_pre_29_35_26 DIV_29_35_26) (= true_term (is DIV_29_35_26 T_int)) (= TRYCATCHSTMT_pre_30_43_7 TRYCATCHSTMT_30_43_7) (= true_term (is TRYCATCHSTMT_30_43_7 T_int)) (= currentStackBottom_pre_153_87_33 currentStackBottom_153_87_33) (= currentStackBottom_153_87_33 (asField currentStackBottom_153_87_33 T_int)) (= superCall_pre_42_24_17 superCall_42_24_17) (= superCall_42_24_17 (asField superCall_42_24_17 T_boolean)) (= stmt_pre_75_17_28 stmt_75_17_28) (= stmt_75_17_28 (asField stmt_75_17_28 T_javafe_ast_Stmt)) (< (fClosedTime stmt_75_17_28) alloc) (forall ((?s_61_ Int)) (=> (not (= ?s_61_ null)) (not (= (S_select stmt_75_17_28 ?s_61_) null)))) (= simpleName_pre_5_37_38 simpleName_5_37_38) (= simpleName_5_37_38 (asField simpleName_5_37_38 T_java_lang_String)) (< (fClosedTime simpleName_5_37_38) alloc) (= VOIDTYPE_pre_28_33_26 VOIDTYPE_28_33_26) (= true_term (is VOIDTYPE_28_33_26 T_int)) (= SINGLETYPEIMPORTDECL_pre_30_15_7 SINGLETYPEIMPORTDECL_30_15_7) (= true_term (is SINGLETYPEIMPORTDECL_30_15_7 T_int)) (= locId_pre_111_25_13 locId_111_25_13) (= locId_111_25_13 (asField locId_111_25_13 T_int)) (= locSuper_pre_114_20_13 locSuper_114_20_13) (= locSuper_114_20_13 (asField locSuper_114_20_13 T_int)) (= SUB_pre_29_34_26 SUB_29_34_26) (= true_term (is SUB_29_34_26 T_int)) (= AMBIGUOUS_pre_86_11_26 AMBIGUOUS_86_11_26) (= true_term (is AMBIGUOUS_86_11_26 T_int)) (= MODIFIERPRAGMA_pre_27_25_26 MODIFIERPRAGMA_27_25_26) (= true_term (is MODIFIERPRAGMA_27_25_26 T_int)) (= test_pre_100_15_28 test_100_15_28) (= test_100_15_28 (asField test_100_15_28 T_javafe_ast_Expr)) (< (fClosedTime test_100_15_28) alloc) (forall ((?s_62_ Int)) (=> (not (= ?s_62_ null)) (not (= (S_select test_100_15_28 ?s_62_) null)))) (= locCloseBrace_pre_88_24_13 locCloseBrace_88_24_13) (= locCloseBrace_88_24_13 (asField locCloseBrace_88_24_13 T_int)) (= TRYFINALLYSTMT_pre_30_42_7 TRYFINALLYSTMT_30_42_7) (= true_term (is TRYFINALLYSTMT_30_42_7 T_int)) (= locDot_pre_95_29_13 locDot_95_29_13) (= locDot_95_29_13 (asField locDot_95_29_13 T_int)) (= decl_pre_50_38_43 decl_50_38_43) (= decl_50_38_43 (asField decl_50_38_43 T_javafe_ast_GenericVarDecl)) (< (fClosedTime decl_50_38_43) alloc) (forall ((?s_63_ Int)) (=> (not (= ?s_63_ null)) (not (= (S_select decl_50_38_43 ?s_63_) null)))) (= id_pre_18_32_34 id_18_32_34) (= id_18_32_34 (asField id_18_32_34 T_javafe_ast_Identifier)) (< (fClosedTime id_18_32_34) alloc) (forall ((?s_64_ Int)) (=> (not (= ?s_64_ null)) (not (= (S_select id_18_32_34 ?s_64_) null)))) (= tryClause_pre_83_18_28 tryClause_83_18_28) (= tryClause_83_18_28 (asField tryClause_83_18_28 T_javafe_ast_Stmt)) (< (fClosedTime tryClause_83_18_28) alloc) (forall ((?s_65_ Int)) (=> (not (= ?s_65_ null)) (not (= (S_select tryClause_83_18_28 ?s_65_) null)))) (= stmts_pre_40_19_31 stmts_40_19_31) (= stmts_40_19_31 (asField stmts_40_19_31 T_javafe_ast_StmtVec)) (< (fClosedTime stmts_40_19_31) alloc) (forall ((?s_66_ Int)) (=> (not (= ?s_66_ null)) (not (= (S_select stmts_40_19_31 ?s_66_) null)))) (= loc_pre_79_22_13 loc_79_22_13) (= loc_79_22_13 (asField loc_79_22_13 T_int)) (= DOUBLETYPE_pre_28_32_26 DOUBLETYPE_28_32_26) (= true_term (is DOUBLETYPE_28_32_26 T_int)) (= NOTFOUND_pre_86_10_26 NOTFOUND_86_10_26) (= true_term (is NOTFOUND_86_10_26 T_int)) (= COMPILATIONUNIT_pre_30_14_7 COMPILATIONUNIT_30_14_7) (= true_term (is COMPILATIONUNIT_30_14_7 T_int)) (= loc_pre_77_18_13 loc_77_18_13) (= loc_77_18_13 (asField loc_77_18_13 T_int)) (= ADD_pre_29_33_26 ADD_29_33_26) (= true_term (is ADD_29_33_26 T_int)) (= intType_pre_38_111_4 intType_38_111_4) (= true_term (is intType_38_111_4 T_javafe_ast_PrimitiveType)) (= true_term (isAllocated intType_38_111_4 alloc)) (= FIRST_KEYWORD_pre_27_51_26 FIRST_KEYWORD_27_51_26) (= true_term (is FIRST_KEYWORD_27_51_26 T_int)) (= locType_pre_33_21_13 locType_33_21_13) (= locType_33_21_13 (asField locType_33_21_13 T_int)) (= SWITCHLABEL_pre_30_41_7 SWITCHLABEL_30_41_7) (= true_term (is SWITCHLABEL_30_41_7 T_int)) (= LEXICALPRAGMA_pre_27_24_26 LEXICALPRAGMA_27_24_26) (= true_term (is LEXICALPRAGMA_27_24_26 T_int)) (= enclosingType_pre_5_32_39 enclosingType_5_32_39) (= enclosingType_5_32_39 (asField enclosingType_5_32_39 T_javafe_tc_TypeSig)) (< (fClosedTime enclosingType_5_32_39) alloc) (= reason_pre_86_8_13 reason_86_8_13) (= reason_86_8_13 (asField reason_86_8_13 T_int)) (= right_pre_104_40_28 right_104_40_28) (= right_104_40_28 (asField right_104_40_28 T_javafe_ast_Expr)) (< (fClosedTime right_104_40_28) alloc) (forall ((?s_67_ Int)) (=> (not (= ?s_67_ null)) (not (= (S_select right_104_40_28 ?s_67_) null)))) (= expr_pre_75_15_28 expr_75_15_28) (= expr_75_15_28 (asField expr_75_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_75_15_28) alloc) (forall ((?s_68_ Int)) (=> (not (= ?s_68_ null)) (not (= (S_select expr_75_15_28 ?s_68_) null)))) (= locOpenParen_pre_106_18_13 locOpenParen_106_18_13) (= locOpenParen_106_18_13 (asField locOpenParen_106_18_13 T_int)) (= finallyClause_pre_82_19_28 finallyClause_82_19_28) (= finallyClause_82_19_28 (asField finallyClause_82_19_28 T_javafe_ast_Stmt)) (< (fClosedTime finallyClause_82_19_28) alloc) (forall ((?s_69_ Int)) (=> (not (= ?s_69_ null)) (not (= (S_select finallyClause_82_19_28 ?s_69_) null)))) (= dims_pre_99_45_31 dims_99_45_31) (= dims_99_45_31 (asField dims_99_45_31 T_javafe_ast_ExprVec)) (< (fClosedTime dims_99_45_31) alloc) (forall ((?s_70_ Int)) (=> (not (= ?s_70_ null)) (not (= (S_select dims_99_45_31 ?s_70_) null)))) (= FLOATTYPE_pre_28_31_26 FLOATTYPE_28_31_26) (= true_term (is FLOATTYPE_28_31_26 T_int)) (= expr_pre_105_29_28 expr_105_29_28) (= expr_105_29_28 (asField expr_105_29_28 T_javafe_ast_Expr)) (< (fClosedTime expr_105_29_28) alloc) (forall ((?s_71_ Int)) (=> (not (= ?s_71_ null)) (not (= (S_select expr_105_29_28 ?s_71_) null)))) (= returnType_pre_68_19 returnType_68_19) (= returnType_68_19 (asField returnType_68_19 T_javafe_ast_Type)) (< (fClosedTime returnType_68_19) alloc) (= URSHIFT_pre_29_32_26 URSHIFT_29_32_26) (= true_term (is URSHIFT_29_32_26 T_int)) (= locOpenParen_pre_110_30_13 locOpenParen_110_30_13) (= locOpenParen_110_30_13 (asField locOpenParen_110_30_13 T_int)) (= SKIPSTMT_pre_30_40_7 SKIPSTMT_30_40_7) (= true_term (is SKIPSTMT_30_40_7 T_int)) (= decl_pre_56_15_33 decl_56_15_33) (= decl_56_15_33 (asField decl_56_15_33 T_javafe_ast_ClassDecl)) (< (fClosedTime decl_56_15_33) alloc) (forall ((?s_72_ Int)) (=> (not (= ?s_72_ null)) (not (= (S_select decl_56_15_33 ?s_72_) null)))) (= pmodifiers_pre_18_30_27 pmodifiers_18_30_27) (= pmodifiers_18_30_27 (asField pmodifiers_18_30_27 T_javafe_ast_ModifierPragmaVec)) (< (fClosedTime pmodifiers_18_30_27) alloc) (= COMPOUNDNAME_pre_30_67_7 COMPOUNDNAME_30_67_7) (= true_term (is COMPOUNDNAME_30_67_7 T_int)) (= fields_pre_5_875_27 fields_5_875_27) (= fields_5_875_27 (asField fields_5_875_27 T_javafe_tc_FieldDeclVec)) (< (fClosedTime fields_5_875_27) alloc) (= CHARTYPE_pre_28_30_26 CHARTYPE_28_30_26) (= true_term (is CHARTYPE_28_30_26 T_int)) (= count_pre_24_67_33 count_24_67_33) (= count_24_67_33 (asField count_24_67_33 T_int)) (= init_pre_55_19_17 init_55_19_17) (= init_55_19_17 (asField init_55_19_17 T_javafe_ast_VarInit)) (< (fClosedTime init_55_19_17) alloc) (= RSHIFT_pre_29_31_26 RSHIFT_29_31_26) (= true_term (is RSHIFT_29_31_26 T_int)) (= modifiers_pre_18_28_13 modifiers_18_28_13) (= modifiers_18_28_13 (asField modifiers_18_28_13 T_int)) (= CU_pre_5_71_30 CU_5_71_30) (= CU_5_71_30 (asField CU_5_71_30 T_javafe_ast_CompilationUnit)) (< (fClosedTime CU_5_71_30) alloc) (= FORSTMT_pre_30_39_7 FORSTMT_30_39_7) (= true_term (is FORSTMT_30_39_7 T_int)) (= locOpenBrace_pre_88_21_13 locOpenBrace_88_21_13) (= locOpenBrace_88_21_13 (asField locOpenBrace_88_21_13 T_int)) (= tag_pre_124_32_13 tag_124_32_13) (= tag_124_32_13 (asField tag_124_32_13 T_int)) (= left_pre_104_38_28 left_104_38_28) (= left_104_38_28 (asField left_104_38_28 T_javafe_ast_Expr)) (< (fClosedTime left_104_38_28) alloc) (forall ((?s_73_ Int)) (=> (not (= ?s_73_ null)) (not (= (S_select left_104_38_28 ?s_73_) null)))) (= elements_pre_118_61_47 elements_118_61_47) (= elements_118_61_47 (asField elements_118_61_47 (array T_javafe_ast_TypeModifierPragma))) (< (fClosedTime elements_118_61_47) alloc) (forall ((?s_74_ Int)) (=> (not (= ?s_74_ null)) (not (= (S_select elements_118_61_47 ?s_74_) null)))) (= leftToRight_pre_65_22 leftToRight_65_22) (= leftToRight_65_22 (asField leftToRight_65_22 T_boolean)) (= specOnly_pre_18_26_17 specOnly_18_26_17) (= specOnly_18_26_17 (asField specOnly_18_26_17 T_boolean)) (= id_pre_111_20_34 id_111_20_34) (= id_111_20_34 (asField id_111_20_34 T_javafe_ast_Identifier)) (< (fClosedTime id_111_20_34) alloc) (forall ((?s_75_ Int)) (=> (not (= ?s_75_ null)) (not (= (S_select id_111_20_34 ?s_75_) null)))) (= SIMPLENAME_pre_30_66_7 SIMPLENAME_30_66_7) (= true_term (is SIMPLENAME_30_66_7 T_int)) (= lenId_pre_38_914_30 lenId_38_914_30) (= true_term (is lenId_38_914_30 T_javafe_ast_Identifier)) (= true_term (isAllocated lenId_38_914_30 alloc)) (= tryClause_pre_82_17_28 tryClause_82_17_28) (= tryClause_82_17_28 (asField tryClause_82_17_28 T_javafe_ast_Stmt)) (< (fClosedTime tryClause_82_17_28) alloc) (forall ((?s_76_ Int)) (=> (not (= ?s_76_ null)) (not (= (S_select tryClause_82_17_28 ?s_76_) null)))) (= LONGTYPE_pre_28_29_26 LONGTYPE_28_29_26) (= true_term (is LONGTYPE_28_29_26 T_int)) (= els_pre_79_19_28 els_79_19_28) (= els_79_19_28 (asField els_79_19_28 T_javafe_ast_Stmt)) (< (fClosedTime els_79_19_28) alloc) (forall ((?s_77_ Int)) (=> (not (= ?s_77_ null)) (not (= (S_select els_79_19_28 ?s_77_) null)))) (= hasParent_pre_19_149_30 hasParent_19_149_30) (= hasParent_19_149_30 (asField hasParent_19_149_30 T_boolean)) (= op_pre_105_26_13 op_105_26_13) (= op_105_26_13 (asField op_105_26_13 T_int)) (= count_pre_123_67_33 count_123_67_33) (= count_123_67_33 (asField count_123_67_33 T_int)) (= expr_pre_77_15_14 expr_77_15_14) (= expr_77_15_14 (asField expr_77_15_14 T_javafe_ast_Expr)) (< (fClosedTime expr_77_15_14) alloc) (= shortType_pre_38_139_4 shortType_38_139_4) ?v_20 (= true_term (isAllocated shortType_38_139_4 alloc)) (= LSHIFT_pre_29_30_26 LSHIFT_29_30_26) (= true_term (is LSHIFT_29_30_26 T_int)) (= enclosingInstance_pre_95_25_14 enclosingInstance_95_25_14) (= enclosingInstance_95_25_14 (asField enclosingInstance_95_25_14 T_javafe_ast_Expr)) (< (fClosedTime enclosingInstance_95_25_14) alloc) (= IFSTMT_pre_30_38_7 IFSTMT_30_38_7) (= true_term (is IFSTMT_30_38_7 T_int)) (= POSTFIXDEC_pre_29_63_26 POSTFIXDEC_29_63_26) (= true_term (is POSTFIXDEC_29_63_26 T_int)) (= loc_pre_160_18_13 loc_160_18_13) (= loc_160_18_13 (asField loc_160_18_13 T_int)) (= booleanType_pre_38_107_4 booleanType_38_107_4) (= true_term (is booleanType_38_107_4 T_javafe_ast_PrimitiveType)) (= true_term (isAllocated booleanType_38_107_4 alloc)) (= ARRAYTYPE_pre_30_65_7 ARRAYTYPE_30_65_7) (= true_term (is ARRAYTYPE_30_65_7 T_int)) (= expr_pre_106_15_28 expr_106_15_28) (= expr_106_15_28 (asField expr_106_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_106_15_28) alloc) (forall ((?s_78_ Int)) (=> (not (= ?s_78_ null)) (not (= (S_select expr_106_15_28 ?s_78_) null)))) (= loc_pre_124_50_13 loc_124_50_13) (= loc_124_50_13 (asField loc_124_50_13 T_int)) (= INTTYPE_pre_28_28_26 INTTYPE_28_28_26) (= true_term (is INTTYPE_28_28_26 T_int)) (= LT_pre_29_29_26 LT_29_29_26) (= true_term (is LT_29_29_26 T_int)) (= block_pre_51_28_33 block_51_28_33) (= block_51_28_33 (asField block_51_28_33 T_javafe_ast_BlockStmt)) (< (fClosedTime block_51_28_33) alloc) (forall ((?s_79_ Int)) (=> (not (= ?s_79_ null)) (not (= (S_select block_51_28_33 ?s_79_) null)))) (= LABELSTMT_pre_30_37_7 LABELSTMT_30_37_7) (= true_term (is LABELSTMT_30_37_7 T_int)) (= count_pre_43_67_33 count_43_67_33) (= count_43_67_33 (asField count_43_67_33 T_int)) (= POSTFIXINC_pre_29_62_26 POSTFIXINC_29_62_26) (= true_term (is POSTFIXINC_29_62_26 T_int)) (= op_pre_104_35_13 op_104_35_13) (= op_104_35_13 (asField op_104_35_13 T_int)) (= locId_pre_32_43_13 locId_32_43_13) (= locId_32_43_13 (asField locId_32_43_13 T_int)) (= noTokens_pre_27_212_27 noTokens_27_212_27) (= true_term (is noTokens_27_212_27 T_int)) (= od_pre_111_18_40 od_111_18_40) (= od_111_18_40 (asField od_111_18_40 T_javafe_ast_ObjectDesignator)) (< (fClosedTime od_111_18_40) alloc) (forall ((?s_80_ Int)) (=> (not (= ?s_80_ null)) (not (= (S_select od_111_18_40 ?s_80_) null)))) (= TYPENAME_pre_30_64_7 TYPENAME_30_64_7) (= true_term (is TYPENAME_30_64_7 T_int)) (= thn_pre_79_17_28 thn_79_17_28) (= thn_79_17_28 (asField thn_79_17_28 T_javafe_ast_Stmt)) (< (fClosedTime thn_79_17_28) alloc) (forall ((?s_81_ Int)) (=> (not (= ?s_81_ null)) (not (= (S_select thn_79_17_28 ?s_81_) null)))) (= BOOLEANTYPE_pre_28_27_26 BOOLEANTYPE_28_27_26) (= true_term (is BOOLEANTYPE_28_27_26 T_int)) (= owner_pre_4_35_28 owner_4_35_28) (= owner_4_35_28 (asField owner_4_35_28 T_java_lang_Object)) (< (fClosedTime owner_4_35_28) alloc) (= methodSeq_pre_48_167_38 methodSeq_48_167_38) (= methodSeq_48_167_38 (asField methodSeq_48_167_38 T_javafe_util_StackVector)) (< (fClosedTime methodSeq_48_167_38) alloc) (forall ((?s_82_ Int)) (=> (not (= ?s_82_ null)) (not (= (S_select methodSeq_48_167_38 ?s_82_) null)))) (= returnType_pre_33_18_28 returnType_33_18_28) (= returnType_33_18_28 (asField returnType_33_18_28 T_javafe_ast_Type)) (< (fClosedTime returnType_33_18_28) alloc) (forall ((?s_83_ Int)) (=> (not (= ?s_83_ null)) (not (= (S_select returnType_33_18_28 ?s_83_) null)))) (= loc_pre_121_30_13 loc_121_30_13) (= loc_121_30_13 (asField loc_121_30_13 T_int)) (= LE_pre_29_28_26 LE_29_28_26) (= true_term (is LE_29_28_26 T_int)) (= CONTINUESTMT_pre_30_36_7 CONTINUESTMT_30_36_7) (= true_term (is CONTINUESTMT_30_36_7 T_int)) (= loc_pre_78_18_13 loc_78_18_13) (= loc_78_18_13 (asField loc_78_18_13 T_int)) (= punctuationCodes_pre_27_164_19 punctuationCodes_27_164_19) (= true_term (is punctuationCodes_27_164_19 ?v_0)) (= true_term (isAllocated punctuationCodes_27_164_19 alloc)) (= elems_pre_88_18_34 elems_88_18_34) (= elems_88_18_34 (asField elems_88_18_34 T_javafe_ast_VarInitVec)) (< (fClosedTime elems_88_18_34) alloc) (forall ((?s_84_ Int)) (=> (not (= ?s_84_ null)) (not (= (S_select elems_88_18_34 ?s_84_) null)))) (= DEC_pre_29_59_26 DEC_29_59_26) (= true_term (is DEC_29_59_26 T_int)) (= rootSEnv_pre_54_45 rootSEnv_54_45) (= rootSEnv_54_45 (asField rootSEnv_54_45 T_javafe_tc_EnvForTypeSig)) (< (fClosedTime rootSEnv_54_45) alloc) (= count_pre_16_67_33 count_16_67_33) (= count_16_67_33 (asField count_16_67_33 T_int)) (= locFirstSemi_pre_74_36_13 locFirstSemi_74_36_13) (= locFirstSemi_74_36_13 (asField locFirstSemi_74_36_13 T_int)) (= SUPEROBJECTDESIGNATOR_pre_30_63_7 SUPEROBJECTDESIGNATOR_30_63_7) (= true_term (is SUPEROBJECTDESIGNATOR_30_63_7 T_int)) (= IDENT_pre_28_25_26 IDENT_28_25_26) (= true_term (is IDENT_28_25_26 T_int)) (= parent_pre_18_59_18 parent_18_59_18) (= parent_18_59_18 (asField parent_18_59_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_18_59_18) alloc) (= elements_pre_47_61_43 elements_47_61_43) (= elements_47_61_43 (asField elements_47_61_43 (array T_javafe_ast_FormalParaDecl))) (< (fClosedTime elements_47_61_43) alloc) (forall ((?s_85_ Int)) (=> (not (= ?s_85_ null)) (not (= (S_select elements_47_61_43 ?s_85_) null)))) (= branchDecoration_pre_1898_31 branchDecoration_1898_31) (= true_term (is branchDecoration_1898_31 T_javafe_ast_ASTDecoration)) (= true_term (isAllocated branchDecoration_1898_31 alloc)) (= decl_pre_42_54_25 decl_42_54_25) (= decl_42_54_25 (asField decl_42_54_25 T_javafe_ast_ConstructorDecl)) (< (fClosedTime decl_42_54_25) alloc) (= locId_pre_73_20_13 locId_73_20_13) (= locId_73_20_13 (asField locId_73_20_13 T_int)) (= name_pre_46_18_28 name_46_18_28) (= name_46_18_28 (asField name_46_18_28 T_javafe_ast_Name)) (< (fClosedTime name_46_18_28) alloc) (forall ((?s_86_ Int)) (=> (not (= ?s_86_ null)) (not (= (S_select name_46_18_28 ?s_86_) null)))) (= count_pre_21_67_33 count_21_67_33) (= count_21_67_33 (asField count_21_67_33 T_int)) (= GT_pre_29_27_26 GT_29_27_26) (= true_term (is GT_29_27_26 T_int)) (= decl_pre_54_15_36 decl_54_15_36) (= decl_54_15_36 (asField decl_54_15_36 T_javafe_ast_LocalVarDecl)) (< (fClosedTime decl_54_15_36) alloc) (forall ((?s_87_ Int)) (=> (not (= ?s_87_ null)) (not (= (S_select decl_54_15_36 ?s_87_) null)))) (= elementType_pre_155_22_27 elementType_155_22_27) (= elementType_155_22_27 (asField elementType_155_22_27 T__TYPE)) (= elements_pre_15_61_36 elements_15_61_36) (= elements_15_61_36 (asField elements_15_61_36 (array T_javafe_tc_TypeSig))) (< (fClosedTime elements_15_61_36) alloc) (forall ((?s_88_ Int)) (=> (not (= ?s_88_ null)) (not (= (S_select elements_15_61_36 ?s_88_) null)))) (= BREAKSTMT_pre_30_35_7 BREAKSTMT_30_35_7) (= true_term (is BREAKSTMT_30_35_7 T_int)) (= INC_pre_29_58_26 INC_29_58_26) (= true_term (is INC_29_58_26 T_int)) (= init_pre_99_35_19 init_99_35_19) (= init_99_35_19 (asField init_99_35_19 T_javafe_ast_ArrayInit)) (< (fClosedTime init_99_35_19) alloc) (= byteType_pre_38_135_4 byteType_38_135_4) ?v_15 (= true_term (isAllocated byteType_38_135_4 alloc)) (= args_pre_42_51_31 args_42_51_31) (= args_42_51_31 (asField args_42_51_31 T_javafe_ast_ExprVec)) (< (fClosedTime args_42_51_31) alloc) (forall ((?s_89_ Int)) (=> (not (= ?s_89_ null)) (not (= (S_select args_42_51_31 ?s_89_) null)))) (= TYPEOBJECTDESIGNATOR_pre_30_62_7 TYPEOBJECTDESIGNATOR_30_62_7) (= true_term (is TYPEOBJECTDESIGNATOR_30_62_7 T_int)) (= sigDecoration_pre_5_104_38 sigDecoration_5_104_38) (= true_term (is sigDecoration_5_104_38 T_javafe_ast_ASTDecoration)) (= true_term (isAllocated sigDecoration_5_104_38 alloc)) (= expr_pre_79_15_28 expr_79_15_28) (= expr_79_15_28 (asField expr_79_15_28 T_javafe_ast_Expr)) (< (fClosedTime expr_79_15_28) alloc) (forall ((?s_90_ Int)) (=> (not (= ?s_90_ null)) (not (= (S_select expr_79_15_28 ?s_90_) null)))) (= value_pre_124_45_16 value_124_45_16) (= value_124_45_16 (asField value_124_45_16 T_java_lang_Object)) (< (fClosedTime value_124_45_16) alloc) (= elementCount_pre_153_79_33 elementCount_153_79_33) (= elementCount_153_79_33 (asField elementCount_153_79_33 T_int)) (= locOpenParen_pre_80_23_13 locOpenParen_80_23_13) (= locOpenParen_80_23_13 (asField locOpenParen_80_23_13 T_int)) (= modifiers_pre_51_24_13 modifiers_51_24_13) (= modifiers_51_24_13 (asField modifiers_51_24_13 T_int)) (= elementType_pre_153_43_27 elementType_153_43_27) (= elementType_153_43_27 (asField elementType_153_43_27 T__TYPE)) (= locId_pre_23_38_13 locId_23_38_13) (= locId_23_38_13 (asField locId_23_38_13 T_int)) (= decl_pre_112_26_38 decl_112_26_38) (= decl_112_26_38 (asField decl_112_26_38 T_javafe_ast_GenericVarDecl)) (< (fClosedTime decl_112_26_38) alloc) (forall ((?s_91_ Int)) (=> (not (= ?s_91_ null)) (not (= (S_select decl_112_26_38 ?s_91_) null)))) (= GE_pre_29_26_26 GE_29_26_26) (= true_term (is GE_29_26_26 T_int)) (= voidType_pre_38_103_4 voidType_38_103_4) (= true_term (is voidType_38_103_4 T_javafe_ast_PrimitiveType)) (= true_term (isAllocated voidType_38_103_4 alloc)) (= keywordStrings_pre_27_181_30 keywordStrings_27_181_30) (= true_term (is keywordStrings_27_181_30 ?v_1)) (= true_term (isAllocated keywordStrings_27_181_30 alloc)) (= myTypeDecl_pre_5_63_40 myTypeDecl_5_63_40) (= myTypeDecl_5_63_40 (asField myTypeDecl_5_63_40 T_javafe_ast_TypeDecl)) (< (fClosedTime myTypeDecl_5_63_40) alloc) (= THROWSTMT_pre_30_34_7 THROWSTMT_30_34_7) (= true_term (is THROWSTMT_30_34_7 T_int)) (= NULL_pre_44_60_26 NULL_44_60_26) (= true_term (is NULL_44_60_26 T_int)) (= parent_pre_51_22_18 parent_51_22_18) (= parent_51_22_18 (asField parent_51_22_18 T_javafe_ast_TypeDecl)) (< (fClosedTime parent_51_22_18) alloc) (= count_pre_84_67_33 count_84_67_33) (= count_84_67_33 (asField count_84_67_33 T_int)) (= rootIEnv_pre_51_45 rootIEnv_51_45) (= rootIEnv_51_45 (asField rootIEnv_51_45 T_javafe_tc_EnvForTypeSig)) (< (fClosedTime rootIEnv_51_45) alloc) (= BITNOT_pre_29_57_26 BITNOT_29_57_26) (= true_term (is BITNOT_29_57_26 T_int)) (= loc_pre_32_40_13 loc_32_40_13) (= loc_32_40_13 (asField loc_32_40_13 T_int)) (= EXPROBJECTDESIGNATOR_pre_30_61_7 EXPROBJECTDESIGNATOR_30_61_7) (= true_term (is EXPROBJECTDESIGNATOR_30_61_7 T_int)) (= elems_pre elems) (= elems (asElems elems)) (< (eClosedTime elems) alloc) (= LS (asLockSet LS)) (= alloc_pre alloc)) (not (and (= true_term (is this T_javafe_tc_FlowInsensitiveChecks)) (= true_term (isAllocated this alloc)) (not (= this null)) (= true_term (is leftExpr_1535_39 T_javafe_ast_Expr)) (= true_term (isAllocated leftExpr_1535_39 alloc)) (= true_term (is rightExpr_1535_54 T_javafe_ast_Expr)) (= true_term (isAllocated rightExpr_1535_54 alloc)) ?v_2 ?v_4 ?v_12 ?v_17 ?v_34 ?v_62 (or ?v_59 (and ?v_2 ?v_70 ?v_71 ?v_3 ?v_72 (or ?v_39 (and ?v_4 ?v_73 ?v_74 ?v_5 ?v_75 (or (not (and ?v_6 ?v_7)) (and ?v_76 ?v_8 ?v_77 ?v_78 ?v_11 ?v_79 ?v_80 ?v_81 (or (and ?v_61 ?v_11 (or ?v_26 (and ?v_82 ?v_13 ?v_83 (or (and ?v_16 ?v_51) (and ?v_84 ?v_86 ?v_11 (or ?v_47 (and ?v_87 ?v_21 ?v_88 (or (and ?v_23 ?v_30) (and ?v_89 ?v_92 ?v_11 (or ?v_26 (and ?v_93 ?v_27 ?v_94 (or (and ?v_31 ?v_30) (and ?v_95 (or (and ?v_36 (not (and ?v_6 ?v_34))) (and ?v_96 (or (and ?v_41 (or ?v_39 (and ?v_4 ?v_42 ?v_43 ?v_44 (or (not ?v_40) (and ?v_40 ?v_45 (not ?v_46)))))) (and ?v_97 ?v_99 ?v_11 (or ?v_47 (and ?v_100 ?v_48 ?v_101 (or (and ?v_52 ?v_51) (and ?v_102 (or (and ?v_56 (not (and ?v_7 ?v_34))) (and ?v_103 ?v_104 (or ?v_59 (and ?v_2 ?v_105 ?v_106 ?v_107 (or (not ?v_60) (and ?v_60 ?v_108 (not ?v_109)))))))))))))))))))))))))))) (and ?v_112 ?v_11 (or (not (and ?v_6 ?v_62)) (and ?v_113 ?v_63 ?v_114 ?v_115 ?v_117 ?v_11 (or (not (and ?v_7 ?v_62)) (and ?v_118 ?v_66 ?v_119 ?v_120 ?v_122 ?v_11 ?v_123 ?v_124 ?v_125 ?v_126 ?v_11 (or (not (and ?v_2 ?v_7)) (and ?v_127 ?v_128 ?v_130 ?v_11 (not (and ?v_4 ?v_6))))))))))))))) (and ?v_2 ?v_70 ?v_71 ?v_3 ?v_72 ?v_4 ?v_73 ?v_74 ?v_5 ?v_75 ?v_76 ?v_8 ?v_77 (or (and ?v_9 ?v_11 ?v_11) (and ?v_78 ?v_11 ?v_79 ?v_80 ?v_81 (or (and ?v_61 ?v_11 ?v_82 ?v_13 ?v_83 ?v_84 (or (and ?v_85 ?v_11 ?v_11 ?v_91) (and ?v_86 ?v_11 ?v_87 ?v_21 ?v_88 ?v_89 (or (and ?v_90 ?v_11 ?v_11 ?v_91) (and ?v_92 ?v_11 ?v_93 ?v_27 ?v_94 ?v_95 ?v_96 ?v_97 (or (and ?v_98 ?v_11 ?v_11 (= RES_11_ RES_1536_24_1536_24)) (and ?v_99 ?v_11 ?v_100 ?v_48 ?v_101 ?v_102 ?v_103 (or (and ?v_104 ?v_2 ?v_105 ?v_106 ?v_107 ?v_60 ?v_108 ?v_109 (= true_term (is RES_1581_2_1581_2 T_boolean)) (= EC_1581_2_1581_2 ecReturn) (= RES_12_ RES_1581_2_1581_2) (= EC_11_ EC_1581_2_1581_2) (= tmp15_cand_1580_2 RES_1581_2_1581_2)) (and (not ?v_104) ?v_11 (= RES_12_ RES_7_) (= EC_11_ EC_7_) (= tmp15_cand_1580_2 false_term))) (or (and ?v_110 ?v_11 ?v_11 (= RES_11_ RES_1537_18_1537_18)) (and (not ?v_110) ?v_11 (= true_term (is RES_1591_18_1591_18 T_javafe_ast_Type)) (= true_term (isAllocated RES_1591_18_1591_18 alloc)) ?v_111 (=> ?v_111 (not (= RES_1591_18_1591_18 null))) ?v_11 (= RES_11_ RES_1591_18_1591_18)))))))))) (and ?v_112 ?v_11 ?v_113 ?v_63 ?v_114 ?v_115 (or (and ?v_116 ?v_11 ?v_11) (and ?v_117 ?v_11 ?v_118 ?v_66 ?v_119 ?v_120 (or (and ?v_121 ?v_11 ?v_11) (and ?v_122 ?v_11 ?v_123 ?v_124 ?v_125 (or (and ?v_126 ?v_11 ?v_127 ?v_128 (or (and ?v_129 ?v_11 ?v_11) (and ?v_130 ?v_11 ?v_131 ?v_132 ?v_133 ?v_11 ?v_11))) (and (or (and ?v_126 ?v_11 ?v_127 ?v_128 ?v_130 ?v_11 ?v_131 ?v_132 (not ?v_133) ?v_11 (= EC_12_ EC_1619_9_1619_9)) (and (not ?v_126) ?v_11 (= EC_12_ EC_10_))) ?v_11)))))))))) (not (= ecReturn ecReturn)))))))))))))))))))))))))))))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/opisavailable-12.smt2 b/test/regress/regress0/quantifiers/opisavailable-12.smt2 new file mode 100644 index 000000000..c529b409f --- /dev/null +++ b/test/regress/regress0/quantifiers/opisavailable-12.smt2 @@ -0,0 +1,276 @@ +(set-logic AUFLIA) +(set-info :source | + Tokeneer case study + |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun field.datat.length () Int) +(declare-fun field.datat.minmatchlength () Int) +(declare-fun field.datat.text () Int) +(declare-fun field.keyboard__datat.length () Int) +(declare-fun field.keyboard__datat.text () Int) +(declare-fun field.t.rolepresent () Int) +(declare-fun field.t.currentop () Int) +(declare-fun archivelog () Int) +(declare-fun character__base__first () Int) +(declare-fun character__base__last () Int) +(declare-fun character__first () Int) +(declare-fun character__last () Int) +(declare-fun character__size () Int) +(declare-fun datai__base__first () Int) +(declare-fun datai__base__last () Int) +(declare-fun datai__first () Int) +(declare-fun datai__last () Int) +(declare-fun datai__size () Int) +(declare-fun datalengtht__base__first () Int) +(declare-fun datalengtht__base__last () Int) +(declare-fun datalengtht__first () Int) +(declare-fun datalengtht__last () Int) +(declare-fun datalengtht__size () Int) +(declare-fun integer__base__first () Int) +(declare-fun integer__base__last () Int) +(declare-fun integer__first () Int) +(declare-fun integer__last () Int) +(declare-fun integer__size () Int) +(declare-fun isavailable () Int) +(declare-fun keyboard__datai__base__first () Int) +(declare-fun keyboard__datai__base__last () Int) +(declare-fun keyboard__datai__first () Int) +(declare-fun keyboard__datai__last () Int) +(declare-fun keyboard__datai__size () Int) +(declare-fun keyboard__datalengtht__base__first () Int) +(declare-fun keyboard__datalengtht__base__last () Int) +(declare-fun keyboard__datalengtht__first () Int) +(declare-fun keyboard__datalengtht__last () Int) +(declare-fun keyboard__datalengtht__size () Int) +(declare-fun null__string () Int) +(declare-fun nullop () Int) +(declare-fun opandnullt__base__first () Int) +(declare-fun opandnullt__base__last () Int) +(declare-fun opandnullt__first () Int) +(declare-fun opandnullt__last () Int) +(declare-fun opandnullt__size () Int) +(declare-fun opt__base__first () Int) +(declare-fun opt__base__last () Int) +(declare-fun opt__first () Int) +(declare-fun opt__last () Int) +(declare-fun opt__size () Int) +(declare-fun optokeyed () Int) +(declare-fun overridelock () Int) +(declare-fun positive__base__first () Int) +(declare-fun positive__base__last () Int) +(declare-fun positive__first () Int) +(declare-fun positive__last () Int) +(declare-fun positive__size () Int) +(declare-fun privtypes__adminprivileget__base__first () Int) +(declare-fun privtypes__adminprivileget__base__last () Int) +(declare-fun privtypes__adminprivileget__first () Int) +(declare-fun privtypes__adminprivileget__last () Int) +(declare-fun privtypes__adminprivileget__size () Int) +(declare-fun privtypes__auditmanager () Int) +(declare-fun privtypes__guard () Int) +(declare-fun privtypes__privileget__base__first () Int) +(declare-fun privtypes__privileget__base__last () Int) +(declare-fun privtypes__privileget__first () Int) +(declare-fun privtypes__privileget__last () Int) +(declare-fun privtypes__privileget__size () Int) +(declare-fun privtypes__securityofficer () Int) +(declare-fun privtypes__useronly () Int) +(declare-fun shutdownop () Int) +(declare-fun updateconfigdata () Int) +(declare-fun keyedop () Int) +(declare-fun keyedop__entry__loop__2 () Int) +(declare-fun init.keyedop__entry__loop__2 () Int) +(declare-fun init.keyedop () Int) +(declare-fun loop__1__op () Int) +(declare-fun init.loop__1__op () Int) +(declare-fun loop__2__i () Int) +(declare-fun init.loop__2__i () Int) +(declare-fun theadmin () Int) +(declare-fun init.theadmin () Int) +(declare-fun theop () Int) +(declare-fun init.theop () Int) +(declare-fun bit__and (Int Int) Int) +(declare-fun bit__not (Int Int) Int) +(declare-fun bit__or (Int Int) Int) +(declare-fun bit__xor (Int Int) Int) +(declare-fun character__pos (Int) Int) +(declare-fun character__val (Int) Int) +(declare-fun integer__pred (Int) Int) +(declare-fun integer__succ (Int) Int) +(declare-fun opandnullt__pos (Int) Int) +(declare-fun opandnullt__pred (Int) Int) +(declare-fun opandnullt__succ (Int) Int) +(declare-fun opandnullt__val (Int) Int) +(declare-fun privtypes__privileget__pos (Int) Int) +(declare-fun privtypes__privileget__pred (Int) Int) +(declare-fun privtypes__privileget__succ (Int) Int) +(declare-fun privtypes__privileget__val (Int) Int) +(declare-fun round__ (Int) Int) +(declare-fun i.div (Int Int) Int) +(declare-fun i.mod (Int Int) Int) +(declare-fun i.mult (Int Int) Int) +(declare-fun i.exp (Int Int) Int) +(declare-fun tm.true () Int) +(declare-fun tm.false () Int) +(declare-fun tm.not (Int) Int) +(declare-fun tm.and (Int Int) Int) +(declare-fun tm.or (Int Int) Int) +(declare-fun tm.iff (Int Int) Int) +(declare-fun tm.eq (Int Int) Int) +(declare-fun tm.ne (Int Int) Int) +(declare-fun tm.lt (Int Int) Int) +(declare-fun tm.le (Int Int) Int) +(declare-fun tuple.2 (Int Int) Int) +(declare-fun a.store (Int Int Int) Int) +(declare-fun a.select (Int Int) Int) +(declare-fun a.mk_const_array (Int) Int) +(declare-fun a.default_array () Int) +(declare-fun r.default_record () Int) +(declare-fun matched () Bool) +(declare-fun init.matched () Bool) +(declare-fun ispresent (Int) Bool) +(declare-fun opandnullt__LE (Int Int) Bool) +(declare-fun opandnullt__LT (Int Int) Bool) +(declare-fun privtypes__privileget__LE (Int Int) Bool) +(declare-fun privtypes__privileget__LT (Int Int) Bool) +(assert (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i 4)) (= (privtypes__privileget__pos ?i) ?i)))) +(assert (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i 4)) (= (privtypes__privileget__val ?i) ?i)))) +(assert (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i 3)) (= (privtypes__privileget__succ ?i) (+ ?i 1))))) +(assert (forall ((?i Int)) (=> (and (<= 1 ?i) (< ?i 4)) (= (privtypes__privileget__pred ?i) (- ?i 1))))) +(assert (= privtypes__useronly 0)) +(assert (= privtypes__guard 1)) +(assert (= privtypes__auditmanager 2)) +(assert (= privtypes__securityofficer 3)) +(assert (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i 5)) (= (opandnullt__pos ?i) ?i)))) +(assert (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i 5)) (= (opandnullt__val ?i) ?i)))) +(assert (forall ((?i Int)) (=> (and (<= 0 ?i) (< ?i 4)) (= (opandnullt__succ ?i) (+ ?i 1))))) +(assert (forall ((?i Int)) (=> (and (<= 1 ?i) (< ?i 5)) (= (opandnullt__pred ?i) (- ?i 1))))) +(assert (= nullop 0)) +(assert (= archivelog 1)) +(assert (= updateconfigdata 2)) +(assert (= overridelock 3)) +(assert (= shutdownop 4)) +(assert (forall ((?I Int)) (=> (and (<= archivelog ?I) (<= ?I shutdownop)) (<= datalengtht__first (a.select (a.select optokeyed ?I) field.datat.length))))) +(assert (forall ((?I Int)) (=> (and (<= archivelog ?I) (<= ?I shutdownop)) (<= (a.select (a.select optokeyed ?I) field.datat.length) datalengtht__last)))) +(assert (forall ((?I Int)) (=> (and (<= archivelog ?I) (<= ?I shutdownop)) (<= datai__first (a.select (a.select optokeyed ?I) field.datat.minmatchlength))))) +(assert (forall ((?I Int)) (=> (and (<= archivelog ?I) (<= ?I shutdownop)) (<= (a.select (a.select optokeyed ?I) field.datat.minmatchlength) datai__last)))) +(assert (forall ((?I Int) (?J Int)) (=> (and (<= archivelog ?I) (<= ?I shutdownop) (<= 1 ?J) (<= ?J 18)) (<= character__first (a.select (a.select (a.select optokeyed ?I) field.datat.text) ?J))))) +(assert (forall ((?I Int) (?J Int)) (=> (and (<= archivelog ?I) (<= ?I shutdownop) (<= 1 ?J) (<= ?J 18)) (<= (a.select (a.select (a.select optokeyed ?I) field.datat.text) ?J) character__last)))) +(assert (<= 0 integer__size)) +(assert (= integer__first (- 2147483648))) +(assert (= integer__last 2147483647)) +(assert (= integer__base__first (- 2147483648))) +(assert (= integer__base__last 2147483647)) +(assert (<= 0 character__size)) +(assert (= character__first 0)) +(assert (= character__last 255)) +(assert (= character__base__first 0)) +(assert (= character__base__last 255)) +(assert (<= 0 positive__size)) +(assert (= positive__first 1)) +(assert (= positive__last 2147483647)) +(assert (= positive__base__first (- 2147483648))) +(assert (= positive__base__last 2147483647)) +(assert (<= 0 privtypes__privileget__size)) +(assert (= privtypes__privileget__first privtypes__useronly)) +(assert (= privtypes__privileget__last privtypes__securityofficer)) +(assert (= privtypes__privileget__base__first privtypes__useronly)) +(assert (= privtypes__privileget__base__last privtypes__securityofficer)) +(assert (<= 0 privtypes__adminprivileget__size)) +(assert (= privtypes__adminprivileget__first privtypes__guard)) +(assert (= privtypes__adminprivileget__last privtypes__securityofficer)) +(assert (= privtypes__adminprivileget__base__first privtypes__useronly)) +(assert (= privtypes__adminprivileget__base__last privtypes__securityofficer)) +(assert (<= 0 keyboard__datalengtht__size)) +(assert (= keyboard__datalengtht__first 0)) +(assert (= keyboard__datalengtht__last 78)) +(assert (= keyboard__datalengtht__base__first (- 2147483648))) +(assert (= keyboard__datalengtht__base__last 2147483647)) +(assert (<= 0 keyboard__datai__size)) +(assert (= keyboard__datai__first 1)) +(assert (= keyboard__datai__last 78)) +(assert (= keyboard__datai__base__first (- 2147483648))) +(assert (= keyboard__datai__base__last 2147483647)) +(assert (<= 0 opandnullt__size)) +(assert (= opandnullt__first nullop)) +(assert (= opandnullt__last shutdownop)) +(assert (= opandnullt__base__first nullop)) +(assert (= opandnullt__base__last shutdownop)) +(assert (<= 0 opt__size)) +(assert (= opt__first archivelog)) +(assert (= opt__last shutdownop)) +(assert (= opt__base__first nullop)) +(assert (= opt__base__last shutdownop)) +(assert (<= 0 datalengtht__size)) +(assert (= datalengtht__first 0)) +(assert (= datalengtht__last 18)) +(assert (= datalengtht__base__first (- 2147483648))) +(assert (= datalengtht__base__last 2147483647)) +(assert (<= 0 datai__size)) +(assert (= datai__first 1)) +(assert (= datai__last 18)) +(assert (= datai__base__first (- 2147483648))) +(assert (= datai__base__last 2147483647)) +(assert (forall ((?X Int) (?Y Int)) (=> (< 0 ?Y) (<= 0 (i.mod ?X ?Y))))) +(assert (forall ((?X Int) (?Y Int)) (=> (< 0 ?Y) (< (i.mod ?X ?Y) ?Y)))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= 0 ?X) (< 0 ?Y)) (<= (i.mult ?Y (i.div ?X ?Y)) ?X)))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= 0 ?X) (< 0 ?Y)) (< (- ?X ?Y) (i.mult ?Y (i.div ?X ?Y)))))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= ?X 0) (< 0 ?Y)) (<= ?X (i.mult ?Y (i.div ?X ?Y)))))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= ?X 0) (< 0 ?Y)) (< (i.mult ?Y (i.div ?X ?Y)) (+ ?X ?Y))))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= 0 ?X) (<= 0 ?Y)) (<= 0 (bit__or ?X ?Y))))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= 0 ?X) (<= 0 ?Y)) (<= ?X (bit__or ?X ?Y))))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= 0 ?X) (<= 0 ?Y)) (<= ?Y (bit__or ?X ?Y))))) +(assert (forall ((?X Int) (?Y Int)) (=> (and (<= 0 ?X) (<= 0 ?Y)) (<= (bit__or ?X ?Y) (+ ?X ?Y))))) +(assert (distinct field.datat.length field.datat.minmatchlength field.datat.text)) +(assert (distinct field.keyboard__datat.length field.keyboard__datat.text)) +(assert (distinct field.t.rolepresent field.t.currentop)) +(assert (distinct tm.true tm.false)) +(assert (forall ((?x Int)) (! (= (= (tm.not ?x) tm.true) (not (= ?x tm.true))) :pattern ((tm.not ?x)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.and ?x ?y) tm.true) (and (= ?x tm.true) (= ?y tm.true))) :pattern ((tm.and ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.or ?x ?y) tm.true) (or (= ?x tm.true) (= ?y tm.true))) :pattern ((tm.or ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.iff ?x ?y) tm.true) (= (= ?x tm.true) (= ?y tm.true))) :pattern ((tm.iff ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.eq ?x ?y) tm.true) (= ?x ?y)) :pattern ((tm.eq ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.ne ?x ?y) tm.true) (not (= ?x ?y))) :pattern ((tm.ne ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.lt ?x ?y) tm.true) (< ?x ?y)) :pattern ((tm.lt ?x ?y)) ))) +(assert (forall ((?x Int) (?y Int)) (! (= (= (tm.le ?x ?y) tm.true) (<= ?x ?y)) :pattern ((tm.le ?x ?y)) ))) +(assert (forall ((?a Int) (?i Int) (?v Int)) (! (= (a.select (a.store ?a ?i ?v) ?i) ?v) :pattern ((a.select (a.store ?a ?i ?v) ?i)) ))) +(assert (forall ((?a Int) (?i Int) (?v Int) (?j Int)) (! (or (= ?i ?j) (= (a.select (a.store ?a ?i ?v) ?j) (a.select ?a ?j))) :pattern ((a.select (a.store ?a ?i ?v) ?j)) ))) +(assert (forall ((?i Int) (?v Int)) (! (= (a.select (a.mk_const_array ?v) ?i) ?v) :pattern ((a.select (a.mk_const_array ?v) ?i)) ))) +(assert (<= opt__first loop__1__op)) +(assert (<= loop__1__op opt__last)) +(assert (<= datai__first loop__2__i)) +(assert (<= loop__2__i datai__last)) +(assert (<= loop__2__i (a.select keyedop field.keyboard__datat.length))) +(assert (<= datai__first (a.select keyedop field.keyboard__datat.length))) +(assert (<= (a.select keyedop field.keyboard__datat.length) datai__last)) +(assert (= keyedop keyedop__entry__loop__2)) +(assert (<= privtypes__adminprivileget__first (a.select theadmin field.t.rolepresent))) +(assert (<= (a.select theadmin field.t.rolepresent) privtypes__adminprivileget__last)) +(assert (= theop nullop)) +(assert (<= opandnullt__first (a.select theadmin field.t.currentop))) +(assert (<= (a.select theadmin field.t.currentop) opandnullt__last)) +(assert (<= privtypes__privileget__first (a.select theadmin field.t.rolepresent))) +(assert (<= (a.select theadmin field.t.rolepresent) privtypes__privileget__last)) +(assert (forall ((?i___1 Int)) (let ((?v_0 (a.select (a.select keyedop field.keyboard__datat.text) ?i___1))) (=> (and (<= keyboard__datai__first ?i___1) (<= ?i___1 keyboard__datai__last)) (and (<= character__first ?v_0) (<= ?v_0 character__last)))))) +(assert (<= keyboard__datalengtht__first (a.select keyedop field.keyboard__datat.length))) +(assert (<= (a.select keyedop field.keyboard__datat.length) keyboard__datalengtht__last)) +(assert (ispresent theadmin)) +(assert (<= datai__first loop__2__i)) +(assert (<= loop__2__i datai__last)) +(assert (<= loop__2__i (a.select keyedop__entry__loop__2 field.keyboard__datat.length))) +(assert (<= opt__first loop__1__op)) +(assert (<= loop__1__op opt__last)) +(assert (<= loop__1__op opt__last)) +(assert (<= keyboard__datai__first loop__2__i)) +(assert (<= loop__2__i keyboard__datai__last)) +(assert (<= datai__first loop__2__i)) +(assert (<= loop__2__i datai__last)) +(assert (<= opt__first loop__1__op)) +(assert (<= loop__1__op opt__last)) +(assert (not (not (= (a.select (a.select (a.select optokeyed loop__1__op) field.datat.text) loop__2__i) (a.select (a.select keyedop field.keyboard__datat.text) loop__2__i))))) +(assert (not (= loop__2__i (a.select keyedop__entry__loop__2 field.keyboard__datat.length)))) +(assert (let ((?v_6 (<= opt__first loop__1__op)) (?v_7 (<= loop__1__op opt__last)) (?v_1 (a.select keyedop field.keyboard__datat.length)) (?v_2 (a.select theadmin field.t.rolepresent)) (?v_3 (a.select theadmin field.t.currentop)) (?v_0 (+ loop__2__i 1))) (let ((?v_4 (<= datai__first ?v_0)) (?v_5 (<= ?v_0 datai__last))) (not (and ?v_6 ?v_7 ?v_4 ?v_5 (<= ?v_0 ?v_1) (<= datai__first ?v_1) (<= ?v_1 datai__last) (= keyedop keyedop__entry__loop__2) (<= privtypes__adminprivileget__first ?v_2) (<= ?v_2 privtypes__adminprivileget__last) (= theop nullop) (<= opandnullt__first ?v_3) (<= ?v_3 opandnullt__last) (<= privtypes__privileget__first ?v_2) (<= ?v_2 privtypes__privileget__last) (forall ((?i___1 Int)) (let ((?v_8 (a.select (a.select keyedop field.keyboard__datat.text) ?i___1))) (=> (and (<= keyboard__datai__first ?i___1) (<= ?i___1 keyboard__datai__last)) (and (<= character__first ?v_8) (<= ?v_8 character__last))))) (<= keyboard__datalengtht__first ?v_1) (<= ?v_1 keyboard__datalengtht__last) (ispresent theadmin) ?v_4 ?v_5 (<= ?v_0 (a.select keyedop__entry__loop__2 field.keyboard__datat.length)) ?v_6 ?v_7 ?v_7))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/piVC_5581bd.smt2 b/test/regress/regress0/quantifiers/piVC_5581bd.smt2 new file mode 100644 index 000000000..78baeea84 --- /dev/null +++ b/test/regress/regress0/quantifiers/piVC_5581bd.smt2 @@ -0,0 +1,23 @@ +(set-logic AUFLIA) +(set-info :source |piVC|) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun V_26 () Int) +(declare-fun V_24 () Int) +(declare-fun V_23 () Int) +(declare-fun u_0 () Int) +(declare-fun m_0 () Int) +(declare-fun l_0 () Int) +(declare-fun arr_0 () (Array Int Int)) +(declare-fun buf () (Array Int Int)) +(declare-fun arr () (Array Int Int)) +(declare-fun k () Int) +(declare-fun u () Int) +(declare-fun j () Int) +(declare-fun m () Int) +(declare-fun i () Int) +(declare-fun l () Int) +(assert (let ((?v_5 (<= 0 l_0)) (?v_6 (<= l_0 m_0)) (?v_7 (< m_0 u_0)) (?v_8 (< u_0 V_23)) (?v_9 (>= V_23 0)) (?v_3 (> j u)) (?v_1 (<= i m)) (?v_0 (+ m 1)) (?v_11 (+ u 1))) (let ((?v_12 (- j ?v_0)) (?v_16 (<= j u)) (?v_2 (= k 0)) (?v_14 (select arr i)) (?v_4 (select buf (- k 1))) (?v_18 (select arr j)) (?v_19 (= V_26 (+ (- u l) 1))) (?v_20 (= V_24 V_23)) (?v_21 (= l l_0)) (?v_22 (= m m_0)) (?v_23 (= u u_0)) (?v_10 (+ i 1)) (?v_13 (+ k 1))) (let ((?v_15 (not (= ?v_13 0))) (?v_17 (select (store buf k ?v_14) (- ?v_13 1)))) (and (and (and (and ?v_5 (and ?v_6 (and ?v_7 (and ?v_8 (and (forall ((?V_46 Int)) (=> (and (<= l_0 ?V_46) (<= ?V_46 m_0)) (forall ((?V_47 Int)) (=> (and (<= l_0 ?V_47) (<= ?V_47 ?V_46)) (<= (select arr_0 ?V_47) (select arr_0 ?V_46)))))) (forall ((?V_44 Int)) (=> (and (<= (+ m_0 1) ?V_44) (<= ?V_44 u_0)) (forall ((?V_45 Int)) (=> (and (<= (+ m_0 1) ?V_45) (<= ?V_45 ?V_44)) (<= (select arr_0 ?V_45) (select arr_0 ?V_44))))))))))) ?v_9) (and ?v_3 (and ?v_1 (and (< k V_26) (and (and (<= l i) (and (<= i ?v_0) (and (<= ?v_0 j) (and (<= j ?v_11) (and (= k (+ (- i l) ?v_12)) (and (forall ((?V_42 Int)) (=> (and (<= l ?V_42) (<= ?V_42 m)) (forall ((?V_43 Int)) (=> (and (<= l ?V_43) (<= ?V_43 ?V_42)) (<= (select arr ?V_43) (select arr ?V_42)))))) (and (forall ((?V_40 Int)) (=> (and (<= ?v_0 ?V_40) (<= ?V_40 u)) (forall ((?V_41 Int)) (=> (and (<= ?v_0 ?V_41) (<= ?V_41 ?V_40)) (<= (select arr ?V_41) (select arr ?V_40)))))) (and (or (= k V_26) (or ?v_1 ?v_16)) (and (or ?v_2 (or (> i m) (<= ?v_4 ?v_14))) (and (or ?v_2 (or ?v_3 (<= ?v_4 ?v_18))) (and (forall ((?V_38 Int)) (=> (and (<= 0 ?V_38) (<= ?V_38 (- k 1))) (forall ((?V_39 Int)) (=> (and (<= 0 ?V_39) (<= ?V_39 ?V_38)) (<= (select buf ?V_39) (select buf ?V_38)))))) (and ?v_19 (and (forall ((?V_37 Int)) (=> (and (<= 0 ?V_37) (<= ?V_37 (- V_24 1))) (= (select arr ?V_37) (select arr_0 ?V_37)))) (and ?v_20 (and ?v_21 (and ?v_22 ?v_23)))))))))))))))) (and (and ?v_5 (and ?v_6 (and ?v_7 (and ?v_8 (and (forall ((?V_35 Int)) (=> (and (<= l_0 ?V_35) (<= ?V_35 m_0)) (forall ((?V_36 Int)) (=> (and (<= l_0 ?V_36) (<= ?V_36 ?V_35)) (<= (select arr_0 ?V_36) (select arr_0 ?V_35)))))) (forall ((?V_33 Int)) (=> (and (<= (+ m_0 1) ?V_33) (<= ?V_33 u_0)) (forall ((?V_34 Int)) (=> (and (<= (+ m_0 1) ?V_34) (<= ?V_34 ?V_33)) (<= (select arr_0 ?V_34) (select arr_0 ?V_33))))))))))) ?v_9)))))) (or (> l ?v_10) (or (> ?v_10 ?v_0) (or (> ?v_0 j) (or (> j ?v_11) (or (not (= ?v_13 (+ (- ?v_10 l) ?v_12))) (or (exists ((?V_31 Int)) (and (and (<= l ?V_31) (<= ?V_31 m)) (exists ((?V_32 Int)) (and (and (<= l ?V_32) (<= ?V_32 ?V_31)) (> (select arr ?V_32) (select arr ?V_31)))))) (or (exists ((?V_29 Int)) (and (and (<= ?v_0 ?V_29) (<= ?V_29 u)) (exists ((?V_30 Int)) (and (and (<= ?v_0 ?V_30) (<= ?V_30 ?V_29)) (> (select arr ?V_30) (select arr ?V_29)))))) (or (and (not (= ?v_13 V_26)) (and (> ?v_10 m) ?v_3)) (or (and ?v_15 (and (<= ?v_10 m) (> ?v_17 (select arr ?v_10)))) (or (and ?v_15 (and ?v_16 (> ?v_17 ?v_18))) (or (exists ((?V_27 Int)) (and (and (<= 0 ?V_27) (<= ?V_27 (- ?v_13 1))) (exists ((?V_28 Int)) (let ((?v_24 (store buf k ?v_14))) (and (and (<= 0 ?V_28) (<= ?V_28 ?V_27)) (> (select ?v_24 ?V_28) (select ?v_24 ?V_27))))))) (or (not ?v_19) (or (exists ((?V_25 Int)) (and (and (<= 0 ?V_25) (<= ?V_25 (- V_24 1))) (not (= (select arr ?V_25) (select arr_0 ?V_25))))) (or (not ?v_20) (or (not ?v_21) (or (not ?v_22) (not ?v_23)))))))))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/ricart-agrawala6.smt2 b/test/regress/regress0/quantifiers/ricart-agrawala6.smt2 new file mode 100644 index 000000000..5f849de15 --- /dev/null +++ b/test/regress/regress0/quantifiers/ricart-agrawala6.smt2 @@ -0,0 +1,26 @@ +(set-logic AUFLIA) +(set-info :source | An Optimal Algorithm for Mutual Exclusion in Computer Networks. Glenn Ricart and Ashok K. Agrawala. Communications of the ACM Vol.: 24 Number: 1. This is a benchmark of the haRVey theorem prover. It was translated to SMT-LIB by Leonardo de Moura |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-fun p () Int) +(declare-fun q () Int) +(declare-fun r () Int) +(declare-fun s () Int) +(declare-fun s0 (Int) Bool) +(declare-fun s1 (Int) Bool) +(declare-fun s2 (Int) Bool) +(declare-fun s3 (Int) Bool) +(declare-fun s4 (Int) Bool) +(declare-fun s5 (Int) Bool) +(declare-fun s6 (Int) Bool) +(declare-fun rcs1 (Int) Bool) +(declare-fun rcs2 (Int) Bool) +(declare-fun x (Int Int) Bool) +(declare-fun ro (Int Int) Bool) +(declare-fun rd (Int Int) Bool) +(declare-fun sn (Int) Int) +(declare-fun time () Int) +(assert (not (=> (and (forall ((?p Int)) (forall ((?q Int)) (=> (or (s0 ?p) (s5 ?p)) (not (x ?p ?q))))) (forall ((?p Int)) (= (or (s0 ?p) (s6 ?p)) (not (rcs2 ?p)))) (forall ((?p Int)) (< (sn ?p) time)) (forall ((?p Int)) (forall ((?q Int)) (=> (not (= ?p ?q)) (not (= (sn ?p) (sn ?q)))))) (forall ((?p Int)) (forall ((?q Int)) (=> (and (not (= ?p ?q)) (or (and (s4 ?p) (x ?p ?q)) (s5 ?p)) (rcs2 ?q)) (< (sn ?p) (sn ?q))))) (forall ((?p Int)) (forall ((?q Int)) (=> (and (not (= ?p ?q)) (rd ?q ?p)) (ro ?p ?q)))) (forall ((?p Int)) (forall ((?q Int)) (let ((?v_0 (x ?p ?q))) (=> (not (= ?p ?q)) (= (not (or (and (s2 ?p) ?v_0) (and (s3 ?p) (not ?v_0)))) (=> (ro ?p ?q) (rd ?q ?p))))))) (forall ((?p Int)) (forall ((?q Int)) (let ((?v_1 (x ?q ?p))) (let ((?v_2 (or (and (s3 ?q) ?v_1) (and (s4 ?q) (not ?v_1))))) (=> (not (= ?p ?q)) (or (and (s6 ?p) (not (x ?p ?q)) ?v_2) (= (rd ?p ?q) (and ?v_2 (rcs2 ?p) (< (sn ?p) (sn ?q)))))))))) (forall ((?p Int)) (=> (s0 ?p) (not (or (s2 ?p) (s3 ?p) (s4 ?p) (s5 ?p) (s6 ?p))))) (forall ((?p Int)) (=> (s2 ?p) (not (or (s3 ?p) (s4 ?p) (s5 ?p) (s6 ?p))))) (forall ((?p Int)) (=> (s3 ?p) (not (or (s4 ?p) (s5 ?p) (s6 ?p))))) (forall ((?p Int)) (=> (s4 ?p) (not (or (s5 ?p) (s6 ?p))))) (forall ((?p Int)) (=> (s5 ?p) (not (s6 ?p)))) (forall ((?r Int)) (let ((?v_3 (not (= ?r p)))) (=> (s0 ?r) (not (or (s2 ?r) (and ?v_3 (=> ?v_3 (s3 ?r))) (=> ?v_3 (s4 ?r)) (s5 ?r) (s6 ?r)))))) (forall ((?r Int)) (let ((?v_4 (not (= ?r p)))) (=> (s2 ?r) (not (or (and ?v_4 (=> ?v_4 (s3 ?r))) (=> ?v_4 (s4 ?r)) (s5 ?r) (s6 ?r)))))) (forall ((?r Int)) (let ((?v_5 (not (= ?r p)))) (=> (and ?v_5 (=> ?v_5 (s3 ?r))) (not (or (=> ?v_5 (s4 ?r)) (s5 ?r) (s6 ?r)))))) (forall ((?r Int)) (=> (=> (not (= ?r p)) (s4 ?r)) (not (or (s5 ?r) (s6 ?r))))) (forall ((?r Int)) (=> (s5 ?r) (not (s6 ?r)))) (s3 p) (forall ((?q Int)) (=> (not (= ?q p)) (x p ?q)))) (and (forall ((?s Int)) (forall ((?r Int)) (let ((?v_6 (not (= ?s p)))) (=> (or (s0 ?s) (s5 ?s)) (not (and ?v_6 (=> ?v_6 (x ?s ?r)))))))) (forall ((?s Int)) (= (or (s0 ?s) (s6 ?s)) (not (rcs2 ?s)))) (forall ((?s Int)) (< (sn ?s) time)) (forall ((?s Int)) (forall ((?r Int)) (=> (not (= ?s ?r)) (not (= (sn ?s) (sn ?r)))))) (forall ((?s Int)) (forall ((?r Int)) (let ((?v_7 (not (= ?s p)))) (=> (and (not (= ?s ?r)) (or (and (=> ?v_7 (s4 ?s)) ?v_7 (=> ?v_7 (x ?s ?r))) (s5 ?s)) (rcs2 ?r)) (< (sn ?s) (sn ?r)))))) (forall ((?s Int)) (forall ((?r Int)) (=> (and (not (= ?s ?r)) (rd ?r ?s)) (ro ?s ?r)))) (forall ((?s Int)) (forall ((?r Int)) (let ((?v_8 (not (= ?s p)))) (let ((?v_9 (=> ?v_8 (x ?s ?r)))) (=> (not (= ?s ?r)) (= (not (or (and (s2 ?s) ?v_8 ?v_9) (and ?v_8 (=> ?v_8 (s3 ?s)) (not (and ?v_8 ?v_9))))) (=> (ro ?s ?r) (rd ?r ?s)))))))) (forall ((?s Int)) (forall ((?r Int)) (let ((?v_10 (not (= ?s p))) (?v_11 (not (= ?r p)))) (let ((?v_12 (=> ?v_11 (x ?r ?s)))) (let ((?v_13 (or (and ?v_11 (=> ?v_11 (s3 ?r)) ?v_11 ?v_12) (and (=> ?v_11 (s4 ?r)) (not (and ?v_11 ?v_12)))))) (=> (not (= ?s ?r)) (or (and (s6 ?s) (not (and ?v_10 (=> ?v_10 (x ?s ?r)))) ?v_13) (= (rd ?s ?r) (and ?v_13 (rcs2 ?s) (< (sn ?s) (sn ?r))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/set3.smt2 b/test/regress/regress0/quantifiers/set3.smt2 new file mode 100644 index 000000000..d3e51d996 --- /dev/null +++ b/test/regress/regress0/quantifiers/set3.smt2 @@ -0,0 +1,29 @@ +(set-logic AUFLIA) +(set-info :source | Assertion verification of simple set manipulation programs. |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status unsat) +(declare-sort Set 0) +(declare-fun member (Int Set) Bool) +(declare-fun insert (Set Int) Set) +(declare-fun delete (Set Int) Set) +(declare-fun sup (Set) Int) +(assert (forall ((?x Int) (?s Set)) (member ?x (insert ?s ?x)))) +(assert (forall ((?x Int) (?y Int) (?s Set)) (=> (not (= ?x ?y)) (= (member ?x (insert ?s ?y)) (member ?x ?s))))) +(assert (forall ((?x Int) (?s Set)) (=> (not (member ?x ?s)) (= (delete ?s ?x) ?s)))) +(assert (forall ((?x Int) (?s Set)) (= (delete (insert ?s ?x) ?x) (delete ?s ?x)))) +(assert (forall ((?x Int) (?y Int) (?s Set)) (=> (not (= ?x ?y)) (= (delete (insert ?s ?y) ?x) (insert (delete ?s ?x) ?y))))) +(assert (forall ((?s Set)) (member (sup ?s) ?s))) +(assert (forall ((?s Set) (?x Int)) (=> (member ?x ?s) (<= ?x (sup ?s))))) +(assert (forall ((?s Set) (?x Int)) (=> (< (sup ?s) ?x) (= (sup (insert ?s ?x)) ?x)))) +(declare-fun arr () (Array Int Int)) +(declare-fun s0 () Set) +(assert (forall ((?i Int)) (=> (> ?i 0) (< (select arr ?i) (sup s0))))) +(declare-fun i1 () Int) +(declare-fun s1 () Set) +(declare-fun g (Int) Int) +(assert (forall ((?i Int)) (> (g ?i) 0))) +(assert (= s1 (insert s0 (select arr (g i1))))) +(assert (not (= (sup s1) (sup s0)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/set8.smt2 b/test/regress/regress0/quantifiers/set8.smt2 new file mode 100644 index 000000000..684d94b7a --- /dev/null +++ b/test/regress/regress0/quantifiers/set8.smt2 @@ -0,0 +1,26 @@ +(set-logic AUFLIA) +(set-info :source | Set theory. |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status unsat) +(declare-sort Set 0) +(declare-sort Elem 0) +(declare-fun member (Elem Set) Bool) +(declare-fun subset (Set Set) Bool) +(assert (forall ((?x Elem) (?s1 Set) (?s2 Set)) (=> (and (member ?x ?s1) (subset ?s1 ?s2)) (member ?x ?s2)))) +(assert (forall ((?s1 Set) (?s2 Set)) (=> (not (subset ?s1 ?s2)) (exists ((?x Elem)) (and (member ?x ?s1) (not (member ?x ?s2))))))) +(assert (forall ((?s1 Set) (?s2 Set)) (=> (forall ((?x Elem)) (=> (member ?x ?s1) (member ?x ?s2))) (subset ?s1 ?s2)))) +(declare-fun seteq (Set Set) Bool) +(assert (forall ((?s1 Set) (?s2 Set)) (= (seteq ?s1 ?s2) (= ?s1 ?s2)))) +(assert (forall ((?s1 Set) (?s2 Set)) (= (seteq ?s1 ?s2) (and (subset ?s1 ?s2) (subset ?s2 ?s1))))) +(declare-fun union (Set Set) Set) +(assert (forall ((?x Elem) (?s1 Set) (?s2 Set)) (= (member ?x (union ?s1 ?s2)) (or (member ?x ?s1) (member ?x ?s2))))) +(declare-fun intersection (Set Set) Set) +(assert (forall ((?x Elem) (?s1 Set) (?s2 Set)) (= (member ?x (intersection ?s1 ?s2)) (and (member ?x ?s1) (member ?x ?s2))))) +(declare-fun difference (Set Set) Set) +(assert (forall ((?x Elem) (?s1 Set) (?s2 Set)) (= (member ?x (difference ?s1 ?s2)) (and (member ?x ?s1) (not (member ?x ?s2)))))) +(declare-fun a () Set) +(declare-fun b () Set) +(assert (not (seteq (intersection a b) (intersection b a)))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/smtlib384a03.smt2 b/test/regress/regress0/quantifiers/smtlib384a03.smt2 new file mode 100644 index 000000000..9e2273cff --- /dev/null +++ b/test/regress/regress0/quantifiers/smtlib384a03.smt2 @@ -0,0 +1,205 @@ +(set-logic AUFLIRA) +(set-info :source |http://proval.lri.fr/why-benchmarks |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-sort Unit 0) +(declare-sort c_unique 0) +(declare-sort c_ssorted 0) +(declare-sort c_type 0) +(declare-sort c_Boolean 0) +(declare-fun c_sort (c_type c_unique) c_ssorted) +(declare-fun c_Boolean_true () c_Boolean) +(declare-fun c_Boolean_false () c_Boolean) +(assert (forall ((?b_22_1 c_Boolean)) (or (= c_Boolean_true ?b_22_1) (= c_Boolean_false ?b_22_1)))) +(assert (not (= c_Boolean_true c_Boolean_false))) +(declare-fun int2U (Int) c_unique) +(declare-fun ss2Int (c_ssorted) Int) +(declare-fun real2U (Real) c_unique) +(declare-fun ss2Real (c_ssorted) Real) +(declare-fun bool2U (c_Boolean) c_unique) +(declare-fun ss2Bool (c_ssorted) c_Boolean) +(declare-fun c_int () c_type) +(declare-fun c_bool () c_type) +(declare-fun c_real () c_type) +(declare-fun c_unit () c_type) +(declare-fun c_ref (c_unique) c_unique) +(assert (forall ((?t_21_2 c_type)) (forall ((?x_20_3 c_unique)) (forall ((?y_19_4 c_unique)) (=> (= (c_sort ?t_21_2 ?x_20_3) (c_sort ?t_21_2 ?y_19_4)) (= ?x_20_3 ?y_19_4)))))) +(assert (forall ((?x_18_5 Int)) (= (ss2Int (c_sort c_int (int2U ?x_18_5))) ?x_18_5))) +(assert (forall ((?x_17_6 Int)) (forall ((?y_16_7 Int)) (=> (= (int2U ?x_17_6) (int2U ?y_16_7)) (= ?x_17_6 ?y_16_7))))) +(assert (forall ((?x_15_8 Real)) (forall ((?y_14_9 Real)) (=> (= (real2U ?x_15_8) (real2U ?y_14_9)) (= ?x_15_8 ?y_14_9))))) +(assert (forall ((?x_13_10 c_Boolean)) (forall ((?y_12_11 c_Boolean)) (=> (= (bool2U ?x_13_10) (bool2U ?y_12_11)) (= ?x_13_10 ?y_12_11))))) +(assert (forall ((?x_11_12 c_ssorted)) (forall ((?y_10_13 c_ssorted)) (=> (= (ss2Int ?x_11_12) (ss2Int ?y_10_13)) (= ?x_11_12 ?y_10_13))))) +(assert (forall ((?x_9_14 c_ssorted)) (forall ((?y_8_15 c_ssorted)) (=> (= (ss2Real ?x_9_14) (ss2Real ?y_8_15)) (= ?x_9_14 ?y_8_15))))) +(assert (forall ((?x_7_16 c_ssorted)) (forall ((?y_6_17 c_ssorted)) (=> (= (ss2Bool ?x_7_16) (ss2Bool ?y_6_17)) (= ?x_7_16 ?y_6_17))))) +(assert (forall ((?x_5_18 Real)) (= (ss2Real (c_sort c_real (real2U ?x_5_18))) ?x_5_18))) +(assert (forall ((?x_4_19 c_Boolean)) (= (ss2Bool (c_sort c_bool (bool2U ?x_4_19))) ?x_4_19))) +(assert (forall ((?x_3_20 c_unique)) (= (int2U (ss2Int (c_sort c_int ?x_3_20))) ?x_3_20))) +(assert (forall ((?x_2_21 c_unique)) (= (real2U (ss2Real (c_sort c_real ?x_2_21))) ?x_2_21))) +(assert (forall ((?x_1_22 c_unique)) (= (bool2U (ss2Bool (c_sort c_bool ?x_1_22))) ?x_1_22))) +(declare-fun eq_int (Int Int) Bool) +(declare-fun neq_int (Int Int) Bool) +(declare-fun lt_int_bool (Int Int) c_Boolean) +(declare-fun le_int_bool (Int Int) c_Boolean) +(declare-fun gt_int_bool (Int Int) c_Boolean) +(declare-fun ge_int_bool (Int Int) c_Boolean) +(declare-fun eq_int_bool (Int Int) c_Boolean) +(declare-fun neq_int_bool (Int Int) c_Boolean) +(assert (forall ((?x_40_23 Int)) (forall ((?y_39_24 Int)) (= (= (lt_int_bool ?x_40_23 ?y_39_24) c_Boolean_true) (< ?x_40_23 ?y_39_24))))) +(assert (forall ((?x_42_25 Int)) (forall ((?y_41_26 Int)) (= (= (le_int_bool ?x_42_25 ?y_41_26) c_Boolean_true) (<= ?x_42_25 ?y_41_26))))) +(assert (forall ((?x_44_27 Int)) (forall ((?y_43_28 Int)) (= (= (gt_int_bool ?x_44_27 ?y_43_28) c_Boolean_true) (> ?x_44_27 ?y_43_28))))) +(assert (forall ((?x_46_29 Int)) (forall ((?y_45_30 Int)) (= (= (ge_int_bool ?x_46_29 ?y_45_30) c_Boolean_true) (>= ?x_46_29 ?y_45_30))))) +(assert (forall ((?x_48_31 Int)) (forall ((?y_47_32 Int)) (= (= (eq_int_bool ?x_48_31 ?y_47_32) c_Boolean_true) (= ?x_48_31 ?y_47_32))))) +(assert (forall ((?x_50_33 Int)) (forall ((?y_49_34 Int)) (= (= (neq_int_bool ?x_50_33 ?y_49_34) c_Boolean_true) (not (= ?x_50_33 ?y_49_34)))))) +(declare-fun add_real (Real Real) Real) +(declare-fun sub_real (Real Real) Real) +(declare-fun mul_real (Real Real) Real) +(declare-fun div_real (Real Real) Real) +(declare-fun pow_real (Real Real) Real) +(declare-fun neg_real (Real) Real) +(declare-fun abs_real (Real) Real) +(declare-fun sqrt_real (Real) Real) +(declare-fun real_of_int (Int) Real) +(declare-fun int_of_real (Real) Int) +(declare-fun lt_real (Real Real) Bool) +(declare-fun le_real (Real Real) Bool) +(declare-fun gt_real (Real Real) Bool) +(declare-fun ge_real (Real Real) Bool) +(declare-fun eq_real (Real Real) Bool) +(declare-fun neq_real (Real Real) Bool) +(declare-fun eq_bool (c_Boolean c_Boolean) Bool) +(declare-fun neq_bool (c_Boolean c_Boolean) Bool) +(declare-fun eq_unit (c_ssorted c_ssorted) Bool) +(declare-fun neq_unit (c_ssorted c_ssorted) Bool) +(declare-fun smtlib__ite (c_Boolean c_ssorted c_ssorted) c_unique) +(assert (forall ((?t_1_76_35 c_type)) (forall ((?x_75_36 c_unique)) (forall ((?y_74_37 c_unique)) (= (smtlib__ite c_Boolean_true (c_sort ?t_1_76_35 ?x_75_36) (c_sort ?t_1_76_35 ?y_74_37)) ?x_75_36))))) +(assert (forall ((?t_2_79_38 c_type)) (forall ((?x_78_39 c_unique)) (forall ((?y_77_40 c_unique)) (= (smtlib__ite c_Boolean_false (c_sort ?t_2_79_38 ?x_78_39) (c_sort ?t_2_79_38 ?y_77_40)) ?y_77_40))))) +(declare-fun bw_compl (Int) Int) +(declare-fun bw_and (Int Int) Int) +(declare-fun bw_xor (Int Int) Int) +(declare-fun bw_or (Int Int) Int) +(declare-fun lsl (Int Int) Int) +(declare-fun lsr (Int Int) Int) +(declare-fun non_int (Int) Int) +(declare-fun type_pointer (c_type) c_type) +(declare-fun type_addr (c_type) c_type) +(declare-fun type_alloc_table () c_type) +(declare-fun block_length (c_ssorted c_ssorted) Int) +(declare-fun base_addr (c_ssorted) c_unique) +(declare-fun offset (c_ssorted) Int) +(declare-fun shift (c_ssorted Int) c_unique) +(declare-fun sub_pointer (c_ssorted c_ssorted) Int) +(declare-fun lt_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_3_88_41 c_type)) (forall ((?p1_87_42 c_unique)) (forall ((?p2_86_43 c_unique)) (let ((?v_0 (type_pointer ?t_3_88_41))) (let ((?v_1 (c_sort ?v_0 ?p1_87_42)) (?v_2 (c_sort ?v_0 ?p2_86_43))) (= (lt_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (< (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun le_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_4_91_44 c_type)) (forall ((?p1_90_45 c_unique)) (forall ((?p2_89_46 c_unique)) (let ((?v_0 (type_pointer ?t_4_91_44))) (let ((?v_1 (c_sort ?v_0 ?p1_90_45)) (?v_2 (c_sort ?v_0 ?p2_89_46))) (= (le_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (<= (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun gt_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_5_94_47 c_type)) (forall ((?p1_93_48 c_unique)) (forall ((?p2_92_49 c_unique)) (let ((?v_0 (type_pointer ?t_5_94_47))) (let ((?v_1 (c_sort ?v_0 ?p1_93_48)) (?v_2 (c_sort ?v_0 ?p2_92_49))) (= (gt_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (> (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun ge_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_6_97_50 c_type)) (forall ((?p1_96_51 c_unique)) (forall ((?p2_95_52 c_unique)) (let ((?v_0 (type_pointer ?t_6_97_50))) (let ((?v_1 (c_sort ?v_0 ?p1_96_51)) (?v_2 (c_sort ?v_0 ?p2_95_52))) (= (ge_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (>= (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun valid (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_7_104_53 c_type)) (forall ((?a_103_54 c_unique)) (forall ((?p_102_55 c_unique)) (let ((?v_2 (c_sort type_alloc_table ?a_103_54)) (?v_0 (c_sort (type_pointer ?t_7_104_53) ?p_102_55))) (let ((?v_1 (offset ?v_0))) (= (valid ?v_2 ?v_0) (and (<= 0 ?v_1) (< ?v_1 (block_length ?v_2 ?v_0)))))))))) +(declare-fun valid_index (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_8_108_56 c_type)) (forall ((?a_107_57 c_unique)) (forall ((?p_106_58 c_unique)) (forall ((?i_105_59 Int)) (let ((?v_2 (c_sort type_alloc_table ?a_107_57)) (?v_0 (c_sort (type_pointer ?t_8_108_56) ?p_106_58))) (let ((?v_1 (+ (offset ?v_0) ?i_105_59))) (= (valid_index ?v_2 ?v_0 ?i_105_59) (and (<= 0 ?v_1) (< ?v_1 (block_length ?v_2 ?v_0))))))))))) +(declare-fun valid_range (c_ssorted c_ssorted Int Int) Bool) +(assert (forall ((?t_9_113_60 c_type)) (forall ((?a_112_61 c_unique)) (forall ((?p_111_62 c_unique)) (forall ((?i_110_63 Int)) (forall ((?j_109_64 Int)) (let ((?v_2 (c_sort type_alloc_table ?a_112_61)) (?v_0 (c_sort (type_pointer ?t_9_113_60) ?p_111_62))) (let ((?v_1 (offset ?v_0))) (= (valid_range ?v_2 ?v_0 ?i_110_63 ?j_109_64) (and (<= 0 (+ ?v_1 ?i_110_63)) (< (+ ?v_1 ?j_109_64) (block_length ?v_2 ?v_0)))))))))))) +(assert (forall ((?t_10_116_65 c_type)) (forall ((?p_115_66 c_unique)) (forall ((?i_114_67 Int)) (let ((?v_0 (type_pointer ?t_10_116_65))) (let ((?v_1 (c_sort ?v_0 ?p_115_66))) (= (offset (c_sort ?v_0 (shift ?v_1 ?i_114_67))) (+ (offset ?v_1) ?i_114_67)))))))) +(assert (forall ((?t_11_118_68 c_type)) (forall ((?p_117_69 c_unique)) (= (shift (c_sort (type_pointer ?t_11_118_68) ?p_117_69) 0) ?p_117_69)))) +(assert (forall ((?t_12_122_70 c_type)) (forall ((?p_121_71 c_unique)) (forall ((?i_120_72 Int)) (forall ((?j_119_73 Int)) (let ((?v_0 (type_pointer ?t_12_122_70))) (let ((?v_1 (c_sort ?v_0 ?p_121_71))) (= (shift (c_sort ?v_0 (shift ?v_1 ?i_120_72)) ?j_119_73) (shift ?v_1 (+ ?i_120_72 ?j_119_73)))))))))) +(assert (forall ((?t_13_125_74 c_type)) (forall ((?p_124_75 c_unique)) (forall ((?i_123_76 Int)) (let ((?v_0 (type_pointer ?t_13_125_74))) (let ((?v_1 (c_sort ?v_0 ?p_124_75))) (= (base_addr (c_sort ?v_0 (shift ?v_1 ?i_123_76))) (base_addr ?v_1)))))))) +(assert (forall ((?t_14_129_77 c_type)) (forall ((?a_128_78 c_unique)) (forall ((?p_127_79 c_unique)) (forall ((?i_126_80 Int)) (let ((?v_1 (c_sort type_alloc_table ?a_128_78)) (?v_0 (type_pointer ?t_14_129_77))) (let ((?v_2 (c_sort ?v_0 ?p_127_79))) (= (block_length ?v_1 (c_sort ?v_0 (shift ?v_2 ?i_126_80))) (block_length ?v_1 ?v_2))))))))) +(assert (forall ((?t_15_133_81 c_type)) (forall ((?a_132_82 c_unique)) (forall ((?p1_131_83 c_unique)) (forall ((?p2_130_84 c_unique)) (let ((?v_0 (type_pointer ?t_15_133_81))) (let ((?v_1 (c_sort ?v_0 ?p1_131_83)) (?v_3 (c_sort ?v_0 ?p2_130_84)) (?v_2 (c_sort type_alloc_table ?a_132_82))) (=> (= (base_addr ?v_1) (base_addr ?v_3)) (= (block_length ?v_2 ?v_1) (block_length ?v_2 ?v_3)))))))))) +(assert (forall ((?t_16_136_85 c_type)) (forall ((?p1_135_86 c_unique)) (forall ((?p2_134_87 c_unique)) (let ((?v_0 (type_pointer ?t_16_136_85))) (let ((?v_1 (c_sort ?v_0 ?p1_135_86)) (?v_2 (c_sort ?v_0 ?p2_134_87))) (=> (and (= (base_addr ?v_1) (base_addr ?v_2)) (= (offset ?v_1) (offset ?v_2))) (= ?p1_135_86 ?p2_134_87)))))))) +(assert (forall ((?t_17_139_88 c_type)) (forall ((?p1_138_89 c_unique)) (forall ((?p2_137_90 c_unique)) (let ((?v_0 (type_pointer ?t_17_139_88))) (let ((?v_1 (c_sort ?v_0 ?p1_138_89)) (?v_2 (c_sort ?v_0 ?p2_137_90))) (=> (= ?p1_138_89 ?p2_137_90) (and (= (base_addr ?v_1) (base_addr ?v_2)) (= (offset ?v_1) (offset ?v_2)))))))))) +(assert (forall ((?t_18_144_91 c_type)) (forall ((?p1_143_92 c_unique)) (forall ((?p2_142_93 c_unique)) (forall ((?i_141_94 Int)) (forall ((?j_140_95 Int)) (let ((?v_0 (type_pointer ?t_18_144_91))) (let ((?v_1 (c_sort ?v_0 ?p1_143_92)) (?v_2 (c_sort ?v_0 ?p2_142_93))) (=> (not (= (base_addr ?v_1) (base_addr ?v_2))) (not (= (shift ?v_1 ?i_141_94) (shift ?v_2 ?j_140_95)))))))))))) +(assert (forall ((?t_19_149_96 c_type)) (forall ((?p1_148_97 c_unique)) (forall ((?p2_147_98 c_unique)) (forall ((?i_146_99 Int)) (forall ((?j_145_100 Int)) (let ((?v_0 (type_pointer ?t_19_149_96))) (let ((?v_1 (c_sort ?v_0 ?p1_148_97)) (?v_2 (c_sort ?v_0 ?p2_147_98))) (=> (not (= (+ (offset ?v_1) ?i_146_99) (+ (offset ?v_2) ?j_145_100))) (not (= (shift ?v_1 ?i_146_99) (shift ?v_2 ?j_145_100)))))))))))) +(assert (forall ((?t_20_154_101 c_type)) (forall ((?p1_153_102 c_unique)) (forall ((?p2_152_103 c_unique)) (forall ((?i_151_104 Int)) (forall ((?j_150_105 Int)) (let ((?v_0 (type_pointer ?t_20_154_101))) (let ((?v_1 (c_sort ?v_0 ?p1_153_102)) (?v_2 (c_sort ?v_0 ?p2_152_103))) (=> (= (base_addr ?v_1) (base_addr ?v_2)) (=> (= (+ (offset ?v_1) ?i_151_104) (+ (offset ?v_2) ?j_150_105)) (= (shift ?v_1 ?i_151_104) (shift ?v_2 ?j_150_105)))))))))))) +(assert (forall ((?t_21_158_106 c_type)) (forall ((?a_157_107 c_unique)) (forall ((?p_156_108 c_unique)) (forall ((?i_155_109 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_157_107)) (?v_1 (type_pointer ?t_21_158_106))) (let ((?v_2 (c_sort ?v_1 ?p_156_108))) (=> (valid_index ?v_0 ?v_2 ?i_155_109) (valid ?v_0 (c_sort ?v_1 (shift ?v_2 ?i_155_109))))))))))) +(assert (forall ((?t_22_164_110 c_type)) (forall ((?a_163_111 c_unique)) (forall ((?p_162_112 c_unique)) (forall ((?i_161_113 Int)) (forall ((?j_160_114 Int)) (forall ((?k_159_115 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_163_111)) (?v_1 (type_pointer ?t_22_164_110))) (let ((?v_2 (c_sort ?v_1 ?p_162_112))) (=> (valid_range ?v_0 ?v_2 ?i_161_113 ?j_160_114) (=> (and (<= ?i_161_113 ?k_159_115) (<= ?k_159_115 ?j_160_114)) (valid ?v_0 (c_sort ?v_1 (shift ?v_2 ?k_159_115)))))))))))))) +(assert (forall ((?t_23_169_116 c_type)) (forall ((?a_168_117 c_unique)) (forall ((?p_167_118 c_unique)) (forall ((?i_166_119 Int)) (forall ((?j_165_120 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_168_117)) (?v_1 (c_sort (type_pointer ?t_23_169_116) ?p_167_118))) (=> (valid_range ?v_0 ?v_1 ?i_166_119 ?j_165_120) (=> (and (<= ?i_166_119 0) (<= 0 ?j_165_120)) (valid ?v_0 ?v_1)))))))))) +(assert (forall ((?t_24_175_121 c_type)) (forall ((?a_174_122 c_unique)) (forall ((?p_173_123 c_unique)) (forall ((?i_172_124 Int)) (forall ((?j_171_125 Int)) (forall ((?k_170_126 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_174_122)) (?v_1 (c_sort (type_pointer ?t_24_175_121) ?p_173_123))) (=> (valid_range ?v_0 ?v_1 ?i_172_124 ?j_171_125) (=> (and (<= ?i_172_124 ?k_170_126) (<= ?k_170_126 ?j_171_125)) (valid_index ?v_0 ?v_1 ?k_170_126))))))))))) +(assert (forall ((?t_25_178_127 c_type)) (forall ((?p1_177_128 c_unique)) (forall ((?p2_176_129 c_unique)) (let ((?v_0 (type_pointer ?t_25_178_127))) (let ((?v_1 (c_sort ?v_0 ?p1_177_128)) (?v_2 (c_sort ?v_0 ?p2_176_129))) (=> (= (base_addr ?v_1) (base_addr ?v_2)) (= (sub_pointer ?v_1 ?v_2) (- (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun type_memory (c_type c_type) c_type) +(declare-fun acc (c_ssorted c_ssorted) c_unique) +(declare-fun upd (c_ssorted c_ssorted c_ssorted) c_unique) +(assert (forall ((?t_27_212_130 c_type)) (forall ((?t_26_211_131 c_type)) (forall ((?m_210_132 c_unique)) (forall ((?p_209_133 c_unique)) (forall ((?a_208_134 c_unique)) (let ((?v_0 (type_memory ?t_26_211_131 ?t_27_212_130)) (?v_1 (c_sort (type_pointer ?t_27_212_130) ?p_209_133))) (= (acc (c_sort ?v_0 (upd (c_sort ?v_0 ?m_210_132) ?v_1 (c_sort ?t_26_211_131 ?a_208_134))) ?v_1) ?a_208_134)))))))) +(assert (forall ((?t_29_218_135 c_type)) (forall ((?t_28_217_136 c_type)) (forall ((?m_216_137 c_unique)) (forall ((?p1_215_138 c_unique)) (forall ((?p2_214_139 c_unique)) (forall ((?a_213_140 c_unique)) (let ((?v_0 (type_memory ?t_28_217_136 ?t_29_218_135))) (let ((?v_2 (c_sort ?v_0 ?m_216_137)) (?v_1 (type_pointer ?t_29_218_135))) (let ((?v_3 (c_sort ?v_1 ?p2_214_139))) (=> (not (= ?p1_215_138 ?p2_214_139)) (= (acc (c_sort ?v_0 (upd ?v_2 (c_sort ?v_1 ?p1_215_138) (c_sort ?t_28_217_136 ?a_213_140))) ?v_3) (acc ?v_2 ?v_3))))))))))))) +(assert (not (= c_Boolean_false c_Boolean_true))) +(declare-fun type_pset (c_type) c_type) +(declare-fun pset_empty () c_unique) +(declare-fun pset_singleton (c_ssorted) c_unique) +(declare-fun pset_star (c_ssorted c_ssorted) c_unique) +(declare-fun pset_all (c_ssorted) c_unique) +(declare-fun pset_range (c_ssorted Int Int) c_unique) +(declare-fun pset_range_left (c_ssorted Int) c_unique) +(declare-fun pset_range_right (c_ssorted Int) c_unique) +(declare-fun pset_acc_all (c_ssorted c_ssorted) c_unique) +(declare-fun pset_acc_range (c_ssorted c_ssorted Int Int) c_unique) +(declare-fun pset_acc_range_left (c_ssorted c_ssorted Int) c_unique) +(declare-fun pset_acc_range_right (c_ssorted c_ssorted Int) c_unique) +(declare-fun pset_union (c_ssorted c_ssorted) c_unique) +(declare-fun not_in_pset (c_ssorted c_ssorted) Bool) +(declare-fun not_assigns (c_ssorted c_ssorted c_ssorted c_ssorted) Bool) +(assert (forall ((?t_31_225_141 c_type)) (forall ((?t_30_224_142 c_type)) (forall ((?a_223_143 c_unique)) (forall ((?m1_222_144 c_unique)) (forall ((?m2_221_145 c_unique)) (forall ((?l_220_146 c_unique)) (let ((?v_0 (type_memory ?t_30_224_142 ?t_31_225_141))) (= (not_assigns (c_sort type_alloc_table ?a_223_143) (c_sort ?v_0 ?m1_222_144) (c_sort ?v_0 ?m2_221_145) (c_sort (type_pset ?t_31_225_141) ?l_220_146)) (forall ((?p_219_147 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_31_225_141) ?p_219_147))) (=> (valid (c_sort type_alloc_table ?a_223_143) ?v_1) (=> (not_in_pset ?v_1 (c_sort (type_pset ?t_31_225_141) ?l_220_146)) (= (acc (c_sort ?v_0 ?m2_221_145) ?v_1) (acc (c_sort ?v_0 ?m1_222_144) ?v_1))))))))))))))) +(assert (forall ((?t_32_227_148 c_type)) (forall ((?p_226_149 c_unique)) (not_in_pset (c_sort (type_pointer ?t_32_227_148) ?p_226_149) (c_sort (type_pset ?t_32_227_148) pset_empty))))) +(assert (forall ((?t_33_230_150 c_type)) (forall ((?p1_229_151 c_unique)) (forall ((?p2_228_152 c_unique)) (let ((?v_0 (type_pointer ?t_33_230_150))) (=> (not (= ?p1_229_151 ?p2_228_152)) (not_in_pset (c_sort ?v_0 ?p1_229_151) (c_sort (type_pset ?t_33_230_150) (pset_singleton (c_sort ?v_0 ?p2_228_152)))))))))) +(assert (forall ((?t_34_233_153 c_type)) (forall ((?p1_232_154 c_unique)) (forall ((?p2_231_155 c_unique)) (let ((?v_0 (type_pointer ?t_34_233_153))) (=> (not_in_pset (c_sort ?v_0 ?p1_232_154) (c_sort (type_pset ?t_34_233_153) (pset_singleton (c_sort ?v_0 ?p2_231_155)))) (not (= ?p1_232_154 ?p2_231_155)))))))) +(assert (forall ((?t_35_235_156 c_type)) (forall ((?p_234_157 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_35_235_156) ?p_234_157))) (not (not_in_pset ?v_0 (c_sort (type_pset ?t_35_235_156) (pset_singleton ?v_0)))))))) +(assert (forall ((?t_36_239_158 c_type)) (forall ((?l1_238_159 c_unique)) (forall ((?l2_237_160 c_unique)) (forall ((?p_236_161 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_36_239_158) ?p_236_161)) (?v_1 (type_pset ?t_36_239_158))) (let ((?v_2 (c_sort ?v_1 ?l1_238_159)) (?v_3 (c_sort ?v_1 ?l2_237_160))) (=> (and (not_in_pset ?v_0 ?v_2) (not_in_pset ?v_0 ?v_3)) (not_in_pset ?v_0 (c_sort ?v_1 (pset_union ?v_2 ?v_3))))))))))) +(assert (forall ((?t_37_243_162 c_type)) (forall ((?l1_242_163 c_unique)) (forall ((?l2_241_164 c_unique)) (forall ((?p_240_165 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_37_243_162) ?p_240_165)) (?v_0 (type_pset ?t_37_243_162))) (let ((?v_2 (c_sort ?v_0 ?l1_242_163))) (=> (not_in_pset ?v_1 (c_sort ?v_0 (pset_union ?v_2 (c_sort ?v_0 ?l2_241_164)))) (not_in_pset ?v_1 ?v_2))))))))) +(assert (forall ((?t_38_247_166 c_type)) (forall ((?l1_246_167 c_unique)) (forall ((?l2_245_168 c_unique)) (forall ((?p_244_169 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_38_247_166) ?p_244_169)) (?v_0 (type_pset ?t_38_247_166))) (let ((?v_2 (c_sort ?v_0 ?l2_245_168))) (=> (not_in_pset ?v_1 (c_sort ?v_0 (pset_union (c_sort ?v_0 ?l1_246_167) ?v_2))) (not_in_pset ?v_1 ?v_2))))))))) +(assert (forall ((?t_40_253_170 c_type)) (forall ((?t_39_252_171 c_type)) (forall ((?l_251_172 c_unique)) (forall ((?m_250_173 c_unique)) (forall ((?p_249_174 c_unique)) (let ((?v_0 (type_pointer ?t_40_253_170))) (=> (forall ((?p1_248_175 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_39_252_171) ?p1_248_175))) (=> (= ?p_249_174 (acc (c_sort (type_memory ?v_0 ?t_39_252_171) ?m_250_173) ?v_1)) (not_in_pset ?v_1 (c_sort (type_pset ?t_39_252_171) ?l_251_172))))) (not_in_pset (c_sort ?v_0 ?p_249_174) (c_sort (type_pset ?t_40_253_170) (pset_star (c_sort (type_pset ?t_39_252_171) ?l_251_172) (c_sort (type_memory ?v_0 ?t_39_252_171) ?m_250_173)))))))))))) +(assert (forall ((?t_42_259_176 c_type)) (forall ((?t_41_258_177 c_type)) (forall ((?l_257_178 c_unique)) (forall ((?m_256_179 c_unique)) (forall ((?p_255_180 c_unique)) (let ((?v_0 (type_pointer ?t_42_259_176))) (=> (not_in_pset (c_sort ?v_0 ?p_255_180) (c_sort (type_pset ?t_42_259_176) (pset_star (c_sort (type_pset ?t_41_258_177) ?l_257_178) (c_sort (type_memory ?v_0 ?t_41_258_177) ?m_256_179)))) (forall ((?p1_254_181 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_41_258_177) ?p1_254_181))) (=> (= ?p_255_180 (acc (c_sort (type_memory ?v_0 ?t_41_258_177) ?m_256_179) ?v_1)) (not_in_pset ?v_1 (c_sort (type_pset ?t_41_258_177) ?l_257_178))))))))))))) +(assert (forall ((?t_43_263_182 c_type)) (forall ((?p_262_183 c_unique)) (forall ((?l_261_184 c_unique)) (let ((?v_0 (type_pset ?t_43_263_182))) (=> (forall ((?p1_260_185 c_unique)) (let ((?v_1 (type_pointer ?t_43_263_182))) (let ((?v_2 (c_sort ?v_1 ?p1_260_185))) (=> (not (not_in_pset ?v_2 (c_sort ?v_0 ?l_261_184))) (not (= (base_addr (c_sort ?v_1 ?p_262_183)) (base_addr ?v_2))))))) (not_in_pset (c_sort (type_pointer ?t_43_263_182) ?p_262_183) (c_sort ?v_0 (pset_all (c_sort ?v_0 ?l_261_184)))))))))) +(assert (forall ((?t_44_267_186 c_type)) (forall ((?p_266_187 c_unique)) (forall ((?l_265_188 c_unique)) (let ((?v_0 (type_pset ?t_44_267_186))) (=> (not_in_pset (c_sort (type_pointer ?t_44_267_186) ?p_266_187) (c_sort ?v_0 (pset_all (c_sort ?v_0 ?l_265_188)))) (forall ((?p1_264_189 c_unique)) (let ((?v_1 (type_pointer ?t_44_267_186))) (let ((?v_2 (c_sort ?v_1 ?p1_264_189))) (=> (not (not_in_pset ?v_2 (c_sort ?v_0 ?l_265_188))) (not (= (base_addr (c_sort ?v_1 ?p_266_187)) (base_addr ?v_2))))))))))))) +(assert (forall ((?t_45_274_190 c_type)) (forall ((?p_273_191 c_unique)) (forall ((?l_272_192 c_unique)) (forall ((?a_271_193 Int)) (forall ((?b_270_194 Int)) (let ((?v_0 (type_pset ?t_45_274_190))) (=> (forall ((?p1_269_195 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_45_274_190) ?p1_269_195) (c_sort ?v_0 ?l_272_192)) (forall ((?i_268_196 Int)) (=> (and (<= ?a_271_193 ?i_268_196) (<= ?i_268_196 ?b_270_194)) (not (= ?p_273_191 (shift (c_sort (type_pointer ?t_45_274_190) ?p1_269_195) ?i_268_196))))))) (not_in_pset (c_sort (type_pointer ?t_45_274_190) ?p_273_191) (c_sort ?v_0 (pset_range (c_sort ?v_0 ?l_272_192) ?a_271_193 ?b_270_194))))))))))) +(assert (forall ((?t_46_281_197 c_type)) (forall ((?p_280_198 c_unique)) (forall ((?l_279_199 c_unique)) (forall ((?a_278_200 Int)) (forall ((?b_277_201 Int)) (let ((?v_0 (type_pset ?t_46_281_197))) (=> (not_in_pset (c_sort (type_pointer ?t_46_281_197) ?p_280_198) (c_sort ?v_0 (pset_range (c_sort ?v_0 ?l_279_199) ?a_278_200 ?b_277_201))) (forall ((?p1_276_202 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_46_281_197) ?p1_276_202) (c_sort ?v_0 ?l_279_199))) (forall ((?i_275_203 Int)) (=> (and (<= ?a_278_200 ?i_275_203) (<= ?i_275_203 ?b_277_201)) (not (= (shift (c_sort (type_pointer ?t_46_281_197) ?p1_276_202) ?i_275_203) ?p_280_198)))))))))))))) +(assert (forall ((?t_47_287_204 c_type)) (forall ((?p_286_205 c_unique)) (forall ((?l_285_206 c_unique)) (forall ((?a_284_207 Int)) (let ((?v_0 (type_pset ?t_47_287_204))) (=> (forall ((?p1_283_208 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_47_287_204) ?p1_283_208) (c_sort ?v_0 ?l_285_206)) (forall ((?i_282_209 Int)) (=> (<= ?i_282_209 ?a_284_207) (not (= ?p_286_205 (shift (c_sort (type_pointer ?t_47_287_204) ?p1_283_208) ?i_282_209))))))) (not_in_pset (c_sort (type_pointer ?t_47_287_204) ?p_286_205) (c_sort ?v_0 (pset_range_left (c_sort ?v_0 ?l_285_206) ?a_284_207)))))))))) +(assert (forall ((?t_48_293_210 c_type)) (forall ((?p_292_211 c_unique)) (forall ((?l_291_212 c_unique)) (forall ((?a_290_213 Int)) (let ((?v_0 (type_pset ?t_48_293_210))) (=> (not_in_pset (c_sort (type_pointer ?t_48_293_210) ?p_292_211) (c_sort ?v_0 (pset_range_left (c_sort ?v_0 ?l_291_212) ?a_290_213))) (forall ((?p1_289_214 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_48_293_210) ?p1_289_214) (c_sort ?v_0 ?l_291_212))) (forall ((?i_288_215 Int)) (=> (<= ?i_288_215 ?a_290_213) (not (= (shift (c_sort (type_pointer ?t_48_293_210) ?p1_289_214) ?i_288_215) ?p_292_211))))))))))))) +(assert (forall ((?t_49_299_216 c_type)) (forall ((?p_298_217 c_unique)) (forall ((?l_297_218 c_unique)) (forall ((?a_296_219 Int)) (let ((?v_0 (type_pset ?t_49_299_216))) (=> (forall ((?p1_295_220 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_49_299_216) ?p1_295_220) (c_sort ?v_0 ?l_297_218)) (forall ((?i_294_221 Int)) (=> (<= ?a_296_219 ?i_294_221) (not (= ?p_298_217 (shift (c_sort (type_pointer ?t_49_299_216) ?p1_295_220) ?i_294_221))))))) (not_in_pset (c_sort (type_pointer ?t_49_299_216) ?p_298_217) (c_sort ?v_0 (pset_range_right (c_sort ?v_0 ?l_297_218) ?a_296_219)))))))))) +(assert (forall ((?t_50_305_222 c_type)) (forall ((?p_304_223 c_unique)) (forall ((?l_303_224 c_unique)) (forall ((?a_302_225 Int)) (let ((?v_0 (type_pset ?t_50_305_222))) (=> (not_in_pset (c_sort (type_pointer ?t_50_305_222) ?p_304_223) (c_sort ?v_0 (pset_range_right (c_sort ?v_0 ?l_303_224) ?a_302_225))) (forall ((?p1_301_226 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_50_305_222) ?p1_301_226) (c_sort ?v_0 ?l_303_224))) (forall ((?i_300_227 Int)) (=> (<= ?a_302_225 ?i_300_227) (not (= (shift (c_sort (type_pointer ?t_50_305_222) ?p1_301_226) ?i_300_227) ?p_304_223))))))))))))) +(assert (forall ((?t_52_312_228 c_type)) (forall ((?t_51_311_229 c_type)) (forall ((?p_310_230 c_unique)) (forall ((?l_309_231 c_unique)) (forall ((?m_308_232 c_unique)) (let ((?v_0 (type_pointer ?t_51_311_229))) (=> (forall ((?p1_307_233 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_52_312_228) ?p1_307_233) (c_sort (type_pset ?t_52_312_228) ?l_309_231))) (forall ((?i_306_234 Int)) (let ((?v_1 (type_pointer ?t_52_312_228))) (not (= ?p_310_230 (acc (c_sort (type_memory ?v_0 ?t_52_312_228) ?m_308_232) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_307_233) ?i_306_234))))))))) (not_in_pset (c_sort ?v_0 ?p_310_230) (c_sort (type_pset ?t_51_311_229) (pset_acc_all (c_sort (type_pset ?t_52_312_228) ?l_309_231) (c_sort (type_memory ?v_0 ?t_52_312_228) ?m_308_232)))))))))))) +(assert (forall ((?t_54_319_235 c_type)) (forall ((?t_53_318_236 c_type)) (forall ((?p_317_237 c_unique)) (forall ((?l_316_238 c_unique)) (forall ((?m_315_239 c_unique)) (let ((?v_0 (type_pointer ?t_53_318_236))) (=> (not_in_pset (c_sort ?v_0 ?p_317_237) (c_sort (type_pset ?t_53_318_236) (pset_acc_all (c_sort (type_pset ?t_54_319_235) ?l_316_238) (c_sort (type_memory ?v_0 ?t_54_319_235) ?m_315_239)))) (forall ((?p1_314_240 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_54_319_235) ?p1_314_240) (c_sort (type_pset ?t_54_319_235) ?l_316_238))) (forall ((?i_313_241 Int)) (let ((?v_1 (type_pointer ?t_54_319_235))) (not (= (acc (c_sort (type_memory ?v_0 ?t_54_319_235) ?m_315_239) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_314_240) ?i_313_241))) ?p_317_237)))))))))))))) +(assert (forall ((?t_56_328_242 c_type)) (forall ((?t_55_327_243 c_type)) (forall ((?p_326_244 c_unique)) (forall ((?l_325_245 c_unique)) (forall ((?m_324_246 c_unique)) (forall ((?a_323_247 Int)) (forall ((?b_322_248 Int)) (let ((?v_0 (type_pointer ?t_55_327_243))) (=> (forall ((?p1_321_249 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_56_328_242) ?p1_321_249) (c_sort (type_pset ?t_56_328_242) ?l_325_245))) (forall ((?i_320_250 Int)) (let ((?v_1 (type_pointer ?t_56_328_242))) (=> (and (<= ?a_323_247 ?i_320_250) (<= ?i_320_250 ?b_322_248)) (not (= ?p_326_244 (acc (c_sort (type_memory ?v_0 ?t_56_328_242) ?m_324_246) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_321_249) ?i_320_250)))))))))) (not_in_pset (c_sort ?v_0 ?p_326_244) (c_sort (type_pset ?t_55_327_243) (pset_acc_range (c_sort (type_pset ?t_56_328_242) ?l_325_245) (c_sort (type_memory ?v_0 ?t_56_328_242) ?m_324_246) ?a_323_247 ?b_322_248))))))))))))) +(assert (forall ((?t_58_337_251 c_type)) (forall ((?t_57_336_252 c_type)) (forall ((?p_335_253 c_unique)) (forall ((?l_334_254 c_unique)) (forall ((?m_333_255 c_unique)) (forall ((?a_332_256 Int)) (forall ((?b_331_257 Int)) (let ((?v_0 (type_pointer ?t_57_336_252))) (=> (not_in_pset (c_sort ?v_0 ?p_335_253) (c_sort (type_pset ?t_57_336_252) (pset_acc_range (c_sort (type_pset ?t_58_337_251) ?l_334_254) (c_sort (type_memory ?v_0 ?t_58_337_251) ?m_333_255) ?a_332_256 ?b_331_257))) (forall ((?p1_330_258 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_58_337_251) ?p1_330_258) (c_sort (type_pset ?t_58_337_251) ?l_334_254))) (forall ((?i_329_259 Int)) (let ((?v_1 (type_pointer ?t_58_337_251))) (=> (and (<= ?a_332_256 ?i_329_259) (<= ?i_329_259 ?b_331_257)) (not (= (acc (c_sort (type_memory ?v_0 ?t_58_337_251) ?m_333_255) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_330_258) ?i_329_259))) ?p_335_253))))))))))))))))) +(assert (forall ((?t_60_345_260 c_type)) (forall ((?t_59_344_261 c_type)) (forall ((?p_343_262 c_unique)) (forall ((?l_342_263 c_unique)) (forall ((?m_341_264 c_unique)) (forall ((?a_340_265 Int)) (let ((?v_0 (type_pointer ?t_59_344_261))) (=> (forall ((?p1_339_266 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_60_345_260) ?p1_339_266) (c_sort (type_pset ?t_60_345_260) ?l_342_263))) (forall ((?i_338_267 Int)) (let ((?v_1 (type_pointer ?t_60_345_260))) (=> (<= ?i_338_267 ?a_340_265) (not (= ?p_343_262 (acc (c_sort (type_memory ?v_0 ?t_60_345_260) ?m_341_264) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_339_266) ?i_338_267)))))))))) (not_in_pset (c_sort ?v_0 ?p_343_262) (c_sort (type_pset ?t_59_344_261) (pset_acc_range_left (c_sort (type_pset ?t_60_345_260) ?l_342_263) (c_sort (type_memory ?v_0 ?t_60_345_260) ?m_341_264) ?a_340_265)))))))))))) +(assert (forall ((?t_62_353_268 c_type)) (forall ((?t_61_352_269 c_type)) (forall ((?p_351_270 c_unique)) (forall ((?l_350_271 c_unique)) (forall ((?m_349_272 c_unique)) (forall ((?a_348_273 Int)) (let ((?v_0 (type_pointer ?t_61_352_269))) (=> (not_in_pset (c_sort ?v_0 ?p_351_270) (c_sort (type_pset ?t_61_352_269) (pset_acc_range_left (c_sort (type_pset ?t_62_353_268) ?l_350_271) (c_sort (type_memory ?v_0 ?t_62_353_268) ?m_349_272) ?a_348_273))) (forall ((?p1_347_274 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_62_353_268) ?p1_347_274) (c_sort (type_pset ?t_62_353_268) ?l_350_271))) (forall ((?i_346_275 Int)) (let ((?v_1 (type_pointer ?t_62_353_268))) (=> (<= ?i_346_275 ?a_348_273) (not (= (acc (c_sort (type_memory ?v_0 ?t_62_353_268) ?m_349_272) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_347_274) ?i_346_275))) ?p_351_270)))))))))))))))) +(assert (forall ((?t_64_361_276 c_type)) (forall ((?t_63_360_277 c_type)) (forall ((?p_359_278 c_unique)) (forall ((?l_358_279 c_unique)) (forall ((?m_357_280 c_unique)) (forall ((?a_356_281 Int)) (let ((?v_0 (type_pointer ?t_63_360_277))) (=> (forall ((?p1_355_282 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_64_361_276) ?p1_355_282) (c_sort (type_pset ?t_64_361_276) ?l_358_279))) (forall ((?i_354_283 Int)) (let ((?v_1 (type_pointer ?t_64_361_276))) (=> (<= ?a_356_281 ?i_354_283) (not (= ?p_359_278 (acc (c_sort (type_memory ?v_0 ?t_64_361_276) ?m_357_280) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_355_282) ?i_354_283)))))))))) (not_in_pset (c_sort ?v_0 ?p_359_278) (c_sort (type_pset ?t_63_360_277) (pset_acc_range_right (c_sort (type_pset ?t_64_361_276) ?l_358_279) (c_sort (type_memory ?v_0 ?t_64_361_276) ?m_357_280) ?a_356_281)))))))))))) +(assert (forall ((?t_66_369_284 c_type)) (forall ((?t_65_368_285 c_type)) (forall ((?p_367_286 c_unique)) (forall ((?l_366_287 c_unique)) (forall ((?m_365_288 c_unique)) (forall ((?a_364_289 Int)) (let ((?v_0 (type_pointer ?t_65_368_285))) (=> (not_in_pset (c_sort ?v_0 ?p_367_286) (c_sort (type_pset ?t_65_368_285) (pset_acc_range_right (c_sort (type_pset ?t_66_369_284) ?l_366_287) (c_sort (type_memory ?v_0 ?t_66_369_284) ?m_365_288) ?a_364_289))) (forall ((?p1_363_290 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_66_369_284) ?p1_363_290) (c_sort (type_pset ?t_66_369_284) ?l_366_287))) (forall ((?i_362_291 Int)) (let ((?v_1 (type_pointer ?t_66_369_284))) (=> (<= ?a_364_289 ?i_362_291) (not (= (acc (c_sort (type_memory ?v_0 ?t_66_369_284) ?m_365_288) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_363_290) ?i_362_291))) ?p_367_286)))))))))))))))) +(assert (forall ((?t_68_376_292 c_type)) (forall ((?t_67_375_293 c_type)) (forall ((?a_374_294 c_unique)) (forall ((?l_373_295 c_unique)) (forall ((?m1_372_296 c_unique)) (forall ((?m2_371_297 c_unique)) (forall ((?m3_370_298 c_unique)) (let ((?v_1 (c_sort type_alloc_table ?a_374_294)) (?v_0 (type_memory ?t_68_376_292 ?t_67_375_293))) (let ((?v_4 (c_sort ?v_0 ?m1_372_296)) (?v_2 (c_sort ?v_0 ?m2_371_297)) (?v_3 (c_sort (type_pset ?t_67_375_293) ?l_373_295)) (?v_5 (c_sort ?v_0 ?m3_370_298))) (=> (not_assigns ?v_1 ?v_4 ?v_2 ?v_3) (=> (not_assigns ?v_1 ?v_2 ?v_5 ?v_3) (not_assigns ?v_1 ?v_4 ?v_5 ?v_3))))))))))))) +(assert (forall ((?t_70_381_299 c_type)) (forall ((?t_69_380_300 c_type)) (forall ((?a_379_301 c_unique)) (forall ((?l_378_302 c_unique)) (forall ((?m_377_303 c_unique)) (let ((?v_0 (c_sort (type_memory ?t_70_381_299 ?t_69_380_300) ?m_377_303))) (not_assigns (c_sort type_alloc_table ?a_379_301) ?v_0 ?v_0 (c_sort (type_pset ?t_69_380_300) ?l_378_302))))))))) +(declare-fun valid_acc (c_ssorted) Bool) +(assert (forall ((?t_72_386_304 c_type)) (forall ((?t_71_385_305 c_type)) (forall ((?m1_384_306 c_unique)) (= (valid_acc (c_sort (type_memory (type_pointer ?t_71_385_305) ?t_72_386_304) ?m1_384_306)) (forall ((?p_383_307 c_unique)) (forall ((?a_382_308 c_unique)) (let ((?v_1 (type_pointer ?t_71_385_305)) (?v_0 (c_sort type_alloc_table ?a_382_308)) (?v_2 (c_sort (type_pointer ?t_72_386_304) ?p_383_307))) (=> (valid ?v_0 ?v_2) (valid ?v_0 (c_sort ?v_1 (acc (c_sort (type_memory ?v_1 ?t_72_386_304) ?m1_384_306) ?v_2)))))))))))) +(declare-fun valid_acc_range (c_ssorted Int) Bool) +(assert (forall ((?t_74_392_309 c_type)) (forall ((?t_73_391_310 c_type)) (forall ((?m1_390_311 c_unique)) (forall ((?size_389_312 Int)) (= (valid_acc_range (c_sort (type_memory (type_pointer ?t_73_391_310) ?t_74_392_309) ?m1_390_311) ?size_389_312) (forall ((?p_388_313 c_unique)) (forall ((?a_387_314 c_unique)) (let ((?v_1 (type_pointer ?t_73_391_310)) (?v_0 (c_sort type_alloc_table ?a_387_314)) (?v_2 (c_sort (type_pointer ?t_74_392_309) ?p_388_313))) (=> (valid ?v_0 ?v_2) (valid_range ?v_0 (c_sort ?v_1 (acc (c_sort (type_memory ?v_1 ?t_74_392_309) ?m1_390_311) ?v_2)) 0 (- ?size_389_312 1)))))))))))) +(assert (forall ((?t_76_398_315 c_type)) (forall ((?t_75_397_316 c_type)) (forall ((?m1_396_317 c_unique)) (forall ((?size_395_318 Int)) (forall ((?p_394_319 c_unique)) (forall ((?a_393_320 c_unique)) (let ((?v_1 (type_pointer ?t_75_397_316))) (let ((?v_2 (c_sort (type_memory ?v_1 ?t_76_398_315) ?m1_396_317)) (?v_0 (c_sort type_alloc_table ?a_393_320)) (?v_3 (c_sort (type_pointer ?t_76_398_315) ?p_394_319))) (=> (valid_acc_range ?v_2 ?size_395_318) (=> (valid ?v_0 ?v_3) (valid ?v_0 (c_sort ?v_1 (acc ?v_2 ?v_3)))))))))))))) +(declare-fun separation1 (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_78_404_321 c_type)) (forall ((?t_77_403_322 c_type)) (forall ((?m1_402_323 c_unique)) (forall ((?m2_401_324 c_unique)) (let ((?v_0 (type_memory (type_pointer ?t_77_403_322) ?t_78_404_321))) (= (separation1 (c_sort ?v_0 ?m1_402_323) (c_sort ?v_0 ?m2_401_324)) (forall ((?p_400_325 c_unique)) (forall ((?a_399_326 c_unique)) (let ((?v_1 (type_pointer ?t_77_403_322)) (?v_2 (c_sort (type_pointer ?t_78_404_321) ?p_400_325))) (=> (valid (c_sort type_alloc_table ?a_399_326) ?v_2) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_402_323) ?v_2))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_401_324) ?v_2)))))))))))))))) +(declare-fun separation1_range1 (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_80_412_327 c_type)) (forall ((?t_79_411_328 c_type)) (forall ((?m1_410_329 c_unique)) (forall ((?m2_409_330 c_unique)) (forall ((?size_408_331 Int)) (let ((?v_0 (type_memory (type_pointer ?t_79_411_328) ?t_80_412_327))) (= (separation1_range1 (c_sort ?v_0 ?m1_410_329) (c_sort ?v_0 ?m2_409_330) ?size_408_331) (forall ((?p_407_332 c_unique)) (forall ((?a_406_333 c_unique)) (=> (valid (c_sort type_alloc_table ?a_406_333) (c_sort (type_pointer ?t_80_412_327) ?p_407_332)) (forall ((?i_405_334 Int)) (let ((?v_1 (type_pointer ?t_79_411_328)) (?v_2 (type_pointer ?t_80_412_327))) (let ((?v_3 (c_sort ?v_2 ?p_407_332))) (=> (and (<= 0 ?i_405_334) (< ?i_405_334 ?size_408_331)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_410_329) (c_sort ?v_2 (shift ?v_3 ?i_405_334))))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_409_330) ?v_3)))))))))))))))))))) +(declare-fun separation1_range (c_ssorted Int) Bool) +(assert (forall ((?t_82_420_335 c_type)) (forall ((?t_81_419_336 c_type)) (forall ((?m_418_337 c_unique)) (forall ((?size_417_338 Int)) (= (separation1_range (c_sort (type_memory (type_pointer ?t_81_419_336) ?t_82_420_335) ?m_418_337) ?size_417_338) (forall ((?p_416_339 c_unique)) (forall ((?a_415_340 c_unique)) (=> (valid (c_sort type_alloc_table ?a_415_340) (c_sort (type_pointer ?t_82_420_335) ?p_416_339)) (forall ((?i1_414_341 Int)) (forall ((?i2_413_342 Int)) (let ((?v_0 (type_pointer ?t_81_419_336))) (let ((?v_2 (c_sort (type_memory ?v_0 ?t_82_420_335) ?m_418_337)) (?v_1 (type_pointer ?t_82_420_335))) (let ((?v_3 (c_sort ?v_1 ?p_416_339))) (=> (and (<= 0 ?i1_414_341) (< ?i1_414_341 ?size_417_338)) (=> (and (<= 0 ?i2_413_342) (< ?i2_413_342 ?size_417_338)) (=> (not (= ?i1_414_341 ?i2_413_342)) (not (= (base_addr (c_sort ?v_0 (acc ?v_2 (c_sort ?v_1 (shift ?v_3 ?i1_414_341))))) (base_addr (c_sort ?v_0 (acc ?v_2 (c_sort ?v_1 (shift ?v_3 ?i2_413_342)))))))))))))))))))))))) +(declare-fun separation2 (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_84_426_343 c_type)) (forall ((?t_83_425_344 c_type)) (forall ((?m1_424_345 c_unique)) (forall ((?m2_423_346 c_unique)) (let ((?v_0 (type_memory (type_pointer ?t_83_425_344) ?t_84_426_343))) (= (separation2 (c_sort ?v_0 ?m1_424_345) (c_sort ?v_0 ?m2_423_346)) (forall ((?p1_422_347 c_unique)) (forall ((?p2_421_348 c_unique)) (let ((?v_1 (type_pointer ?t_83_425_344)) (?v_2 (type_pointer ?t_84_426_343))) (=> (not (= ?p1_422_347 ?p2_421_348)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_424_345) (c_sort ?v_2 ?p1_422_347)))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_423_346) (c_sort ?v_2 ?p2_421_348))))))))))))))))) +(declare-fun separation2_range1 (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_86_435_349 c_type)) (forall ((?t_85_434_350 c_type)) (forall ((?m1_433_351 c_unique)) (forall ((?m2_432_352 c_unique)) (forall ((?size_431_353 Int)) (let ((?v_0 (type_memory (type_pointer ?t_85_434_350) ?t_86_435_349))) (= (separation2_range1 (c_sort ?v_0 ?m1_433_351) (c_sort ?v_0 ?m2_432_352) ?size_431_353) (forall ((?p_430_354 c_unique)) (forall ((?q_429_355 c_unique)) (forall ((?a_428_356 c_unique)) (forall ((?i_427_357 Int)) (let ((?v_1 (type_pointer ?t_85_434_350)) (?v_2 (type_pointer ?t_86_435_349))) (=> (and (<= 0 ?i_427_357) (< ?i_427_357 ?size_431_353)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_433_351) (c_sort ?v_2 (shift (c_sort ?v_2 ?p_430_354) ?i_427_357))))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_432_352) (c_sort ?v_2 ?q_429_355)))))))))))))))))))) +(declare-fun on_heap (c_ssorted c_ssorted) Bool) +(declare-fun on_stack (c_ssorted c_ssorted) Bool) +(declare-fun fresh (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_87_438_358 c_type)) (forall ((?a_437_359 c_unique)) (forall ((?p_436_360 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a_437_359)) (?v_1 (c_sort (type_pointer ?t_87_438_358) ?p_436_360))) (=> (fresh ?v_0 ?v_1) (not (valid ?v_0 ?v_1)))))))) +(assert (forall ((?t_88_442_361 c_type)) (forall ((?a_441_362 c_unique)) (forall ((?p_440_363 c_unique)) (=> (fresh (c_sort type_alloc_table ?a_441_362) (c_sort (type_pointer ?t_88_442_361) ?p_440_363)) (forall ((?i_439_364 Int)) (let ((?v_0 (type_pointer ?t_88_442_361))) (not (valid (c_sort type_alloc_table ?a_441_362) (c_sort ?v_0 (shift (c_sort ?v_0 ?p_440_363) ?i_439_364))))))))))) +(declare-fun alloc_extends (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_89_446_365 c_type)) (forall ((?a1_445_366 c_unique)) (forall ((?a2_444_367 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_445_366) (c_sort type_alloc_table ?a2_444_367)) (forall ((?q_443_368 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_89_446_365) ?q_443_368))) (=> (valid (c_sort type_alloc_table ?a1_445_366) ?v_0) (valid (c_sort type_alloc_table ?a2_444_367) ?v_0))))))))) +(assert (forall ((?t_90_451_369 c_type)) (forall ((?a1_450_370 c_unique)) (forall ((?a2_449_371 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_450_370) (c_sort type_alloc_table ?a2_449_371)) (forall ((?q_448_372 c_unique)) (forall ((?i_447_373 Int)) (let ((?v_0 (c_sort (type_pointer ?t_90_451_369) ?q_448_372))) (=> (valid_index (c_sort type_alloc_table ?a1_450_370) ?v_0 ?i_447_373) (valid_index (c_sort type_alloc_table ?a2_449_371) ?v_0 ?i_447_373)))))))))) +(assert (forall ((?t_91_457_374 c_type)) (forall ((?a1_456_375 c_unique)) (forall ((?a2_455_376 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_456_375) (c_sort type_alloc_table ?a2_455_376)) (forall ((?q_454_377 c_unique)) (forall ((?i_453_378 Int)) (forall ((?j_452_379 Int)) (let ((?v_0 (c_sort (type_pointer ?t_91_457_374) ?q_454_377))) (=> (valid_range (c_sort type_alloc_table ?a1_456_375) ?v_0 ?i_453_378 ?j_452_379) (valid_range (c_sort type_alloc_table ?a2_455_376) ?v_0 ?i_453_378 ?j_452_379))))))))))) +(assert (forall ((?a_458_380 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a_458_380))) (alloc_extends ?v_0 ?v_0)))) +(assert (forall ((?a1_461_381 c_unique)) (forall ((?a2_460_382 c_unique)) (forall ((?a3_459_383 c_unique)) (let ((?v_1 (c_sort type_alloc_table ?a1_461_381)) (?v_0 (c_sort type_alloc_table ?a2_460_382)) (?v_2 (c_sort type_alloc_table ?a3_459_383))) (=> (alloc_extends ?v_1 ?v_0) (=> (alloc_extends ?v_0 ?v_2) (alloc_extends ?v_1 ?v_2)))))))) +(declare-fun free_stack (c_ssorted c_ssorted c_ssorted) Bool) +(assert (forall ((?t_92_466_384 c_type)) (forall ((?a1_465_385 c_unique)) (forall ((?a2_464_386 c_unique)) (forall ((?a3_463_387 c_unique)) (=> (free_stack (c_sort type_alloc_table ?a1_465_385) (c_sort type_alloc_table ?a2_464_386) (c_sort type_alloc_table ?a3_463_387)) (forall ((?p_462_388 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a2_464_386)) (?v_1 (c_sort (type_pointer ?t_92_466_384) ?p_462_388))) (=> (valid ?v_0 ?v_1) (=> (on_heap ?v_0 ?v_1) (valid (c_sort type_alloc_table ?a3_463_387) ?v_1))))))))))) +(assert (forall ((?t_93_471_389 c_type)) (forall ((?a1_470_390 c_unique)) (forall ((?a2_469_391 c_unique)) (forall ((?a3_468_392 c_unique)) (=> (free_stack (c_sort type_alloc_table ?a1_470_390) (c_sort type_alloc_table ?a2_469_391) (c_sort type_alloc_table ?a3_468_392)) (forall ((?p_467_393 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a1_470_390)) (?v_1 (c_sort (type_pointer ?t_93_471_389) ?p_467_393))) (=> (valid ?v_0 ?v_1) (=> (on_stack ?v_0 ?v_1) (valid (c_sort type_alloc_table ?a3_468_392) ?v_1))))))))))) +(declare-fun null () c_unique) +(assert (forall ((?t_94_475_394 c_type)) (forall ((?a_474_395 c_unique)) (not (valid (c_sort type_alloc_table ?a_474_395) (c_sort (type_pointer ?t_94_475_394) null)))))) +(declare-fun type_global () c_type) +(assert (not (forall ((?t c_unique)) (forall ((?n Int)) (forall ((?alloc c_unique)) (forall ((?intM_global c_unique)) (=> (valid_range (c_sort type_alloc_table ?alloc) (c_sort (type_pointer type_global) ?t) 0 ?n) (forall ((?mutable_n Int)) (=> (and (<= ?mutable_n ?n) (forall ((?i_495_419 Int)) (let ((?v_0 (type_pointer type_global))) (=> (and (<= ?mutable_n ?i_495_419) (< ?i_495_419 ?n)) (= (ss2Int (c_sort c_int (acc (c_sort (type_memory c_int type_global) ?intM_global) (c_sort ?v_0 (shift (c_sort ?v_0 ?t) ?i_495_419))))) 0))))) (forall ((?mutable_n0 Int)) (=> (= ?mutable_n0 (- ?mutable_n 1)) (=> (< ?mutable_n0 0) (=> (not (= 1 0)) (forall ((?i Int)) (let ((?v_1 (type_pointer type_global))) (=> (and (<= 0 ?i) (< ?i ?n)) (= (ss2Int (c_sort c_int (acc (c_sort (type_memory c_int type_global) ?intM_global) (c_sort ?v_1 (shift (c_sort ?v_1 ?t) ?i))))) 0))))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/smtlib46f14a.smt2 b/test/regress/regress0/quantifiers/smtlib46f14a.smt2 new file mode 100644 index 000000000..fa0c85470 --- /dev/null +++ b/test/regress/regress0/quantifiers/smtlib46f14a.smt2 @@ -0,0 +1,205 @@ +(set-logic AUFLIRA) +(set-info :source |http://proval.lri.fr/why-benchmarks |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-sort Unit 0) +(declare-sort c_unique 0) +(declare-sort c_ssorted 0) +(declare-sort c_type 0) +(declare-sort c_Boolean 0) +(declare-fun c_sort (c_type c_unique) c_ssorted) +(declare-fun c_Boolean_true () c_Boolean) +(declare-fun c_Boolean_false () c_Boolean) +(assert (forall ((?b_22_1 c_Boolean)) (or (= c_Boolean_true ?b_22_1) (= c_Boolean_false ?b_22_1)))) +(assert (not (= c_Boolean_true c_Boolean_false))) +(declare-fun int2U (Int) c_unique) +(declare-fun ss2Int (c_ssorted) Int) +(declare-fun real2U (Real) c_unique) +(declare-fun ss2Real (c_ssorted) Real) +(declare-fun bool2U (c_Boolean) c_unique) +(declare-fun ss2Bool (c_ssorted) c_Boolean) +(declare-fun c_int () c_type) +(declare-fun c_bool () c_type) +(declare-fun c_real () c_type) +(declare-fun c_unit () c_type) +(declare-fun c_ref (c_unique) c_unique) +(assert (forall ((?t_21_2 c_type)) (forall ((?x_20_3 c_unique)) (forall ((?y_19_4 c_unique)) (=> (= (c_sort ?t_21_2 ?x_20_3) (c_sort ?t_21_2 ?y_19_4)) (= ?x_20_3 ?y_19_4)))))) +(assert (forall ((?x_18_5 Int)) (= (ss2Int (c_sort c_int (int2U ?x_18_5))) ?x_18_5))) +(assert (forall ((?x_17_6 Int)) (forall ((?y_16_7 Int)) (=> (= (int2U ?x_17_6) (int2U ?y_16_7)) (= ?x_17_6 ?y_16_7))))) +(assert (forall ((?x_15_8 Real)) (forall ((?y_14_9 Real)) (=> (= (real2U ?x_15_8) (real2U ?y_14_9)) (= ?x_15_8 ?y_14_9))))) +(assert (forall ((?x_13_10 c_Boolean)) (forall ((?y_12_11 c_Boolean)) (=> (= (bool2U ?x_13_10) (bool2U ?y_12_11)) (= ?x_13_10 ?y_12_11))))) +(assert (forall ((?x_11_12 c_ssorted)) (forall ((?y_10_13 c_ssorted)) (=> (= (ss2Int ?x_11_12) (ss2Int ?y_10_13)) (= ?x_11_12 ?y_10_13))))) +(assert (forall ((?x_9_14 c_ssorted)) (forall ((?y_8_15 c_ssorted)) (=> (= (ss2Real ?x_9_14) (ss2Real ?y_8_15)) (= ?x_9_14 ?y_8_15))))) +(assert (forall ((?x_7_16 c_ssorted)) (forall ((?y_6_17 c_ssorted)) (=> (= (ss2Bool ?x_7_16) (ss2Bool ?y_6_17)) (= ?x_7_16 ?y_6_17))))) +(assert (forall ((?x_5_18 Real)) (= (ss2Real (c_sort c_real (real2U ?x_5_18))) ?x_5_18))) +(assert (forall ((?x_4_19 c_Boolean)) (= (ss2Bool (c_sort c_bool (bool2U ?x_4_19))) ?x_4_19))) +(assert (forall ((?x_3_20 c_unique)) (= (int2U (ss2Int (c_sort c_int ?x_3_20))) ?x_3_20))) +(assert (forall ((?x_2_21 c_unique)) (= (real2U (ss2Real (c_sort c_real ?x_2_21))) ?x_2_21))) +(assert (forall ((?x_1_22 c_unique)) (= (bool2U (ss2Bool (c_sort c_bool ?x_1_22))) ?x_1_22))) +(declare-fun eq_int (Int Int) Bool) +(declare-fun neq_int (Int Int) Bool) +(declare-fun lt_int_bool (Int Int) c_Boolean) +(declare-fun le_int_bool (Int Int) c_Boolean) +(declare-fun gt_int_bool (Int Int) c_Boolean) +(declare-fun ge_int_bool (Int Int) c_Boolean) +(declare-fun eq_int_bool (Int Int) c_Boolean) +(declare-fun neq_int_bool (Int Int) c_Boolean) +(assert (forall ((?x_40_23 Int)) (forall ((?y_39_24 Int)) (= (= (lt_int_bool ?x_40_23 ?y_39_24) c_Boolean_true) (< ?x_40_23 ?y_39_24))))) +(assert (forall ((?x_42_25 Int)) (forall ((?y_41_26 Int)) (= (= (le_int_bool ?x_42_25 ?y_41_26) c_Boolean_true) (<= ?x_42_25 ?y_41_26))))) +(assert (forall ((?x_44_27 Int)) (forall ((?y_43_28 Int)) (= (= (gt_int_bool ?x_44_27 ?y_43_28) c_Boolean_true) (> ?x_44_27 ?y_43_28))))) +(assert (forall ((?x_46_29 Int)) (forall ((?y_45_30 Int)) (= (= (ge_int_bool ?x_46_29 ?y_45_30) c_Boolean_true) (>= ?x_46_29 ?y_45_30))))) +(assert (forall ((?x_48_31 Int)) (forall ((?y_47_32 Int)) (= (= (eq_int_bool ?x_48_31 ?y_47_32) c_Boolean_true) (= ?x_48_31 ?y_47_32))))) +(assert (forall ((?x_50_33 Int)) (forall ((?y_49_34 Int)) (= (= (neq_int_bool ?x_50_33 ?y_49_34) c_Boolean_true) (not (= ?x_50_33 ?y_49_34)))))) +(declare-fun add_real (Real Real) Real) +(declare-fun sub_real (Real Real) Real) +(declare-fun mul_real (Real Real) Real) +(declare-fun div_real (Real Real) Real) +(declare-fun pow_real (Real Real) Real) +(declare-fun neg_real (Real) Real) +(declare-fun abs_real (Real) Real) +(declare-fun sqrt_real (Real) Real) +(declare-fun real_of_int (Int) Real) +(declare-fun int_of_real (Real) Int) +(declare-fun lt_real (Real Real) Bool) +(declare-fun le_real (Real Real) Bool) +(declare-fun gt_real (Real Real) Bool) +(declare-fun ge_real (Real Real) Bool) +(declare-fun eq_real (Real Real) Bool) +(declare-fun neq_real (Real Real) Bool) +(declare-fun eq_bool (c_Boolean c_Boolean) Bool) +(declare-fun neq_bool (c_Boolean c_Boolean) Bool) +(declare-fun eq_unit (c_ssorted c_ssorted) Bool) +(declare-fun neq_unit (c_ssorted c_ssorted) Bool) +(declare-fun smtlib__ite (c_Boolean c_ssorted c_ssorted) c_unique) +(assert (forall ((?t_1_76_35 c_type)) (forall ((?x_75_36 c_unique)) (forall ((?y_74_37 c_unique)) (= (smtlib__ite c_Boolean_true (c_sort ?t_1_76_35 ?x_75_36) (c_sort ?t_1_76_35 ?y_74_37)) ?x_75_36))))) +(assert (forall ((?t_2_79_38 c_type)) (forall ((?x_78_39 c_unique)) (forall ((?y_77_40 c_unique)) (= (smtlib__ite c_Boolean_false (c_sort ?t_2_79_38 ?x_78_39) (c_sort ?t_2_79_38 ?y_77_40)) ?y_77_40))))) +(declare-fun bw_compl (Int) Int) +(declare-fun bw_and (Int Int) Int) +(declare-fun bw_xor (Int Int) Int) +(declare-fun bw_or (Int Int) Int) +(declare-fun lsl (Int Int) Int) +(declare-fun lsr (Int Int) Int) +(declare-fun non_int (Int) Int) +(declare-fun type_pointer (c_type) c_type) +(declare-fun type_addr (c_type) c_type) +(declare-fun type_alloc_table () c_type) +(declare-fun block_length (c_ssorted c_ssorted) Int) +(declare-fun base_addr (c_ssorted) c_unique) +(declare-fun offset (c_ssorted) Int) +(declare-fun shift (c_ssorted Int) c_unique) +(declare-fun sub_pointer (c_ssorted c_ssorted) Int) +(declare-fun lt_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_3_88_41 c_type)) (forall ((?p1_87_42 c_unique)) (forall ((?p2_86_43 c_unique)) (let ((?v_0 (type_pointer ?t_3_88_41))) (let ((?v_1 (c_sort ?v_0 ?p1_87_42)) (?v_2 (c_sort ?v_0 ?p2_86_43))) (= (lt_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (< (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun le_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_4_91_44 c_type)) (forall ((?p1_90_45 c_unique)) (forall ((?p2_89_46 c_unique)) (let ((?v_0 (type_pointer ?t_4_91_44))) (let ((?v_1 (c_sort ?v_0 ?p1_90_45)) (?v_2 (c_sort ?v_0 ?p2_89_46))) (= (le_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (<= (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun gt_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_5_94_47 c_type)) (forall ((?p1_93_48 c_unique)) (forall ((?p2_92_49 c_unique)) (let ((?v_0 (type_pointer ?t_5_94_47))) (let ((?v_1 (c_sort ?v_0 ?p1_93_48)) (?v_2 (c_sort ?v_0 ?p2_92_49))) (= (gt_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (> (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun ge_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_6_97_50 c_type)) (forall ((?p1_96_51 c_unique)) (forall ((?p2_95_52 c_unique)) (let ((?v_0 (type_pointer ?t_6_97_50))) (let ((?v_1 (c_sort ?v_0 ?p1_96_51)) (?v_2 (c_sort ?v_0 ?p2_95_52))) (= (ge_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (>= (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun valid (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_7_104_53 c_type)) (forall ((?a_103_54 c_unique)) (forall ((?p_102_55 c_unique)) (let ((?v_2 (c_sort type_alloc_table ?a_103_54)) (?v_0 (c_sort (type_pointer ?t_7_104_53) ?p_102_55))) (let ((?v_1 (offset ?v_0))) (= (valid ?v_2 ?v_0) (and (<= 0 ?v_1) (< ?v_1 (block_length ?v_2 ?v_0)))))))))) +(declare-fun valid_index (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_8_108_56 c_type)) (forall ((?a_107_57 c_unique)) (forall ((?p_106_58 c_unique)) (forall ((?i_105_59 Int)) (let ((?v_2 (c_sort type_alloc_table ?a_107_57)) (?v_0 (c_sort (type_pointer ?t_8_108_56) ?p_106_58))) (let ((?v_1 (+ (offset ?v_0) ?i_105_59))) (= (valid_index ?v_2 ?v_0 ?i_105_59) (and (<= 0 ?v_1) (< ?v_1 (block_length ?v_2 ?v_0))))))))))) +(declare-fun valid_range (c_ssorted c_ssorted Int Int) Bool) +(assert (forall ((?t_9_113_60 c_type)) (forall ((?a_112_61 c_unique)) (forall ((?p_111_62 c_unique)) (forall ((?i_110_63 Int)) (forall ((?j_109_64 Int)) (let ((?v_2 (c_sort type_alloc_table ?a_112_61)) (?v_0 (c_sort (type_pointer ?t_9_113_60) ?p_111_62))) (let ((?v_1 (offset ?v_0))) (= (valid_range ?v_2 ?v_0 ?i_110_63 ?j_109_64) (and (<= 0 (+ ?v_1 ?i_110_63)) (< (+ ?v_1 ?j_109_64) (block_length ?v_2 ?v_0)))))))))))) +(assert (forall ((?t_10_116_65 c_type)) (forall ((?p_115_66 c_unique)) (forall ((?i_114_67 Int)) (let ((?v_0 (type_pointer ?t_10_116_65))) (let ((?v_1 (c_sort ?v_0 ?p_115_66))) (= (offset (c_sort ?v_0 (shift ?v_1 ?i_114_67))) (+ (offset ?v_1) ?i_114_67)))))))) +(assert (forall ((?t_11_118_68 c_type)) (forall ((?p_117_69 c_unique)) (= (shift (c_sort (type_pointer ?t_11_118_68) ?p_117_69) 0) ?p_117_69)))) +(assert (forall ((?t_12_122_70 c_type)) (forall ((?p_121_71 c_unique)) (forall ((?i_120_72 Int)) (forall ((?j_119_73 Int)) (let ((?v_0 (type_pointer ?t_12_122_70))) (let ((?v_1 (c_sort ?v_0 ?p_121_71))) (= (shift (c_sort ?v_0 (shift ?v_1 ?i_120_72)) ?j_119_73) (shift ?v_1 (+ ?i_120_72 ?j_119_73)))))))))) +(assert (forall ((?t_13_125_74 c_type)) (forall ((?p_124_75 c_unique)) (forall ((?i_123_76 Int)) (let ((?v_0 (type_pointer ?t_13_125_74))) (let ((?v_1 (c_sort ?v_0 ?p_124_75))) (= (base_addr (c_sort ?v_0 (shift ?v_1 ?i_123_76))) (base_addr ?v_1)))))))) +(assert (forall ((?t_14_129_77 c_type)) (forall ((?a_128_78 c_unique)) (forall ((?p_127_79 c_unique)) (forall ((?i_126_80 Int)) (let ((?v_1 (c_sort type_alloc_table ?a_128_78)) (?v_0 (type_pointer ?t_14_129_77))) (let ((?v_2 (c_sort ?v_0 ?p_127_79))) (= (block_length ?v_1 (c_sort ?v_0 (shift ?v_2 ?i_126_80))) (block_length ?v_1 ?v_2))))))))) +(assert (forall ((?t_15_133_81 c_type)) (forall ((?a_132_82 c_unique)) (forall ((?p1_131_83 c_unique)) (forall ((?p2_130_84 c_unique)) (let ((?v_0 (type_pointer ?t_15_133_81))) (let ((?v_1 (c_sort ?v_0 ?p1_131_83)) (?v_3 (c_sort ?v_0 ?p2_130_84)) (?v_2 (c_sort type_alloc_table ?a_132_82))) (=> (= (base_addr ?v_1) (base_addr ?v_3)) (= (block_length ?v_2 ?v_1) (block_length ?v_2 ?v_3)))))))))) +(assert (forall ((?t_16_136_85 c_type)) (forall ((?p1_135_86 c_unique)) (forall ((?p2_134_87 c_unique)) (let ((?v_0 (type_pointer ?t_16_136_85))) (let ((?v_1 (c_sort ?v_0 ?p1_135_86)) (?v_2 (c_sort ?v_0 ?p2_134_87))) (=> (and (= (base_addr ?v_1) (base_addr ?v_2)) (= (offset ?v_1) (offset ?v_2))) (= ?p1_135_86 ?p2_134_87)))))))) +(assert (forall ((?t_17_139_88 c_type)) (forall ((?p1_138_89 c_unique)) (forall ((?p2_137_90 c_unique)) (let ((?v_0 (type_pointer ?t_17_139_88))) (let ((?v_1 (c_sort ?v_0 ?p1_138_89)) (?v_2 (c_sort ?v_0 ?p2_137_90))) (=> (= ?p1_138_89 ?p2_137_90) (and (= (base_addr ?v_1) (base_addr ?v_2)) (= (offset ?v_1) (offset ?v_2)))))))))) +(assert (forall ((?t_18_144_91 c_type)) (forall ((?p1_143_92 c_unique)) (forall ((?p2_142_93 c_unique)) (forall ((?i_141_94 Int)) (forall ((?j_140_95 Int)) (let ((?v_0 (type_pointer ?t_18_144_91))) (let ((?v_1 (c_sort ?v_0 ?p1_143_92)) (?v_2 (c_sort ?v_0 ?p2_142_93))) (=> (not (= (base_addr ?v_1) (base_addr ?v_2))) (not (= (shift ?v_1 ?i_141_94) (shift ?v_2 ?j_140_95)))))))))))) +(assert (forall ((?t_19_149_96 c_type)) (forall ((?p1_148_97 c_unique)) (forall ((?p2_147_98 c_unique)) (forall ((?i_146_99 Int)) (forall ((?j_145_100 Int)) (let ((?v_0 (type_pointer ?t_19_149_96))) (let ((?v_1 (c_sort ?v_0 ?p1_148_97)) (?v_2 (c_sort ?v_0 ?p2_147_98))) (=> (not (= (+ (offset ?v_1) ?i_146_99) (+ (offset ?v_2) ?j_145_100))) (not (= (shift ?v_1 ?i_146_99) (shift ?v_2 ?j_145_100)))))))))))) +(assert (forall ((?t_20_154_101 c_type)) (forall ((?p1_153_102 c_unique)) (forall ((?p2_152_103 c_unique)) (forall ((?i_151_104 Int)) (forall ((?j_150_105 Int)) (let ((?v_0 (type_pointer ?t_20_154_101))) (let ((?v_1 (c_sort ?v_0 ?p1_153_102)) (?v_2 (c_sort ?v_0 ?p2_152_103))) (=> (= (base_addr ?v_1) (base_addr ?v_2)) (=> (= (+ (offset ?v_1) ?i_151_104) (+ (offset ?v_2) ?j_150_105)) (= (shift ?v_1 ?i_151_104) (shift ?v_2 ?j_150_105)))))))))))) +(assert (forall ((?t_21_158_106 c_type)) (forall ((?a_157_107 c_unique)) (forall ((?p_156_108 c_unique)) (forall ((?i_155_109 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_157_107)) (?v_1 (type_pointer ?t_21_158_106))) (let ((?v_2 (c_sort ?v_1 ?p_156_108))) (=> (valid_index ?v_0 ?v_2 ?i_155_109) (valid ?v_0 (c_sort ?v_1 (shift ?v_2 ?i_155_109))))))))))) +(assert (forall ((?t_22_164_110 c_type)) (forall ((?a_163_111 c_unique)) (forall ((?p_162_112 c_unique)) (forall ((?i_161_113 Int)) (forall ((?j_160_114 Int)) (forall ((?k_159_115 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_163_111)) (?v_1 (type_pointer ?t_22_164_110))) (let ((?v_2 (c_sort ?v_1 ?p_162_112))) (=> (valid_range ?v_0 ?v_2 ?i_161_113 ?j_160_114) (=> (and (<= ?i_161_113 ?k_159_115) (<= ?k_159_115 ?j_160_114)) (valid ?v_0 (c_sort ?v_1 (shift ?v_2 ?k_159_115)))))))))))))) +(assert (forall ((?t_23_169_116 c_type)) (forall ((?a_168_117 c_unique)) (forall ((?p_167_118 c_unique)) (forall ((?i_166_119 Int)) (forall ((?j_165_120 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_168_117)) (?v_1 (c_sort (type_pointer ?t_23_169_116) ?p_167_118))) (=> (valid_range ?v_0 ?v_1 ?i_166_119 ?j_165_120) (=> (and (<= ?i_166_119 0) (<= 0 ?j_165_120)) (valid ?v_0 ?v_1)))))))))) +(assert (forall ((?t_24_175_121 c_type)) (forall ((?a_174_122 c_unique)) (forall ((?p_173_123 c_unique)) (forall ((?i_172_124 Int)) (forall ((?j_171_125 Int)) (forall ((?k_170_126 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_174_122)) (?v_1 (c_sort (type_pointer ?t_24_175_121) ?p_173_123))) (=> (valid_range ?v_0 ?v_1 ?i_172_124 ?j_171_125) (=> (and (<= ?i_172_124 ?k_170_126) (<= ?k_170_126 ?j_171_125)) (valid_index ?v_0 ?v_1 ?k_170_126))))))))))) +(assert (forall ((?t_25_178_127 c_type)) (forall ((?p1_177_128 c_unique)) (forall ((?p2_176_129 c_unique)) (let ((?v_0 (type_pointer ?t_25_178_127))) (let ((?v_1 (c_sort ?v_0 ?p1_177_128)) (?v_2 (c_sort ?v_0 ?p2_176_129))) (=> (= (base_addr ?v_1) (base_addr ?v_2)) (= (sub_pointer ?v_1 ?v_2) (- (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun type_memory (c_type c_type) c_type) +(declare-fun acc (c_ssorted c_ssorted) c_unique) +(declare-fun upd (c_ssorted c_ssorted c_ssorted) c_unique) +(assert (forall ((?t_27_212_130 c_type)) (forall ((?t_26_211_131 c_type)) (forall ((?m_210_132 c_unique)) (forall ((?p_209_133 c_unique)) (forall ((?a_208_134 c_unique)) (let ((?v_0 (type_memory ?t_26_211_131 ?t_27_212_130)) (?v_1 (c_sort (type_pointer ?t_27_212_130) ?p_209_133))) (= (acc (c_sort ?v_0 (upd (c_sort ?v_0 ?m_210_132) ?v_1 (c_sort ?t_26_211_131 ?a_208_134))) ?v_1) ?a_208_134)))))))) +(assert (forall ((?t_29_218_135 c_type)) (forall ((?t_28_217_136 c_type)) (forall ((?m_216_137 c_unique)) (forall ((?p1_215_138 c_unique)) (forall ((?p2_214_139 c_unique)) (forall ((?a_213_140 c_unique)) (let ((?v_0 (type_memory ?t_28_217_136 ?t_29_218_135))) (let ((?v_2 (c_sort ?v_0 ?m_216_137)) (?v_1 (type_pointer ?t_29_218_135))) (let ((?v_3 (c_sort ?v_1 ?p2_214_139))) (=> (not (= ?p1_215_138 ?p2_214_139)) (= (acc (c_sort ?v_0 (upd ?v_2 (c_sort ?v_1 ?p1_215_138) (c_sort ?t_28_217_136 ?a_213_140))) ?v_3) (acc ?v_2 ?v_3))))))))))))) +(assert (not (= c_Boolean_false c_Boolean_true))) +(declare-fun type_pset (c_type) c_type) +(declare-fun pset_empty () c_unique) +(declare-fun pset_singleton (c_ssorted) c_unique) +(declare-fun pset_star (c_ssorted c_ssorted) c_unique) +(declare-fun pset_all (c_ssorted) c_unique) +(declare-fun pset_range (c_ssorted Int Int) c_unique) +(declare-fun pset_range_left (c_ssorted Int) c_unique) +(declare-fun pset_range_right (c_ssorted Int) c_unique) +(declare-fun pset_acc_all (c_ssorted c_ssorted) c_unique) +(declare-fun pset_acc_range (c_ssorted c_ssorted Int Int) c_unique) +(declare-fun pset_acc_range_left (c_ssorted c_ssorted Int) c_unique) +(declare-fun pset_acc_range_right (c_ssorted c_ssorted Int) c_unique) +(declare-fun pset_union (c_ssorted c_ssorted) c_unique) +(declare-fun not_in_pset (c_ssorted c_ssorted) Bool) +(declare-fun not_assigns (c_ssorted c_ssorted c_ssorted c_ssorted) Bool) +(assert (forall ((?t_31_225_141 c_type)) (forall ((?t_30_224_142 c_type)) (forall ((?a_223_143 c_unique)) (forall ((?m1_222_144 c_unique)) (forall ((?m2_221_145 c_unique)) (forall ((?l_220_146 c_unique)) (let ((?v_0 (type_memory ?t_30_224_142 ?t_31_225_141))) (= (not_assigns (c_sort type_alloc_table ?a_223_143) (c_sort ?v_0 ?m1_222_144) (c_sort ?v_0 ?m2_221_145) (c_sort (type_pset ?t_31_225_141) ?l_220_146)) (forall ((?p_219_147 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_31_225_141) ?p_219_147))) (=> (valid (c_sort type_alloc_table ?a_223_143) ?v_1) (=> (not_in_pset ?v_1 (c_sort (type_pset ?t_31_225_141) ?l_220_146)) (= (acc (c_sort ?v_0 ?m2_221_145) ?v_1) (acc (c_sort ?v_0 ?m1_222_144) ?v_1))))))))))))))) +(assert (forall ((?t_32_227_148 c_type)) (forall ((?p_226_149 c_unique)) (not_in_pset (c_sort (type_pointer ?t_32_227_148) ?p_226_149) (c_sort (type_pset ?t_32_227_148) pset_empty))))) +(assert (forall ((?t_33_230_150 c_type)) (forall ((?p1_229_151 c_unique)) (forall ((?p2_228_152 c_unique)) (let ((?v_0 (type_pointer ?t_33_230_150))) (=> (not (= ?p1_229_151 ?p2_228_152)) (not_in_pset (c_sort ?v_0 ?p1_229_151) (c_sort (type_pset ?t_33_230_150) (pset_singleton (c_sort ?v_0 ?p2_228_152)))))))))) +(assert (forall ((?t_34_233_153 c_type)) (forall ((?p1_232_154 c_unique)) (forall ((?p2_231_155 c_unique)) (let ((?v_0 (type_pointer ?t_34_233_153))) (=> (not_in_pset (c_sort ?v_0 ?p1_232_154) (c_sort (type_pset ?t_34_233_153) (pset_singleton (c_sort ?v_0 ?p2_231_155)))) (not (= ?p1_232_154 ?p2_231_155)))))))) +(assert (forall ((?t_35_235_156 c_type)) (forall ((?p_234_157 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_35_235_156) ?p_234_157))) (not (not_in_pset ?v_0 (c_sort (type_pset ?t_35_235_156) (pset_singleton ?v_0)))))))) +(assert (forall ((?t_36_239_158 c_type)) (forall ((?l1_238_159 c_unique)) (forall ((?l2_237_160 c_unique)) (forall ((?p_236_161 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_36_239_158) ?p_236_161)) (?v_1 (type_pset ?t_36_239_158))) (let ((?v_2 (c_sort ?v_1 ?l1_238_159)) (?v_3 (c_sort ?v_1 ?l2_237_160))) (=> (and (not_in_pset ?v_0 ?v_2) (not_in_pset ?v_0 ?v_3)) (not_in_pset ?v_0 (c_sort ?v_1 (pset_union ?v_2 ?v_3))))))))))) +(assert (forall ((?t_37_243_162 c_type)) (forall ((?l1_242_163 c_unique)) (forall ((?l2_241_164 c_unique)) (forall ((?p_240_165 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_37_243_162) ?p_240_165)) (?v_0 (type_pset ?t_37_243_162))) (let ((?v_2 (c_sort ?v_0 ?l1_242_163))) (=> (not_in_pset ?v_1 (c_sort ?v_0 (pset_union ?v_2 (c_sort ?v_0 ?l2_241_164)))) (not_in_pset ?v_1 ?v_2))))))))) +(assert (forall ((?t_38_247_166 c_type)) (forall ((?l1_246_167 c_unique)) (forall ((?l2_245_168 c_unique)) (forall ((?p_244_169 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_38_247_166) ?p_244_169)) (?v_0 (type_pset ?t_38_247_166))) (let ((?v_2 (c_sort ?v_0 ?l2_245_168))) (=> (not_in_pset ?v_1 (c_sort ?v_0 (pset_union (c_sort ?v_0 ?l1_246_167) ?v_2))) (not_in_pset ?v_1 ?v_2))))))))) +(assert (forall ((?t_40_253_170 c_type)) (forall ((?t_39_252_171 c_type)) (forall ((?l_251_172 c_unique)) (forall ((?m_250_173 c_unique)) (forall ((?p_249_174 c_unique)) (let ((?v_0 (type_pointer ?t_40_253_170))) (=> (forall ((?p1_248_175 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_39_252_171) ?p1_248_175))) (=> (= ?p_249_174 (acc (c_sort (type_memory ?v_0 ?t_39_252_171) ?m_250_173) ?v_1)) (not_in_pset ?v_1 (c_sort (type_pset ?t_39_252_171) ?l_251_172))))) (not_in_pset (c_sort ?v_0 ?p_249_174) (c_sort (type_pset ?t_40_253_170) (pset_star (c_sort (type_pset ?t_39_252_171) ?l_251_172) (c_sort (type_memory ?v_0 ?t_39_252_171) ?m_250_173)))))))))))) +(assert (forall ((?t_42_259_176 c_type)) (forall ((?t_41_258_177 c_type)) (forall ((?l_257_178 c_unique)) (forall ((?m_256_179 c_unique)) (forall ((?p_255_180 c_unique)) (let ((?v_0 (type_pointer ?t_42_259_176))) (=> (not_in_pset (c_sort ?v_0 ?p_255_180) (c_sort (type_pset ?t_42_259_176) (pset_star (c_sort (type_pset ?t_41_258_177) ?l_257_178) (c_sort (type_memory ?v_0 ?t_41_258_177) ?m_256_179)))) (forall ((?p1_254_181 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_41_258_177) ?p1_254_181))) (=> (= ?p_255_180 (acc (c_sort (type_memory ?v_0 ?t_41_258_177) ?m_256_179) ?v_1)) (not_in_pset ?v_1 (c_sort (type_pset ?t_41_258_177) ?l_257_178))))))))))))) +(assert (forall ((?t_43_263_182 c_type)) (forall ((?p_262_183 c_unique)) (forall ((?l_261_184 c_unique)) (let ((?v_0 (type_pset ?t_43_263_182))) (=> (forall ((?p1_260_185 c_unique)) (let ((?v_1 (type_pointer ?t_43_263_182))) (let ((?v_2 (c_sort ?v_1 ?p1_260_185))) (=> (not (not_in_pset ?v_2 (c_sort ?v_0 ?l_261_184))) (not (= (base_addr (c_sort ?v_1 ?p_262_183)) (base_addr ?v_2))))))) (not_in_pset (c_sort (type_pointer ?t_43_263_182) ?p_262_183) (c_sort ?v_0 (pset_all (c_sort ?v_0 ?l_261_184)))))))))) +(assert (forall ((?t_44_267_186 c_type)) (forall ((?p_266_187 c_unique)) (forall ((?l_265_188 c_unique)) (let ((?v_0 (type_pset ?t_44_267_186))) (=> (not_in_pset (c_sort (type_pointer ?t_44_267_186) ?p_266_187) (c_sort ?v_0 (pset_all (c_sort ?v_0 ?l_265_188)))) (forall ((?p1_264_189 c_unique)) (let ((?v_1 (type_pointer ?t_44_267_186))) (let ((?v_2 (c_sort ?v_1 ?p1_264_189))) (=> (not (not_in_pset ?v_2 (c_sort ?v_0 ?l_265_188))) (not (= (base_addr (c_sort ?v_1 ?p_266_187)) (base_addr ?v_2))))))))))))) +(assert (forall ((?t_45_274_190 c_type)) (forall ((?p_273_191 c_unique)) (forall ((?l_272_192 c_unique)) (forall ((?a_271_193 Int)) (forall ((?b_270_194 Int)) (let ((?v_0 (type_pset ?t_45_274_190))) (=> (forall ((?p1_269_195 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_45_274_190) ?p1_269_195) (c_sort ?v_0 ?l_272_192)) (forall ((?i_268_196 Int)) (=> (and (<= ?a_271_193 ?i_268_196) (<= ?i_268_196 ?b_270_194)) (not (= ?p_273_191 (shift (c_sort (type_pointer ?t_45_274_190) ?p1_269_195) ?i_268_196))))))) (not_in_pset (c_sort (type_pointer ?t_45_274_190) ?p_273_191) (c_sort ?v_0 (pset_range (c_sort ?v_0 ?l_272_192) ?a_271_193 ?b_270_194))))))))))) +(assert (forall ((?t_46_281_197 c_type)) (forall ((?p_280_198 c_unique)) (forall ((?l_279_199 c_unique)) (forall ((?a_278_200 Int)) (forall ((?b_277_201 Int)) (let ((?v_0 (type_pset ?t_46_281_197))) (=> (not_in_pset (c_sort (type_pointer ?t_46_281_197) ?p_280_198) (c_sort ?v_0 (pset_range (c_sort ?v_0 ?l_279_199) ?a_278_200 ?b_277_201))) (forall ((?p1_276_202 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_46_281_197) ?p1_276_202) (c_sort ?v_0 ?l_279_199))) (forall ((?i_275_203 Int)) (=> (and (<= ?a_278_200 ?i_275_203) (<= ?i_275_203 ?b_277_201)) (not (= (shift (c_sort (type_pointer ?t_46_281_197) ?p1_276_202) ?i_275_203) ?p_280_198)))))))))))))) +(assert (forall ((?t_47_287_204 c_type)) (forall ((?p_286_205 c_unique)) (forall ((?l_285_206 c_unique)) (forall ((?a_284_207 Int)) (let ((?v_0 (type_pset ?t_47_287_204))) (=> (forall ((?p1_283_208 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_47_287_204) ?p1_283_208) (c_sort ?v_0 ?l_285_206)) (forall ((?i_282_209 Int)) (=> (<= ?i_282_209 ?a_284_207) (not (= ?p_286_205 (shift (c_sort (type_pointer ?t_47_287_204) ?p1_283_208) ?i_282_209))))))) (not_in_pset (c_sort (type_pointer ?t_47_287_204) ?p_286_205) (c_sort ?v_0 (pset_range_left (c_sort ?v_0 ?l_285_206) ?a_284_207)))))))))) +(assert (forall ((?t_48_293_210 c_type)) (forall ((?p_292_211 c_unique)) (forall ((?l_291_212 c_unique)) (forall ((?a_290_213 Int)) (let ((?v_0 (type_pset ?t_48_293_210))) (=> (not_in_pset (c_sort (type_pointer ?t_48_293_210) ?p_292_211) (c_sort ?v_0 (pset_range_left (c_sort ?v_0 ?l_291_212) ?a_290_213))) (forall ((?p1_289_214 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_48_293_210) ?p1_289_214) (c_sort ?v_0 ?l_291_212))) (forall ((?i_288_215 Int)) (=> (<= ?i_288_215 ?a_290_213) (not (= (shift (c_sort (type_pointer ?t_48_293_210) ?p1_289_214) ?i_288_215) ?p_292_211))))))))))))) +(assert (forall ((?t_49_299_216 c_type)) (forall ((?p_298_217 c_unique)) (forall ((?l_297_218 c_unique)) (forall ((?a_296_219 Int)) (let ((?v_0 (type_pset ?t_49_299_216))) (=> (forall ((?p1_295_220 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_49_299_216) ?p1_295_220) (c_sort ?v_0 ?l_297_218)) (forall ((?i_294_221 Int)) (=> (<= ?a_296_219 ?i_294_221) (not (= ?p_298_217 (shift (c_sort (type_pointer ?t_49_299_216) ?p1_295_220) ?i_294_221))))))) (not_in_pset (c_sort (type_pointer ?t_49_299_216) ?p_298_217) (c_sort ?v_0 (pset_range_right (c_sort ?v_0 ?l_297_218) ?a_296_219)))))))))) +(assert (forall ((?t_50_305_222 c_type)) (forall ((?p_304_223 c_unique)) (forall ((?l_303_224 c_unique)) (forall ((?a_302_225 Int)) (let ((?v_0 (type_pset ?t_50_305_222))) (=> (not_in_pset (c_sort (type_pointer ?t_50_305_222) ?p_304_223) (c_sort ?v_0 (pset_range_right (c_sort ?v_0 ?l_303_224) ?a_302_225))) (forall ((?p1_301_226 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_50_305_222) ?p1_301_226) (c_sort ?v_0 ?l_303_224))) (forall ((?i_300_227 Int)) (=> (<= ?a_302_225 ?i_300_227) (not (= (shift (c_sort (type_pointer ?t_50_305_222) ?p1_301_226) ?i_300_227) ?p_304_223))))))))))))) +(assert (forall ((?t_52_312_228 c_type)) (forall ((?t_51_311_229 c_type)) (forall ((?p_310_230 c_unique)) (forall ((?l_309_231 c_unique)) (forall ((?m_308_232 c_unique)) (let ((?v_0 (type_pointer ?t_51_311_229))) (=> (forall ((?p1_307_233 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_52_312_228) ?p1_307_233) (c_sort (type_pset ?t_52_312_228) ?l_309_231))) (forall ((?i_306_234 Int)) (let ((?v_1 (type_pointer ?t_52_312_228))) (not (= ?p_310_230 (acc (c_sort (type_memory ?v_0 ?t_52_312_228) ?m_308_232) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_307_233) ?i_306_234))))))))) (not_in_pset (c_sort ?v_0 ?p_310_230) (c_sort (type_pset ?t_51_311_229) (pset_acc_all (c_sort (type_pset ?t_52_312_228) ?l_309_231) (c_sort (type_memory ?v_0 ?t_52_312_228) ?m_308_232)))))))))))) +(assert (forall ((?t_54_319_235 c_type)) (forall ((?t_53_318_236 c_type)) (forall ((?p_317_237 c_unique)) (forall ((?l_316_238 c_unique)) (forall ((?m_315_239 c_unique)) (let ((?v_0 (type_pointer ?t_53_318_236))) (=> (not_in_pset (c_sort ?v_0 ?p_317_237) (c_sort (type_pset ?t_53_318_236) (pset_acc_all (c_sort (type_pset ?t_54_319_235) ?l_316_238) (c_sort (type_memory ?v_0 ?t_54_319_235) ?m_315_239)))) (forall ((?p1_314_240 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_54_319_235) ?p1_314_240) (c_sort (type_pset ?t_54_319_235) ?l_316_238))) (forall ((?i_313_241 Int)) (let ((?v_1 (type_pointer ?t_54_319_235))) (not (= (acc (c_sort (type_memory ?v_0 ?t_54_319_235) ?m_315_239) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_314_240) ?i_313_241))) ?p_317_237)))))))))))))) +(assert (forall ((?t_56_328_242 c_type)) (forall ((?t_55_327_243 c_type)) (forall ((?p_326_244 c_unique)) (forall ((?l_325_245 c_unique)) (forall ((?m_324_246 c_unique)) (forall ((?a_323_247 Int)) (forall ((?b_322_248 Int)) (let ((?v_0 (type_pointer ?t_55_327_243))) (=> (forall ((?p1_321_249 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_56_328_242) ?p1_321_249) (c_sort (type_pset ?t_56_328_242) ?l_325_245))) (forall ((?i_320_250 Int)) (let ((?v_1 (type_pointer ?t_56_328_242))) (=> (and (<= ?a_323_247 ?i_320_250) (<= ?i_320_250 ?b_322_248)) (not (= ?p_326_244 (acc (c_sort (type_memory ?v_0 ?t_56_328_242) ?m_324_246) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_321_249) ?i_320_250)))))))))) (not_in_pset (c_sort ?v_0 ?p_326_244) (c_sort (type_pset ?t_55_327_243) (pset_acc_range (c_sort (type_pset ?t_56_328_242) ?l_325_245) (c_sort (type_memory ?v_0 ?t_56_328_242) ?m_324_246) ?a_323_247 ?b_322_248))))))))))))) +(assert (forall ((?t_58_337_251 c_type)) (forall ((?t_57_336_252 c_type)) (forall ((?p_335_253 c_unique)) (forall ((?l_334_254 c_unique)) (forall ((?m_333_255 c_unique)) (forall ((?a_332_256 Int)) (forall ((?b_331_257 Int)) (let ((?v_0 (type_pointer ?t_57_336_252))) (=> (not_in_pset (c_sort ?v_0 ?p_335_253) (c_sort (type_pset ?t_57_336_252) (pset_acc_range (c_sort (type_pset ?t_58_337_251) ?l_334_254) (c_sort (type_memory ?v_0 ?t_58_337_251) ?m_333_255) ?a_332_256 ?b_331_257))) (forall ((?p1_330_258 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_58_337_251) ?p1_330_258) (c_sort (type_pset ?t_58_337_251) ?l_334_254))) (forall ((?i_329_259 Int)) (let ((?v_1 (type_pointer ?t_58_337_251))) (=> (and (<= ?a_332_256 ?i_329_259) (<= ?i_329_259 ?b_331_257)) (not (= (acc (c_sort (type_memory ?v_0 ?t_58_337_251) ?m_333_255) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_330_258) ?i_329_259))) ?p_335_253))))))))))))))))) +(assert (forall ((?t_60_345_260 c_type)) (forall ((?t_59_344_261 c_type)) (forall ((?p_343_262 c_unique)) (forall ((?l_342_263 c_unique)) (forall ((?m_341_264 c_unique)) (forall ((?a_340_265 Int)) (let ((?v_0 (type_pointer ?t_59_344_261))) (=> (forall ((?p1_339_266 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_60_345_260) ?p1_339_266) (c_sort (type_pset ?t_60_345_260) ?l_342_263))) (forall ((?i_338_267 Int)) (let ((?v_1 (type_pointer ?t_60_345_260))) (=> (<= ?i_338_267 ?a_340_265) (not (= ?p_343_262 (acc (c_sort (type_memory ?v_0 ?t_60_345_260) ?m_341_264) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_339_266) ?i_338_267)))))))))) (not_in_pset (c_sort ?v_0 ?p_343_262) (c_sort (type_pset ?t_59_344_261) (pset_acc_range_left (c_sort (type_pset ?t_60_345_260) ?l_342_263) (c_sort (type_memory ?v_0 ?t_60_345_260) ?m_341_264) ?a_340_265)))))))))))) +(assert (forall ((?t_62_353_268 c_type)) (forall ((?t_61_352_269 c_type)) (forall ((?p_351_270 c_unique)) (forall ((?l_350_271 c_unique)) (forall ((?m_349_272 c_unique)) (forall ((?a_348_273 Int)) (let ((?v_0 (type_pointer ?t_61_352_269))) (=> (not_in_pset (c_sort ?v_0 ?p_351_270) (c_sort (type_pset ?t_61_352_269) (pset_acc_range_left (c_sort (type_pset ?t_62_353_268) ?l_350_271) (c_sort (type_memory ?v_0 ?t_62_353_268) ?m_349_272) ?a_348_273))) (forall ((?p1_347_274 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_62_353_268) ?p1_347_274) (c_sort (type_pset ?t_62_353_268) ?l_350_271))) (forall ((?i_346_275 Int)) (let ((?v_1 (type_pointer ?t_62_353_268))) (=> (<= ?i_346_275 ?a_348_273) (not (= (acc (c_sort (type_memory ?v_0 ?t_62_353_268) ?m_349_272) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_347_274) ?i_346_275))) ?p_351_270)))))))))))))))) +(assert (forall ((?t_64_361_276 c_type)) (forall ((?t_63_360_277 c_type)) (forall ((?p_359_278 c_unique)) (forall ((?l_358_279 c_unique)) (forall ((?m_357_280 c_unique)) (forall ((?a_356_281 Int)) (let ((?v_0 (type_pointer ?t_63_360_277))) (=> (forall ((?p1_355_282 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_64_361_276) ?p1_355_282) (c_sort (type_pset ?t_64_361_276) ?l_358_279))) (forall ((?i_354_283 Int)) (let ((?v_1 (type_pointer ?t_64_361_276))) (=> (<= ?a_356_281 ?i_354_283) (not (= ?p_359_278 (acc (c_sort (type_memory ?v_0 ?t_64_361_276) ?m_357_280) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_355_282) ?i_354_283)))))))))) (not_in_pset (c_sort ?v_0 ?p_359_278) (c_sort (type_pset ?t_63_360_277) (pset_acc_range_right (c_sort (type_pset ?t_64_361_276) ?l_358_279) (c_sort (type_memory ?v_0 ?t_64_361_276) ?m_357_280) ?a_356_281)))))))))))) +(assert (forall ((?t_66_369_284 c_type)) (forall ((?t_65_368_285 c_type)) (forall ((?p_367_286 c_unique)) (forall ((?l_366_287 c_unique)) (forall ((?m_365_288 c_unique)) (forall ((?a_364_289 Int)) (let ((?v_0 (type_pointer ?t_65_368_285))) (=> (not_in_pset (c_sort ?v_0 ?p_367_286) (c_sort (type_pset ?t_65_368_285) (pset_acc_range_right (c_sort (type_pset ?t_66_369_284) ?l_366_287) (c_sort (type_memory ?v_0 ?t_66_369_284) ?m_365_288) ?a_364_289))) (forall ((?p1_363_290 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_66_369_284) ?p1_363_290) (c_sort (type_pset ?t_66_369_284) ?l_366_287))) (forall ((?i_362_291 Int)) (let ((?v_1 (type_pointer ?t_66_369_284))) (=> (<= ?a_364_289 ?i_362_291) (not (= (acc (c_sort (type_memory ?v_0 ?t_66_369_284) ?m_365_288) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_363_290) ?i_362_291))) ?p_367_286)))))))))))))))) +(assert (forall ((?t_68_376_292 c_type)) (forall ((?t_67_375_293 c_type)) (forall ((?a_374_294 c_unique)) (forall ((?l_373_295 c_unique)) (forall ((?m1_372_296 c_unique)) (forall ((?m2_371_297 c_unique)) (forall ((?m3_370_298 c_unique)) (let ((?v_1 (c_sort type_alloc_table ?a_374_294)) (?v_0 (type_memory ?t_68_376_292 ?t_67_375_293))) (let ((?v_4 (c_sort ?v_0 ?m1_372_296)) (?v_2 (c_sort ?v_0 ?m2_371_297)) (?v_3 (c_sort (type_pset ?t_67_375_293) ?l_373_295)) (?v_5 (c_sort ?v_0 ?m3_370_298))) (=> (not_assigns ?v_1 ?v_4 ?v_2 ?v_3) (=> (not_assigns ?v_1 ?v_2 ?v_5 ?v_3) (not_assigns ?v_1 ?v_4 ?v_5 ?v_3))))))))))))) +(assert (forall ((?t_70_381_299 c_type)) (forall ((?t_69_380_300 c_type)) (forall ((?a_379_301 c_unique)) (forall ((?l_378_302 c_unique)) (forall ((?m_377_303 c_unique)) (let ((?v_0 (c_sort (type_memory ?t_70_381_299 ?t_69_380_300) ?m_377_303))) (not_assigns (c_sort type_alloc_table ?a_379_301) ?v_0 ?v_0 (c_sort (type_pset ?t_69_380_300) ?l_378_302))))))))) +(declare-fun valid_acc (c_ssorted) Bool) +(assert (forall ((?t_72_386_304 c_type)) (forall ((?t_71_385_305 c_type)) (forall ((?m1_384_306 c_unique)) (= (valid_acc (c_sort (type_memory (type_pointer ?t_71_385_305) ?t_72_386_304) ?m1_384_306)) (forall ((?p_383_307 c_unique)) (forall ((?a_382_308 c_unique)) (let ((?v_1 (type_pointer ?t_71_385_305)) (?v_0 (c_sort type_alloc_table ?a_382_308)) (?v_2 (c_sort (type_pointer ?t_72_386_304) ?p_383_307))) (=> (valid ?v_0 ?v_2) (valid ?v_0 (c_sort ?v_1 (acc (c_sort (type_memory ?v_1 ?t_72_386_304) ?m1_384_306) ?v_2)))))))))))) +(declare-fun valid_acc_range (c_ssorted Int) Bool) +(assert (forall ((?t_74_392_309 c_type)) (forall ((?t_73_391_310 c_type)) (forall ((?m1_390_311 c_unique)) (forall ((?size_389_312 Int)) (= (valid_acc_range (c_sort (type_memory (type_pointer ?t_73_391_310) ?t_74_392_309) ?m1_390_311) ?size_389_312) (forall ((?p_388_313 c_unique)) (forall ((?a_387_314 c_unique)) (let ((?v_1 (type_pointer ?t_73_391_310)) (?v_0 (c_sort type_alloc_table ?a_387_314)) (?v_2 (c_sort (type_pointer ?t_74_392_309) ?p_388_313))) (=> (valid ?v_0 ?v_2) (valid_range ?v_0 (c_sort ?v_1 (acc (c_sort (type_memory ?v_1 ?t_74_392_309) ?m1_390_311) ?v_2)) 0 (- ?size_389_312 1)))))))))))) +(assert (forall ((?t_76_398_315 c_type)) (forall ((?t_75_397_316 c_type)) (forall ((?m1_396_317 c_unique)) (forall ((?size_395_318 Int)) (forall ((?p_394_319 c_unique)) (forall ((?a_393_320 c_unique)) (let ((?v_1 (type_pointer ?t_75_397_316))) (let ((?v_2 (c_sort (type_memory ?v_1 ?t_76_398_315) ?m1_396_317)) (?v_0 (c_sort type_alloc_table ?a_393_320)) (?v_3 (c_sort (type_pointer ?t_76_398_315) ?p_394_319))) (=> (valid_acc_range ?v_2 ?size_395_318) (=> (valid ?v_0 ?v_3) (valid ?v_0 (c_sort ?v_1 (acc ?v_2 ?v_3)))))))))))))) +(declare-fun separation1 (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_78_404_321 c_type)) (forall ((?t_77_403_322 c_type)) (forall ((?m1_402_323 c_unique)) (forall ((?m2_401_324 c_unique)) (let ((?v_0 (type_memory (type_pointer ?t_77_403_322) ?t_78_404_321))) (= (separation1 (c_sort ?v_0 ?m1_402_323) (c_sort ?v_0 ?m2_401_324)) (forall ((?p_400_325 c_unique)) (forall ((?a_399_326 c_unique)) (let ((?v_1 (type_pointer ?t_77_403_322)) (?v_2 (c_sort (type_pointer ?t_78_404_321) ?p_400_325))) (=> (valid (c_sort type_alloc_table ?a_399_326) ?v_2) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_402_323) ?v_2))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_401_324) ?v_2)))))))))))))))) +(declare-fun separation1_range1 (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_80_412_327 c_type)) (forall ((?t_79_411_328 c_type)) (forall ((?m1_410_329 c_unique)) (forall ((?m2_409_330 c_unique)) (forall ((?size_408_331 Int)) (let ((?v_0 (type_memory (type_pointer ?t_79_411_328) ?t_80_412_327))) (= (separation1_range1 (c_sort ?v_0 ?m1_410_329) (c_sort ?v_0 ?m2_409_330) ?size_408_331) (forall ((?p_407_332 c_unique)) (forall ((?a_406_333 c_unique)) (=> (valid (c_sort type_alloc_table ?a_406_333) (c_sort (type_pointer ?t_80_412_327) ?p_407_332)) (forall ((?i_405_334 Int)) (let ((?v_1 (type_pointer ?t_79_411_328)) (?v_2 (type_pointer ?t_80_412_327))) (let ((?v_3 (c_sort ?v_2 ?p_407_332))) (=> (and (<= 0 ?i_405_334) (< ?i_405_334 ?size_408_331)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_410_329) (c_sort ?v_2 (shift ?v_3 ?i_405_334))))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_409_330) ?v_3)))))))))))))))))))) +(declare-fun separation1_range (c_ssorted Int) Bool) +(assert (forall ((?t_82_420_335 c_type)) (forall ((?t_81_419_336 c_type)) (forall ((?m_418_337 c_unique)) (forall ((?size_417_338 Int)) (= (separation1_range (c_sort (type_memory (type_pointer ?t_81_419_336) ?t_82_420_335) ?m_418_337) ?size_417_338) (forall ((?p_416_339 c_unique)) (forall ((?a_415_340 c_unique)) (=> (valid (c_sort type_alloc_table ?a_415_340) (c_sort (type_pointer ?t_82_420_335) ?p_416_339)) (forall ((?i1_414_341 Int)) (forall ((?i2_413_342 Int)) (let ((?v_0 (type_pointer ?t_81_419_336))) (let ((?v_2 (c_sort (type_memory ?v_0 ?t_82_420_335) ?m_418_337)) (?v_1 (type_pointer ?t_82_420_335))) (let ((?v_3 (c_sort ?v_1 ?p_416_339))) (=> (and (<= 0 ?i1_414_341) (< ?i1_414_341 ?size_417_338)) (=> (and (<= 0 ?i2_413_342) (< ?i2_413_342 ?size_417_338)) (=> (not (= ?i1_414_341 ?i2_413_342)) (not (= (base_addr (c_sort ?v_0 (acc ?v_2 (c_sort ?v_1 (shift ?v_3 ?i1_414_341))))) (base_addr (c_sort ?v_0 (acc ?v_2 (c_sort ?v_1 (shift ?v_3 ?i2_413_342)))))))))))))))))))))))) +(declare-fun separation2 (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_84_426_343 c_type)) (forall ((?t_83_425_344 c_type)) (forall ((?m1_424_345 c_unique)) (forall ((?m2_423_346 c_unique)) (let ((?v_0 (type_memory (type_pointer ?t_83_425_344) ?t_84_426_343))) (= (separation2 (c_sort ?v_0 ?m1_424_345) (c_sort ?v_0 ?m2_423_346)) (forall ((?p1_422_347 c_unique)) (forall ((?p2_421_348 c_unique)) (let ((?v_1 (type_pointer ?t_83_425_344)) (?v_2 (type_pointer ?t_84_426_343))) (=> (not (= ?p1_422_347 ?p2_421_348)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_424_345) (c_sort ?v_2 ?p1_422_347)))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_423_346) (c_sort ?v_2 ?p2_421_348))))))))))))))))) +(declare-fun separation2_range1 (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_86_435_349 c_type)) (forall ((?t_85_434_350 c_type)) (forall ((?m1_433_351 c_unique)) (forall ((?m2_432_352 c_unique)) (forall ((?size_431_353 Int)) (let ((?v_0 (type_memory (type_pointer ?t_85_434_350) ?t_86_435_349))) (= (separation2_range1 (c_sort ?v_0 ?m1_433_351) (c_sort ?v_0 ?m2_432_352) ?size_431_353) (forall ((?p_430_354 c_unique)) (forall ((?q_429_355 c_unique)) (forall ((?a_428_356 c_unique)) (forall ((?i_427_357 Int)) (let ((?v_1 (type_pointer ?t_85_434_350)) (?v_2 (type_pointer ?t_86_435_349))) (=> (and (<= 0 ?i_427_357) (< ?i_427_357 ?size_431_353)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_433_351) (c_sort ?v_2 (shift (c_sort ?v_2 ?p_430_354) ?i_427_357))))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_432_352) (c_sort ?v_2 ?q_429_355)))))))))))))))))))) +(declare-fun on_heap (c_ssorted c_ssorted) Bool) +(declare-fun on_stack (c_ssorted c_ssorted) Bool) +(declare-fun fresh (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_87_438_358 c_type)) (forall ((?a_437_359 c_unique)) (forall ((?p_436_360 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a_437_359)) (?v_1 (c_sort (type_pointer ?t_87_438_358) ?p_436_360))) (=> (fresh ?v_0 ?v_1) (not (valid ?v_0 ?v_1)))))))) +(assert (forall ((?t_88_442_361 c_type)) (forall ((?a_441_362 c_unique)) (forall ((?p_440_363 c_unique)) (=> (fresh (c_sort type_alloc_table ?a_441_362) (c_sort (type_pointer ?t_88_442_361) ?p_440_363)) (forall ((?i_439_364 Int)) (let ((?v_0 (type_pointer ?t_88_442_361))) (not (valid (c_sort type_alloc_table ?a_441_362) (c_sort ?v_0 (shift (c_sort ?v_0 ?p_440_363) ?i_439_364))))))))))) +(declare-fun alloc_extends (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_89_446_365 c_type)) (forall ((?a1_445_366 c_unique)) (forall ((?a2_444_367 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_445_366) (c_sort type_alloc_table ?a2_444_367)) (forall ((?q_443_368 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_89_446_365) ?q_443_368))) (=> (valid (c_sort type_alloc_table ?a1_445_366) ?v_0) (valid (c_sort type_alloc_table ?a2_444_367) ?v_0))))))))) +(assert (forall ((?t_90_451_369 c_type)) (forall ((?a1_450_370 c_unique)) (forall ((?a2_449_371 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_450_370) (c_sort type_alloc_table ?a2_449_371)) (forall ((?q_448_372 c_unique)) (forall ((?i_447_373 Int)) (let ((?v_0 (c_sort (type_pointer ?t_90_451_369) ?q_448_372))) (=> (valid_index (c_sort type_alloc_table ?a1_450_370) ?v_0 ?i_447_373) (valid_index (c_sort type_alloc_table ?a2_449_371) ?v_0 ?i_447_373)))))))))) +(assert (forall ((?t_91_457_374 c_type)) (forall ((?a1_456_375 c_unique)) (forall ((?a2_455_376 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_456_375) (c_sort type_alloc_table ?a2_455_376)) (forall ((?q_454_377 c_unique)) (forall ((?i_453_378 Int)) (forall ((?j_452_379 Int)) (let ((?v_0 (c_sort (type_pointer ?t_91_457_374) ?q_454_377))) (=> (valid_range (c_sort type_alloc_table ?a1_456_375) ?v_0 ?i_453_378 ?j_452_379) (valid_range (c_sort type_alloc_table ?a2_455_376) ?v_0 ?i_453_378 ?j_452_379))))))))))) +(assert (forall ((?a_458_380 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a_458_380))) (alloc_extends ?v_0 ?v_0)))) +(assert (forall ((?a1_461_381 c_unique)) (forall ((?a2_460_382 c_unique)) (forall ((?a3_459_383 c_unique)) (let ((?v_1 (c_sort type_alloc_table ?a1_461_381)) (?v_0 (c_sort type_alloc_table ?a2_460_382)) (?v_2 (c_sort type_alloc_table ?a3_459_383))) (=> (alloc_extends ?v_1 ?v_0) (=> (alloc_extends ?v_0 ?v_2) (alloc_extends ?v_1 ?v_2)))))))) +(declare-fun free_stack (c_ssorted c_ssorted c_ssorted) Bool) +(assert (forall ((?t_92_466_384 c_type)) (forall ((?a1_465_385 c_unique)) (forall ((?a2_464_386 c_unique)) (forall ((?a3_463_387 c_unique)) (=> (free_stack (c_sort type_alloc_table ?a1_465_385) (c_sort type_alloc_table ?a2_464_386) (c_sort type_alloc_table ?a3_463_387)) (forall ((?p_462_388 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a2_464_386)) (?v_1 (c_sort (type_pointer ?t_92_466_384) ?p_462_388))) (=> (valid ?v_0 ?v_1) (=> (on_heap ?v_0 ?v_1) (valid (c_sort type_alloc_table ?a3_463_387) ?v_1))))))))))) +(assert (forall ((?t_93_471_389 c_type)) (forall ((?a1_470_390 c_unique)) (forall ((?a2_469_391 c_unique)) (forall ((?a3_468_392 c_unique)) (=> (free_stack (c_sort type_alloc_table ?a1_470_390) (c_sort type_alloc_table ?a2_469_391) (c_sort type_alloc_table ?a3_468_392)) (forall ((?p_467_393 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a1_470_390)) (?v_1 (c_sort (type_pointer ?t_93_471_389) ?p_467_393))) (=> (valid ?v_0 ?v_1) (=> (on_stack ?v_0 ?v_1) (valid (c_sort type_alloc_table ?a3_468_392) ?v_1))))))))))) +(declare-fun null () c_unique) +(assert (forall ((?t_94_475_394 c_type)) (forall ((?a_474_395 c_unique)) (not (valid (c_sort type_alloc_table ?a_474_395) (c_sort (type_pointer ?t_94_475_394) null)))))) +(declare-fun type_global () c_type) +(assert (not (forall ((?alloc c_unique)) (forall ((?b Int)) (forall ((?t c_unique)) (=> (and (= ?b 0) (valid_range (c_sort type_alloc_table ?alloc) (c_sort (type_pointer type_global) ?t) 0 9)) (forall ((?b0 Int)) (=> (= ?b0 (+ ?b 1)) (forall ((?result c_unique)) (let ((?v_0 (type_pointer type_global))) (let ((?v_2 (c_sort ?v_0 ?result))) (let ((?v_1 (offset ?v_2))) (=> (= ?result (shift (c_sort ?v_0 ?t) ?b)) (and (<= 0 ?v_1) (< ?v_1 (block_length (c_sort type_alloc_table ?alloc) ?v_2)))))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/smtlibf957ea.smt2 b/test/regress/regress0/quantifiers/smtlibf957ea.smt2 new file mode 100644 index 000000000..aa82255ef --- /dev/null +++ b/test/regress/regress0/quantifiers/smtlibf957ea.smt2 @@ -0,0 +1,212 @@ +(set-logic AUFLIRA) +(set-info :source |http://proval.lri.fr/why-benchmarks |) +(set-info :smt-lib-version 2.0) +(set-info :category "industrial") +(set-info :status unsat) +(declare-sort Unit 0) +(declare-sort c_unique 0) +(declare-sort c_ssorted 0) +(declare-sort c_type 0) +(declare-sort c_Boolean 0) +(declare-fun whydivide (Int Int) Int) +(declare-fun % (Int Int) Int) +(declare-fun c_sort (c_type c_unique) c_ssorted) +(declare-fun c_Boolean_true () c_Boolean) +(declare-fun c_Boolean_false () c_Boolean) +(assert (forall ((?b_22_1 c_Boolean)) (or (= c_Boolean_true ?b_22_1) (= c_Boolean_false ?b_22_1)))) +(assert (not (= c_Boolean_true c_Boolean_false))) +(declare-fun int2U (Int) c_unique) +(declare-fun ss2Int (c_ssorted) Int) +(declare-fun real2U (Real) c_unique) +(declare-fun ss2Real (c_ssorted) Real) +(declare-fun bool2U (c_Boolean) c_unique) +(declare-fun ss2Bool (c_ssorted) c_Boolean) +(declare-fun c_int () c_type) +(declare-fun c_bool () c_type) +(declare-fun c_real () c_type) +(declare-fun c_unit () c_type) +(declare-fun c_ref (c_unique) c_unique) +(assert (forall ((?t_21_2 c_type)) (forall ((?x_20_3 c_unique)) (forall ((?y_19_4 c_unique)) (=> (= (c_sort ?t_21_2 ?x_20_3) (c_sort ?t_21_2 ?y_19_4)) (= ?x_20_3 ?y_19_4)))))) +(assert (forall ((?x_18_5 Int)) (= (ss2Int (c_sort c_int (int2U ?x_18_5))) ?x_18_5))) +(assert (forall ((?x_17_6 Int)) (forall ((?y_16_7 Int)) (=> (= (int2U ?x_17_6) (int2U ?y_16_7)) (= ?x_17_6 ?y_16_7))))) +(assert (forall ((?x_15_8 Real)) (forall ((?y_14_9 Real)) (=> (= (real2U ?x_15_8) (real2U ?y_14_9)) (= ?x_15_8 ?y_14_9))))) +(assert (forall ((?x_13_10 c_Boolean)) (forall ((?y_12_11 c_Boolean)) (=> (= (bool2U ?x_13_10) (bool2U ?y_12_11)) (= ?x_13_10 ?y_12_11))))) +(assert (forall ((?x_11_12 c_ssorted)) (forall ((?y_10_13 c_ssorted)) (=> (= (ss2Int ?x_11_12) (ss2Int ?y_10_13)) (= ?x_11_12 ?y_10_13))))) +(assert (forall ((?x_9_14 c_ssorted)) (forall ((?y_8_15 c_ssorted)) (=> (= (ss2Real ?x_9_14) (ss2Real ?y_8_15)) (= ?x_9_14 ?y_8_15))))) +(assert (forall ((?x_7_16 c_ssorted)) (forall ((?y_6_17 c_ssorted)) (=> (= (ss2Bool ?x_7_16) (ss2Bool ?y_6_17)) (= ?x_7_16 ?y_6_17))))) +(assert (forall ((?x_5_18 Real)) (= (ss2Real (c_sort c_real (real2U ?x_5_18))) ?x_5_18))) +(assert (forall ((?x_4_19 c_Boolean)) (= (ss2Bool (c_sort c_bool (bool2U ?x_4_19))) ?x_4_19))) +(assert (forall ((?x_3_20 c_unique)) (= (int2U (ss2Int (c_sort c_int ?x_3_20))) ?x_3_20))) +(assert (forall ((?x_2_21 c_unique)) (= (real2U (ss2Real (c_sort c_real ?x_2_21))) ?x_2_21))) +(assert (forall ((?x_1_22 c_unique)) (= (bool2U (ss2Bool (c_sort c_bool ?x_1_22))) ?x_1_22))) +(declare-fun eq_int (Int Int) Bool) +(declare-fun neq_int (Int Int) Bool) +(declare-fun lt_int_bool (Int Int) c_Boolean) +(declare-fun le_int_bool (Int Int) c_Boolean) +(declare-fun gt_int_bool (Int Int) c_Boolean) +(declare-fun ge_int_bool (Int Int) c_Boolean) +(declare-fun eq_int_bool (Int Int) c_Boolean) +(declare-fun neq_int_bool (Int Int) c_Boolean) +(assert (forall ((?x_40_23 Int)) (forall ((?y_39_24 Int)) (= (= (lt_int_bool ?x_40_23 ?y_39_24) c_Boolean_true) (< ?x_40_23 ?y_39_24))))) +(assert (forall ((?x_42_25 Int)) (forall ((?y_41_26 Int)) (= (= (le_int_bool ?x_42_25 ?y_41_26) c_Boolean_true) (<= ?x_42_25 ?y_41_26))))) +(assert (forall ((?x_44_27 Int)) (forall ((?y_43_28 Int)) (= (= (gt_int_bool ?x_44_27 ?y_43_28) c_Boolean_true) (> ?x_44_27 ?y_43_28))))) +(assert (forall ((?x_46_29 Int)) (forall ((?y_45_30 Int)) (= (= (ge_int_bool ?x_46_29 ?y_45_30) c_Boolean_true) (>= ?x_46_29 ?y_45_30))))) +(assert (forall ((?x_48_31 Int)) (forall ((?y_47_32 Int)) (= (= (eq_int_bool ?x_48_31 ?y_47_32) c_Boolean_true) (= ?x_48_31 ?y_47_32))))) +(assert (forall ((?x_50_33 Int)) (forall ((?y_49_34 Int)) (= (= (neq_int_bool ?x_50_33 ?y_49_34) c_Boolean_true) (not (= ?x_50_33 ?y_49_34)))))) +(declare-fun add_real (Real Real) Real) +(declare-fun sub_real (Real Real) Real) +(declare-fun mul_real (Real Real) Real) +(declare-fun div_real (Real Real) Real) +(declare-fun pow_real (Real Real) Real) +(declare-fun neg_real (Real) Real) +(declare-fun abs_real (Real) Real) +(declare-fun sqrt_real (Real) Real) +(declare-fun real_of_int (Int) Real) +(declare-fun int_of_real (Real) Int) +(declare-fun lt_real (Real Real) Bool) +(declare-fun le_real (Real Real) Bool) +(declare-fun gt_real (Real Real) Bool) +(declare-fun ge_real (Real Real) Bool) +(declare-fun eq_real (Real Real) Bool) +(declare-fun neq_real (Real Real) Bool) +(declare-fun eq_bool (c_Boolean c_Boolean) Bool) +(declare-fun neq_bool (c_Boolean c_Boolean) Bool) +(declare-fun eq_unit (c_ssorted c_ssorted) Bool) +(declare-fun neq_unit (c_ssorted c_ssorted) Bool) +(declare-fun smtlib__ite (c_Boolean c_ssorted c_ssorted) c_unique) +(assert (forall ((?t_1_76_35 c_type)) (forall ((?x_75_36 c_unique)) (forall ((?y_74_37 c_unique)) (= (smtlib__ite c_Boolean_true (c_sort ?t_1_76_35 ?x_75_36) (c_sort ?t_1_76_35 ?y_74_37)) ?x_75_36))))) +(assert (forall ((?t_2_79_38 c_type)) (forall ((?x_78_39 c_unique)) (forall ((?y_77_40 c_unique)) (= (smtlib__ite c_Boolean_false (c_sort ?t_2_79_38 ?x_78_39) (c_sort ?t_2_79_38 ?y_77_40)) ?y_77_40))))) +(declare-fun bw_compl (Int) Int) +(declare-fun bw_and (Int Int) Int) +(declare-fun bw_xor (Int Int) Int) +(declare-fun bw_or (Int Int) Int) +(declare-fun lsl (Int Int) Int) +(declare-fun lsr (Int Int) Int) +(declare-fun non_int (Int) Int) +(declare-fun type_pointer (c_type) c_type) +(declare-fun type_addr (c_type) c_type) +(declare-fun type_alloc_table () c_type) +(declare-fun block_length (c_ssorted c_ssorted) Int) +(declare-fun base_addr (c_ssorted) c_unique) +(declare-fun offset (c_ssorted) Int) +(declare-fun shift (c_ssorted Int) c_unique) +(declare-fun sub_pointer (c_ssorted c_ssorted) Int) +(declare-fun lt_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_3_88_41 c_type)) (forall ((?p1_87_42 c_unique)) (forall ((?p2_86_43 c_unique)) (let ((?v_0 (type_pointer ?t_3_88_41))) (let ((?v_1 (c_sort ?v_0 ?p1_87_42)) (?v_2 (c_sort ?v_0 ?p2_86_43))) (= (lt_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (< (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun le_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_4_91_44 c_type)) (forall ((?p1_90_45 c_unique)) (forall ((?p2_89_46 c_unique)) (let ((?v_0 (type_pointer ?t_4_91_44))) (let ((?v_1 (c_sort ?v_0 ?p1_90_45)) (?v_2 (c_sort ?v_0 ?p2_89_46))) (= (le_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (<= (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun gt_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_5_94_47 c_type)) (forall ((?p1_93_48 c_unique)) (forall ((?p2_92_49 c_unique)) (let ((?v_0 (type_pointer ?t_5_94_47))) (let ((?v_1 (c_sort ?v_0 ?p1_93_48)) (?v_2 (c_sort ?v_0 ?p2_92_49))) (= (gt_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (> (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun ge_pointer (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_6_97_50 c_type)) (forall ((?p1_96_51 c_unique)) (forall ((?p2_95_52 c_unique)) (let ((?v_0 (type_pointer ?t_6_97_50))) (let ((?v_1 (c_sort ?v_0 ?p1_96_51)) (?v_2 (c_sort ?v_0 ?p2_95_52))) (= (ge_pointer ?v_1 ?v_2) (and (= (base_addr ?v_1) (base_addr ?v_2)) (>= (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun valid (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_7_104_53 c_type)) (forall ((?a_103_54 c_unique)) (forall ((?p_102_55 c_unique)) (let ((?v_2 (c_sort type_alloc_table ?a_103_54)) (?v_0 (c_sort (type_pointer ?t_7_104_53) ?p_102_55))) (let ((?v_1 (offset ?v_0))) (= (valid ?v_2 ?v_0) (and (<= 0 ?v_1) (< ?v_1 (block_length ?v_2 ?v_0)))))))))) +(declare-fun valid_index (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_8_108_56 c_type)) (forall ((?a_107_57 c_unique)) (forall ((?p_106_58 c_unique)) (forall ((?i_105_59 Int)) (let ((?v_2 (c_sort type_alloc_table ?a_107_57)) (?v_0 (c_sort (type_pointer ?t_8_108_56) ?p_106_58))) (let ((?v_1 (+ (offset ?v_0) ?i_105_59))) (= (valid_index ?v_2 ?v_0 ?i_105_59) (and (<= 0 ?v_1) (< ?v_1 (block_length ?v_2 ?v_0))))))))))) +(declare-fun valid_range (c_ssorted c_ssorted Int Int) Bool) +(assert (forall ((?t_9_113_60 c_type)) (forall ((?a_112_61 c_unique)) (forall ((?p_111_62 c_unique)) (forall ((?i_110_63 Int)) (forall ((?j_109_64 Int)) (let ((?v_2 (c_sort type_alloc_table ?a_112_61)) (?v_0 (c_sort (type_pointer ?t_9_113_60) ?p_111_62))) (let ((?v_1 (offset ?v_0))) (= (valid_range ?v_2 ?v_0 ?i_110_63 ?j_109_64) (and (<= 0 (+ ?v_1 ?i_110_63)) (< (+ ?v_1 ?j_109_64) (block_length ?v_2 ?v_0)))))))))))) +(assert (forall ((?t_10_116_65 c_type)) (forall ((?p_115_66 c_unique)) (forall ((?i_114_67 Int)) (let ((?v_0 (type_pointer ?t_10_116_65))) (let ((?v_1 (c_sort ?v_0 ?p_115_66))) (= (offset (c_sort ?v_0 (shift ?v_1 ?i_114_67))) (+ (offset ?v_1) ?i_114_67)))))))) +(assert (forall ((?t_11_118_68 c_type)) (forall ((?p_117_69 c_unique)) (= (shift (c_sort (type_pointer ?t_11_118_68) ?p_117_69) 0) ?p_117_69)))) +(assert (forall ((?t_12_122_70 c_type)) (forall ((?p_121_71 c_unique)) (forall ((?i_120_72 Int)) (forall ((?j_119_73 Int)) (let ((?v_0 (type_pointer ?t_12_122_70))) (let ((?v_1 (c_sort ?v_0 ?p_121_71))) (= (shift (c_sort ?v_0 (shift ?v_1 ?i_120_72)) ?j_119_73) (shift ?v_1 (+ ?i_120_72 ?j_119_73)))))))))) +(assert (forall ((?t_13_125_74 c_type)) (forall ((?p_124_75 c_unique)) (forall ((?i_123_76 Int)) (let ((?v_0 (type_pointer ?t_13_125_74))) (let ((?v_1 (c_sort ?v_0 ?p_124_75))) (= (base_addr (c_sort ?v_0 (shift ?v_1 ?i_123_76))) (base_addr ?v_1)))))))) +(assert (forall ((?t_14_129_77 c_type)) (forall ((?a_128_78 c_unique)) (forall ((?p_127_79 c_unique)) (forall ((?i_126_80 Int)) (let ((?v_1 (c_sort type_alloc_table ?a_128_78)) (?v_0 (type_pointer ?t_14_129_77))) (let ((?v_2 (c_sort ?v_0 ?p_127_79))) (= (block_length ?v_1 (c_sort ?v_0 (shift ?v_2 ?i_126_80))) (block_length ?v_1 ?v_2))))))))) +(assert (forall ((?t_15_133_81 c_type)) (forall ((?a_132_82 c_unique)) (forall ((?p1_131_83 c_unique)) (forall ((?p2_130_84 c_unique)) (let ((?v_0 (type_pointer ?t_15_133_81))) (let ((?v_1 (c_sort ?v_0 ?p1_131_83)) (?v_3 (c_sort ?v_0 ?p2_130_84)) (?v_2 (c_sort type_alloc_table ?a_132_82))) (=> (= (base_addr ?v_1) (base_addr ?v_3)) (= (block_length ?v_2 ?v_1) (block_length ?v_2 ?v_3)))))))))) +(assert (forall ((?t_16_136_85 c_type)) (forall ((?p1_135_86 c_unique)) (forall ((?p2_134_87 c_unique)) (let ((?v_0 (type_pointer ?t_16_136_85))) (let ((?v_1 (c_sort ?v_0 ?p1_135_86)) (?v_2 (c_sort ?v_0 ?p2_134_87))) (=> (and (= (base_addr ?v_1) (base_addr ?v_2)) (= (offset ?v_1) (offset ?v_2))) (= ?p1_135_86 ?p2_134_87)))))))) +(assert (forall ((?t_17_139_88 c_type)) (forall ((?p1_138_89 c_unique)) (forall ((?p2_137_90 c_unique)) (let ((?v_0 (type_pointer ?t_17_139_88))) (let ((?v_1 (c_sort ?v_0 ?p1_138_89)) (?v_2 (c_sort ?v_0 ?p2_137_90))) (=> (= ?p1_138_89 ?p2_137_90) (and (= (base_addr ?v_1) (base_addr ?v_2)) (= (offset ?v_1) (offset ?v_2)))))))))) +(assert (forall ((?t_18_144_91 c_type)) (forall ((?p1_143_92 c_unique)) (forall ((?p2_142_93 c_unique)) (forall ((?i_141_94 Int)) (forall ((?j_140_95 Int)) (let ((?v_0 (type_pointer ?t_18_144_91))) (let ((?v_1 (c_sort ?v_0 ?p1_143_92)) (?v_2 (c_sort ?v_0 ?p2_142_93))) (=> (not (= (base_addr ?v_1) (base_addr ?v_2))) (not (= (shift ?v_1 ?i_141_94) (shift ?v_2 ?j_140_95)))))))))))) +(assert (forall ((?t_19_149_96 c_type)) (forall ((?p1_148_97 c_unique)) (forall ((?p2_147_98 c_unique)) (forall ((?i_146_99 Int)) (forall ((?j_145_100 Int)) (let ((?v_0 (type_pointer ?t_19_149_96))) (let ((?v_1 (c_sort ?v_0 ?p1_148_97)) (?v_2 (c_sort ?v_0 ?p2_147_98))) (=> (not (= (+ (offset ?v_1) ?i_146_99) (+ (offset ?v_2) ?j_145_100))) (not (= (shift ?v_1 ?i_146_99) (shift ?v_2 ?j_145_100)))))))))))) +(assert (forall ((?t_20_154_101 c_type)) (forall ((?p1_153_102 c_unique)) (forall ((?p2_152_103 c_unique)) (forall ((?i_151_104 Int)) (forall ((?j_150_105 Int)) (let ((?v_0 (type_pointer ?t_20_154_101))) (let ((?v_1 (c_sort ?v_0 ?p1_153_102)) (?v_2 (c_sort ?v_0 ?p2_152_103))) (=> (= (base_addr ?v_1) (base_addr ?v_2)) (=> (= (+ (offset ?v_1) ?i_151_104) (+ (offset ?v_2) ?j_150_105)) (= (shift ?v_1 ?i_151_104) (shift ?v_2 ?j_150_105)))))))))))) +(assert (forall ((?t_21_158_106 c_type)) (forall ((?a_157_107 c_unique)) (forall ((?p_156_108 c_unique)) (forall ((?i_155_109 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_157_107)) (?v_1 (type_pointer ?t_21_158_106))) (let ((?v_2 (c_sort ?v_1 ?p_156_108))) (=> (valid_index ?v_0 ?v_2 ?i_155_109) (valid ?v_0 (c_sort ?v_1 (shift ?v_2 ?i_155_109))))))))))) +(assert (forall ((?t_22_164_110 c_type)) (forall ((?a_163_111 c_unique)) (forall ((?p_162_112 c_unique)) (forall ((?i_161_113 Int)) (forall ((?j_160_114 Int)) (forall ((?k_159_115 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_163_111)) (?v_1 (type_pointer ?t_22_164_110))) (let ((?v_2 (c_sort ?v_1 ?p_162_112))) (=> (valid_range ?v_0 ?v_2 ?i_161_113 ?j_160_114) (=> (and (<= ?i_161_113 ?k_159_115) (<= ?k_159_115 ?j_160_114)) (valid ?v_0 (c_sort ?v_1 (shift ?v_2 ?k_159_115)))))))))))))) +(assert (forall ((?t_23_169_116 c_type)) (forall ((?a_168_117 c_unique)) (forall ((?p_167_118 c_unique)) (forall ((?i_166_119 Int)) (forall ((?j_165_120 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_168_117)) (?v_1 (c_sort (type_pointer ?t_23_169_116) ?p_167_118))) (=> (valid_range ?v_0 ?v_1 ?i_166_119 ?j_165_120) (=> (and (<= ?i_166_119 0) (<= 0 ?j_165_120)) (valid ?v_0 ?v_1)))))))))) +(assert (forall ((?t_24_175_121 c_type)) (forall ((?a_174_122 c_unique)) (forall ((?p_173_123 c_unique)) (forall ((?i_172_124 Int)) (forall ((?j_171_125 Int)) (forall ((?k_170_126 Int)) (let ((?v_0 (c_sort type_alloc_table ?a_174_122)) (?v_1 (c_sort (type_pointer ?t_24_175_121) ?p_173_123))) (=> (valid_range ?v_0 ?v_1 ?i_172_124 ?j_171_125) (=> (and (<= ?i_172_124 ?k_170_126) (<= ?k_170_126 ?j_171_125)) (valid_index ?v_0 ?v_1 ?k_170_126))))))))))) +(assert (forall ((?t_25_178_127 c_type)) (forall ((?p1_177_128 c_unique)) (forall ((?p2_176_129 c_unique)) (let ((?v_0 (type_pointer ?t_25_178_127))) (let ((?v_1 (c_sort ?v_0 ?p1_177_128)) (?v_2 (c_sort ?v_0 ?p2_176_129))) (=> (= (base_addr ?v_1) (base_addr ?v_2)) (= (sub_pointer ?v_1 ?v_2) (- (offset ?v_1) (offset ?v_2)))))))))) +(declare-fun type_memory (c_type c_type) c_type) +(declare-fun acc (c_ssorted c_ssorted) c_unique) +(declare-fun upd (c_ssorted c_ssorted c_ssorted) c_unique) +(assert (forall ((?t_27_212_130 c_type)) (forall ((?t_26_211_131 c_type)) (forall ((?m_210_132 c_unique)) (forall ((?p_209_133 c_unique)) (forall ((?a_208_134 c_unique)) (let ((?v_0 (type_memory ?t_26_211_131 ?t_27_212_130)) (?v_1 (c_sort (type_pointer ?t_27_212_130) ?p_209_133))) (= (acc (c_sort ?v_0 (upd (c_sort ?v_0 ?m_210_132) ?v_1 (c_sort ?t_26_211_131 ?a_208_134))) ?v_1) ?a_208_134)))))))) +(assert (forall ((?t_29_218_135 c_type)) (forall ((?t_28_217_136 c_type)) (forall ((?m_216_137 c_unique)) (forall ((?p1_215_138 c_unique)) (forall ((?p2_214_139 c_unique)) (forall ((?a_213_140 c_unique)) (let ((?v_0 (type_memory ?t_28_217_136 ?t_29_218_135))) (let ((?v_2 (c_sort ?v_0 ?m_216_137)) (?v_1 (type_pointer ?t_29_218_135))) (let ((?v_3 (c_sort ?v_1 ?p2_214_139))) (=> (not (= ?p1_215_138 ?p2_214_139)) (= (acc (c_sort ?v_0 (upd ?v_2 (c_sort ?v_1 ?p1_215_138) (c_sort ?t_28_217_136 ?a_213_140))) ?v_3) (acc ?v_2 ?v_3))))))))))))) +(assert (not (= c_Boolean_false c_Boolean_true))) +(declare-fun type_pset (c_type) c_type) +(declare-fun pset_empty () c_unique) +(declare-fun pset_singleton (c_ssorted) c_unique) +(declare-fun pset_star (c_ssorted c_ssorted) c_unique) +(declare-fun pset_all (c_ssorted) c_unique) +(declare-fun pset_range (c_ssorted Int Int) c_unique) +(declare-fun pset_range_left (c_ssorted Int) c_unique) +(declare-fun pset_range_right (c_ssorted Int) c_unique) +(declare-fun pset_acc_all (c_ssorted c_ssorted) c_unique) +(declare-fun pset_acc_range (c_ssorted c_ssorted Int Int) c_unique) +(declare-fun pset_acc_range_left (c_ssorted c_ssorted Int) c_unique) +(declare-fun pset_acc_range_right (c_ssorted c_ssorted Int) c_unique) +(declare-fun pset_union (c_ssorted c_ssorted) c_unique) +(declare-fun not_in_pset (c_ssorted c_ssorted) Bool) +(declare-fun not_assigns (c_ssorted c_ssorted c_ssorted c_ssorted) Bool) +(assert (forall ((?t_31_225_141 c_type)) (forall ((?t_30_224_142 c_type)) (forall ((?a_223_143 c_unique)) (forall ((?m1_222_144 c_unique)) (forall ((?m2_221_145 c_unique)) (forall ((?l_220_146 c_unique)) (let ((?v_0 (type_memory ?t_30_224_142 ?t_31_225_141))) (= (not_assigns (c_sort type_alloc_table ?a_223_143) (c_sort ?v_0 ?m1_222_144) (c_sort ?v_0 ?m2_221_145) (c_sort (type_pset ?t_31_225_141) ?l_220_146)) (forall ((?p_219_147 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_31_225_141) ?p_219_147))) (=> (valid (c_sort type_alloc_table ?a_223_143) ?v_1) (=> (not_in_pset ?v_1 (c_sort (type_pset ?t_31_225_141) ?l_220_146)) (= (acc (c_sort ?v_0 ?m2_221_145) ?v_1) (acc (c_sort ?v_0 ?m1_222_144) ?v_1))))))))))))))) +(assert (forall ((?t_32_227_148 c_type)) (forall ((?p_226_149 c_unique)) (not_in_pset (c_sort (type_pointer ?t_32_227_148) ?p_226_149) (c_sort (type_pset ?t_32_227_148) pset_empty))))) +(assert (forall ((?t_33_230_150 c_type)) (forall ((?p1_229_151 c_unique)) (forall ((?p2_228_152 c_unique)) (let ((?v_0 (type_pointer ?t_33_230_150))) (=> (not (= ?p1_229_151 ?p2_228_152)) (not_in_pset (c_sort ?v_0 ?p1_229_151) (c_sort (type_pset ?t_33_230_150) (pset_singleton (c_sort ?v_0 ?p2_228_152)))))))))) +(assert (forall ((?t_34_233_153 c_type)) (forall ((?p1_232_154 c_unique)) (forall ((?p2_231_155 c_unique)) (let ((?v_0 (type_pointer ?t_34_233_153))) (=> (not_in_pset (c_sort ?v_0 ?p1_232_154) (c_sort (type_pset ?t_34_233_153) (pset_singleton (c_sort ?v_0 ?p2_231_155)))) (not (= ?p1_232_154 ?p2_231_155)))))))) +(assert (forall ((?t_35_235_156 c_type)) (forall ((?p_234_157 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_35_235_156) ?p_234_157))) (not (not_in_pset ?v_0 (c_sort (type_pset ?t_35_235_156) (pset_singleton ?v_0)))))))) +(assert (forall ((?t_36_239_158 c_type)) (forall ((?l1_238_159 c_unique)) (forall ((?l2_237_160 c_unique)) (forall ((?p_236_161 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_36_239_158) ?p_236_161)) (?v_1 (type_pset ?t_36_239_158))) (let ((?v_2 (c_sort ?v_1 ?l1_238_159)) (?v_3 (c_sort ?v_1 ?l2_237_160))) (=> (and (not_in_pset ?v_0 ?v_2) (not_in_pset ?v_0 ?v_3)) (not_in_pset ?v_0 (c_sort ?v_1 (pset_union ?v_2 ?v_3))))))))))) +(assert (forall ((?t_37_243_162 c_type)) (forall ((?l1_242_163 c_unique)) (forall ((?l2_241_164 c_unique)) (forall ((?p_240_165 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_37_243_162) ?p_240_165)) (?v_0 (type_pset ?t_37_243_162))) (let ((?v_2 (c_sort ?v_0 ?l1_242_163))) (=> (not_in_pset ?v_1 (c_sort ?v_0 (pset_union ?v_2 (c_sort ?v_0 ?l2_241_164)))) (not_in_pset ?v_1 ?v_2))))))))) +(assert (forall ((?t_38_247_166 c_type)) (forall ((?l1_246_167 c_unique)) (forall ((?l2_245_168 c_unique)) (forall ((?p_244_169 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_38_247_166) ?p_244_169)) (?v_0 (type_pset ?t_38_247_166))) (let ((?v_2 (c_sort ?v_0 ?l2_245_168))) (=> (not_in_pset ?v_1 (c_sort ?v_0 (pset_union (c_sort ?v_0 ?l1_246_167) ?v_2))) (not_in_pset ?v_1 ?v_2))))))))) +(assert (forall ((?t_40_253_170 c_type)) (forall ((?t_39_252_171 c_type)) (forall ((?l_251_172 c_unique)) (forall ((?m_250_173 c_unique)) (forall ((?p_249_174 c_unique)) (let ((?v_0 (type_pointer ?t_40_253_170))) (=> (forall ((?p1_248_175 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_39_252_171) ?p1_248_175))) (=> (= ?p_249_174 (acc (c_sort (type_memory ?v_0 ?t_39_252_171) ?m_250_173) ?v_1)) (not_in_pset ?v_1 (c_sort (type_pset ?t_39_252_171) ?l_251_172))))) (not_in_pset (c_sort ?v_0 ?p_249_174) (c_sort (type_pset ?t_40_253_170) (pset_star (c_sort (type_pset ?t_39_252_171) ?l_251_172) (c_sort (type_memory ?v_0 ?t_39_252_171) ?m_250_173)))))))))))) +(assert (forall ((?t_42_259_176 c_type)) (forall ((?t_41_258_177 c_type)) (forall ((?l_257_178 c_unique)) (forall ((?m_256_179 c_unique)) (forall ((?p_255_180 c_unique)) (let ((?v_0 (type_pointer ?t_42_259_176))) (=> (not_in_pset (c_sort ?v_0 ?p_255_180) (c_sort (type_pset ?t_42_259_176) (pset_star (c_sort (type_pset ?t_41_258_177) ?l_257_178) (c_sort (type_memory ?v_0 ?t_41_258_177) ?m_256_179)))) (forall ((?p1_254_181 c_unique)) (let ((?v_1 (c_sort (type_pointer ?t_41_258_177) ?p1_254_181))) (=> (= ?p_255_180 (acc (c_sort (type_memory ?v_0 ?t_41_258_177) ?m_256_179) ?v_1)) (not_in_pset ?v_1 (c_sort (type_pset ?t_41_258_177) ?l_257_178))))))))))))) +(assert (forall ((?t_43_263_182 c_type)) (forall ((?p_262_183 c_unique)) (forall ((?l_261_184 c_unique)) (let ((?v_0 (type_pset ?t_43_263_182))) (=> (forall ((?p1_260_185 c_unique)) (let ((?v_1 (type_pointer ?t_43_263_182))) (let ((?v_2 (c_sort ?v_1 ?p1_260_185))) (=> (not (not_in_pset ?v_2 (c_sort ?v_0 ?l_261_184))) (not (= (base_addr (c_sort ?v_1 ?p_262_183)) (base_addr ?v_2))))))) (not_in_pset (c_sort (type_pointer ?t_43_263_182) ?p_262_183) (c_sort ?v_0 (pset_all (c_sort ?v_0 ?l_261_184)))))))))) +(assert (forall ((?t_44_267_186 c_type)) (forall ((?p_266_187 c_unique)) (forall ((?l_265_188 c_unique)) (let ((?v_0 (type_pset ?t_44_267_186))) (=> (not_in_pset (c_sort (type_pointer ?t_44_267_186) ?p_266_187) (c_sort ?v_0 (pset_all (c_sort ?v_0 ?l_265_188)))) (forall ((?p1_264_189 c_unique)) (let ((?v_1 (type_pointer ?t_44_267_186))) (let ((?v_2 (c_sort ?v_1 ?p1_264_189))) (=> (not (not_in_pset ?v_2 (c_sort ?v_0 ?l_265_188))) (not (= (base_addr (c_sort ?v_1 ?p_266_187)) (base_addr ?v_2))))))))))))) +(assert (forall ((?t_45_274_190 c_type)) (forall ((?p_273_191 c_unique)) (forall ((?l_272_192 c_unique)) (forall ((?a_271_193 Int)) (forall ((?b_270_194 Int)) (let ((?v_0 (type_pset ?t_45_274_190))) (=> (forall ((?p1_269_195 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_45_274_190) ?p1_269_195) (c_sort ?v_0 ?l_272_192)) (forall ((?i_268_196 Int)) (=> (and (<= ?a_271_193 ?i_268_196) (<= ?i_268_196 ?b_270_194)) (not (= ?p_273_191 (shift (c_sort (type_pointer ?t_45_274_190) ?p1_269_195) ?i_268_196))))))) (not_in_pset (c_sort (type_pointer ?t_45_274_190) ?p_273_191) (c_sort ?v_0 (pset_range (c_sort ?v_0 ?l_272_192) ?a_271_193 ?b_270_194))))))))))) +(assert (forall ((?t_46_281_197 c_type)) (forall ((?p_280_198 c_unique)) (forall ((?l_279_199 c_unique)) (forall ((?a_278_200 Int)) (forall ((?b_277_201 Int)) (let ((?v_0 (type_pset ?t_46_281_197))) (=> (not_in_pset (c_sort (type_pointer ?t_46_281_197) ?p_280_198) (c_sort ?v_0 (pset_range (c_sort ?v_0 ?l_279_199) ?a_278_200 ?b_277_201))) (forall ((?p1_276_202 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_46_281_197) ?p1_276_202) (c_sort ?v_0 ?l_279_199))) (forall ((?i_275_203 Int)) (=> (and (<= ?a_278_200 ?i_275_203) (<= ?i_275_203 ?b_277_201)) (not (= (shift (c_sort (type_pointer ?t_46_281_197) ?p1_276_202) ?i_275_203) ?p_280_198)))))))))))))) +(assert (forall ((?t_47_287_204 c_type)) (forall ((?p_286_205 c_unique)) (forall ((?l_285_206 c_unique)) (forall ((?a_284_207 Int)) (let ((?v_0 (type_pset ?t_47_287_204))) (=> (forall ((?p1_283_208 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_47_287_204) ?p1_283_208) (c_sort ?v_0 ?l_285_206)) (forall ((?i_282_209 Int)) (=> (<= ?i_282_209 ?a_284_207) (not (= ?p_286_205 (shift (c_sort (type_pointer ?t_47_287_204) ?p1_283_208) ?i_282_209))))))) (not_in_pset (c_sort (type_pointer ?t_47_287_204) ?p_286_205) (c_sort ?v_0 (pset_range_left (c_sort ?v_0 ?l_285_206) ?a_284_207)))))))))) +(assert (forall ((?t_48_293_210 c_type)) (forall ((?p_292_211 c_unique)) (forall ((?l_291_212 c_unique)) (forall ((?a_290_213 Int)) (let ((?v_0 (type_pset ?t_48_293_210))) (=> (not_in_pset (c_sort (type_pointer ?t_48_293_210) ?p_292_211) (c_sort ?v_0 (pset_range_left (c_sort ?v_0 ?l_291_212) ?a_290_213))) (forall ((?p1_289_214 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_48_293_210) ?p1_289_214) (c_sort ?v_0 ?l_291_212))) (forall ((?i_288_215 Int)) (=> (<= ?i_288_215 ?a_290_213) (not (= (shift (c_sort (type_pointer ?t_48_293_210) ?p1_289_214) ?i_288_215) ?p_292_211))))))))))))) +(assert (forall ((?t_49_299_216 c_type)) (forall ((?p_298_217 c_unique)) (forall ((?l_297_218 c_unique)) (forall ((?a_296_219 Int)) (let ((?v_0 (type_pset ?t_49_299_216))) (=> (forall ((?p1_295_220 c_unique)) (or (not_in_pset (c_sort (type_pointer ?t_49_299_216) ?p1_295_220) (c_sort ?v_0 ?l_297_218)) (forall ((?i_294_221 Int)) (=> (<= ?a_296_219 ?i_294_221) (not (= ?p_298_217 (shift (c_sort (type_pointer ?t_49_299_216) ?p1_295_220) ?i_294_221))))))) (not_in_pset (c_sort (type_pointer ?t_49_299_216) ?p_298_217) (c_sort ?v_0 (pset_range_right (c_sort ?v_0 ?l_297_218) ?a_296_219)))))))))) +(assert (forall ((?t_50_305_222 c_type)) (forall ((?p_304_223 c_unique)) (forall ((?l_303_224 c_unique)) (forall ((?a_302_225 Int)) (let ((?v_0 (type_pset ?t_50_305_222))) (=> (not_in_pset (c_sort (type_pointer ?t_50_305_222) ?p_304_223) (c_sort ?v_0 (pset_range_right (c_sort ?v_0 ?l_303_224) ?a_302_225))) (forall ((?p1_301_226 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_50_305_222) ?p1_301_226) (c_sort ?v_0 ?l_303_224))) (forall ((?i_300_227 Int)) (=> (<= ?a_302_225 ?i_300_227) (not (= (shift (c_sort (type_pointer ?t_50_305_222) ?p1_301_226) ?i_300_227) ?p_304_223))))))))))))) +(assert (forall ((?t_52_312_228 c_type)) (forall ((?t_51_311_229 c_type)) (forall ((?p_310_230 c_unique)) (forall ((?l_309_231 c_unique)) (forall ((?m_308_232 c_unique)) (let ((?v_0 (type_pointer ?t_51_311_229))) (=> (forall ((?p1_307_233 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_52_312_228) ?p1_307_233) (c_sort (type_pset ?t_52_312_228) ?l_309_231))) (forall ((?i_306_234 Int)) (let ((?v_1 (type_pointer ?t_52_312_228))) (not (= ?p_310_230 (acc (c_sort (type_memory ?v_0 ?t_52_312_228) ?m_308_232) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_307_233) ?i_306_234))))))))) (not_in_pset (c_sort ?v_0 ?p_310_230) (c_sort (type_pset ?t_51_311_229) (pset_acc_all (c_sort (type_pset ?t_52_312_228) ?l_309_231) (c_sort (type_memory ?v_0 ?t_52_312_228) ?m_308_232)))))))))))) +(assert (forall ((?t_54_319_235 c_type)) (forall ((?t_53_318_236 c_type)) (forall ((?p_317_237 c_unique)) (forall ((?l_316_238 c_unique)) (forall ((?m_315_239 c_unique)) (let ((?v_0 (type_pointer ?t_53_318_236))) (=> (not_in_pset (c_sort ?v_0 ?p_317_237) (c_sort (type_pset ?t_53_318_236) (pset_acc_all (c_sort (type_pset ?t_54_319_235) ?l_316_238) (c_sort (type_memory ?v_0 ?t_54_319_235) ?m_315_239)))) (forall ((?p1_314_240 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_54_319_235) ?p1_314_240) (c_sort (type_pset ?t_54_319_235) ?l_316_238))) (forall ((?i_313_241 Int)) (let ((?v_1 (type_pointer ?t_54_319_235))) (not (= (acc (c_sort (type_memory ?v_0 ?t_54_319_235) ?m_315_239) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_314_240) ?i_313_241))) ?p_317_237)))))))))))))) +(assert (forall ((?t_56_328_242 c_type)) (forall ((?t_55_327_243 c_type)) (forall ((?p_326_244 c_unique)) (forall ((?l_325_245 c_unique)) (forall ((?m_324_246 c_unique)) (forall ((?a_323_247 Int)) (forall ((?b_322_248 Int)) (let ((?v_0 (type_pointer ?t_55_327_243))) (=> (forall ((?p1_321_249 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_56_328_242) ?p1_321_249) (c_sort (type_pset ?t_56_328_242) ?l_325_245))) (forall ((?i_320_250 Int)) (let ((?v_1 (type_pointer ?t_56_328_242))) (=> (and (<= ?a_323_247 ?i_320_250) (<= ?i_320_250 ?b_322_248)) (not (= ?p_326_244 (acc (c_sort (type_memory ?v_0 ?t_56_328_242) ?m_324_246) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_321_249) ?i_320_250)))))))))) (not_in_pset (c_sort ?v_0 ?p_326_244) (c_sort (type_pset ?t_55_327_243) (pset_acc_range (c_sort (type_pset ?t_56_328_242) ?l_325_245) (c_sort (type_memory ?v_0 ?t_56_328_242) ?m_324_246) ?a_323_247 ?b_322_248))))))))))))) +(assert (forall ((?t_58_337_251 c_type)) (forall ((?t_57_336_252 c_type)) (forall ((?p_335_253 c_unique)) (forall ((?l_334_254 c_unique)) (forall ((?m_333_255 c_unique)) (forall ((?a_332_256 Int)) (forall ((?b_331_257 Int)) (let ((?v_0 (type_pointer ?t_57_336_252))) (=> (not_in_pset (c_sort ?v_0 ?p_335_253) (c_sort (type_pset ?t_57_336_252) (pset_acc_range (c_sort (type_pset ?t_58_337_251) ?l_334_254) (c_sort (type_memory ?v_0 ?t_58_337_251) ?m_333_255) ?a_332_256 ?b_331_257))) (forall ((?p1_330_258 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_58_337_251) ?p1_330_258) (c_sort (type_pset ?t_58_337_251) ?l_334_254))) (forall ((?i_329_259 Int)) (let ((?v_1 (type_pointer ?t_58_337_251))) (=> (and (<= ?a_332_256 ?i_329_259) (<= ?i_329_259 ?b_331_257)) (not (= (acc (c_sort (type_memory ?v_0 ?t_58_337_251) ?m_333_255) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_330_258) ?i_329_259))) ?p_335_253))))))))))))))))) +(assert (forall ((?t_60_345_260 c_type)) (forall ((?t_59_344_261 c_type)) (forall ((?p_343_262 c_unique)) (forall ((?l_342_263 c_unique)) (forall ((?m_341_264 c_unique)) (forall ((?a_340_265 Int)) (let ((?v_0 (type_pointer ?t_59_344_261))) (=> (forall ((?p1_339_266 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_60_345_260) ?p1_339_266) (c_sort (type_pset ?t_60_345_260) ?l_342_263))) (forall ((?i_338_267 Int)) (let ((?v_1 (type_pointer ?t_60_345_260))) (=> (<= ?i_338_267 ?a_340_265) (not (= ?p_343_262 (acc (c_sort (type_memory ?v_0 ?t_60_345_260) ?m_341_264) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_339_266) ?i_338_267)))))))))) (not_in_pset (c_sort ?v_0 ?p_343_262) (c_sort (type_pset ?t_59_344_261) (pset_acc_range_left (c_sort (type_pset ?t_60_345_260) ?l_342_263) (c_sort (type_memory ?v_0 ?t_60_345_260) ?m_341_264) ?a_340_265)))))))))))) +(assert (forall ((?t_62_353_268 c_type)) (forall ((?t_61_352_269 c_type)) (forall ((?p_351_270 c_unique)) (forall ((?l_350_271 c_unique)) (forall ((?m_349_272 c_unique)) (forall ((?a_348_273 Int)) (let ((?v_0 (type_pointer ?t_61_352_269))) (=> (not_in_pset (c_sort ?v_0 ?p_351_270) (c_sort (type_pset ?t_61_352_269) (pset_acc_range_left (c_sort (type_pset ?t_62_353_268) ?l_350_271) (c_sort (type_memory ?v_0 ?t_62_353_268) ?m_349_272) ?a_348_273))) (forall ((?p1_347_274 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_62_353_268) ?p1_347_274) (c_sort (type_pset ?t_62_353_268) ?l_350_271))) (forall ((?i_346_275 Int)) (let ((?v_1 (type_pointer ?t_62_353_268))) (=> (<= ?i_346_275 ?a_348_273) (not (= (acc (c_sort (type_memory ?v_0 ?t_62_353_268) ?m_349_272) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_347_274) ?i_346_275))) ?p_351_270)))))))))))))))) +(assert (forall ((?t_64_361_276 c_type)) (forall ((?t_63_360_277 c_type)) (forall ((?p_359_278 c_unique)) (forall ((?l_358_279 c_unique)) (forall ((?m_357_280 c_unique)) (forall ((?a_356_281 Int)) (let ((?v_0 (type_pointer ?t_63_360_277))) (=> (forall ((?p1_355_282 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_64_361_276) ?p1_355_282) (c_sort (type_pset ?t_64_361_276) ?l_358_279))) (forall ((?i_354_283 Int)) (let ((?v_1 (type_pointer ?t_64_361_276))) (=> (<= ?a_356_281 ?i_354_283) (not (= ?p_359_278 (acc (c_sort (type_memory ?v_0 ?t_64_361_276) ?m_357_280) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_355_282) ?i_354_283)))))))))) (not_in_pset (c_sort ?v_0 ?p_359_278) (c_sort (type_pset ?t_63_360_277) (pset_acc_range_right (c_sort (type_pset ?t_64_361_276) ?l_358_279) (c_sort (type_memory ?v_0 ?t_64_361_276) ?m_357_280) ?a_356_281)))))))))))) +(assert (forall ((?t_66_369_284 c_type)) (forall ((?t_65_368_285 c_type)) (forall ((?p_367_286 c_unique)) (forall ((?l_366_287 c_unique)) (forall ((?m_365_288 c_unique)) (forall ((?a_364_289 Int)) (let ((?v_0 (type_pointer ?t_65_368_285))) (=> (not_in_pset (c_sort ?v_0 ?p_367_286) (c_sort (type_pset ?t_65_368_285) (pset_acc_range_right (c_sort (type_pset ?t_66_369_284) ?l_366_287) (c_sort (type_memory ?v_0 ?t_66_369_284) ?m_365_288) ?a_364_289))) (forall ((?p1_363_290 c_unique)) (=> (not (not_in_pset (c_sort (type_pointer ?t_66_369_284) ?p1_363_290) (c_sort (type_pset ?t_66_369_284) ?l_366_287))) (forall ((?i_362_291 Int)) (let ((?v_1 (type_pointer ?t_66_369_284))) (=> (<= ?a_364_289 ?i_362_291) (not (= (acc (c_sort (type_memory ?v_0 ?t_66_369_284) ?m_365_288) (c_sort ?v_1 (shift (c_sort ?v_1 ?p1_363_290) ?i_362_291))) ?p_367_286)))))))))))))))) +(assert (forall ((?t_68_376_292 c_type)) (forall ((?t_67_375_293 c_type)) (forall ((?a_374_294 c_unique)) (forall ((?l_373_295 c_unique)) (forall ((?m1_372_296 c_unique)) (forall ((?m2_371_297 c_unique)) (forall ((?m3_370_298 c_unique)) (let ((?v_1 (c_sort type_alloc_table ?a_374_294)) (?v_0 (type_memory ?t_68_376_292 ?t_67_375_293))) (let ((?v_4 (c_sort ?v_0 ?m1_372_296)) (?v_2 (c_sort ?v_0 ?m2_371_297)) (?v_3 (c_sort (type_pset ?t_67_375_293) ?l_373_295)) (?v_5 (c_sort ?v_0 ?m3_370_298))) (=> (not_assigns ?v_1 ?v_4 ?v_2 ?v_3) (=> (not_assigns ?v_1 ?v_2 ?v_5 ?v_3) (not_assigns ?v_1 ?v_4 ?v_5 ?v_3))))))))))))) +(assert (forall ((?t_70_381_299 c_type)) (forall ((?t_69_380_300 c_type)) (forall ((?a_379_301 c_unique)) (forall ((?l_378_302 c_unique)) (forall ((?m_377_303 c_unique)) (let ((?v_0 (c_sort (type_memory ?t_70_381_299 ?t_69_380_300) ?m_377_303))) (not_assigns (c_sort type_alloc_table ?a_379_301) ?v_0 ?v_0 (c_sort (type_pset ?t_69_380_300) ?l_378_302))))))))) +(declare-fun valid_acc (c_ssorted) Bool) +(assert (forall ((?t_72_386_304 c_type)) (forall ((?t_71_385_305 c_type)) (forall ((?m1_384_306 c_unique)) (= (valid_acc (c_sort (type_memory (type_pointer ?t_71_385_305) ?t_72_386_304) ?m1_384_306)) (forall ((?p_383_307 c_unique)) (forall ((?a_382_308 c_unique)) (let ((?v_1 (type_pointer ?t_71_385_305)) (?v_0 (c_sort type_alloc_table ?a_382_308)) (?v_2 (c_sort (type_pointer ?t_72_386_304) ?p_383_307))) (=> (valid ?v_0 ?v_2) (valid ?v_0 (c_sort ?v_1 (acc (c_sort (type_memory ?v_1 ?t_72_386_304) ?m1_384_306) ?v_2)))))))))))) +(declare-fun valid_acc_range (c_ssorted Int) Bool) +(assert (forall ((?t_74_392_309 c_type)) (forall ((?t_73_391_310 c_type)) (forall ((?m1_390_311 c_unique)) (forall ((?size_389_312 Int)) (= (valid_acc_range (c_sort (type_memory (type_pointer ?t_73_391_310) ?t_74_392_309) ?m1_390_311) ?size_389_312) (forall ((?p_388_313 c_unique)) (forall ((?a_387_314 c_unique)) (let ((?v_1 (type_pointer ?t_73_391_310)) (?v_0 (c_sort type_alloc_table ?a_387_314)) (?v_2 (c_sort (type_pointer ?t_74_392_309) ?p_388_313))) (=> (valid ?v_0 ?v_2) (valid_range ?v_0 (c_sort ?v_1 (acc (c_sort (type_memory ?v_1 ?t_74_392_309) ?m1_390_311) ?v_2)) 0 (- ?size_389_312 1)))))))))))) +(assert (forall ((?t_76_398_315 c_type)) (forall ((?t_75_397_316 c_type)) (forall ((?m1_396_317 c_unique)) (forall ((?size_395_318 Int)) (forall ((?p_394_319 c_unique)) (forall ((?a_393_320 c_unique)) (let ((?v_1 (type_pointer ?t_75_397_316))) (let ((?v_2 (c_sort (type_memory ?v_1 ?t_76_398_315) ?m1_396_317)) (?v_0 (c_sort type_alloc_table ?a_393_320)) (?v_3 (c_sort (type_pointer ?t_76_398_315) ?p_394_319))) (=> (valid_acc_range ?v_2 ?size_395_318) (=> (valid ?v_0 ?v_3) (valid ?v_0 (c_sort ?v_1 (acc ?v_2 ?v_3)))))))))))))) +(declare-fun separation1 (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_78_404_321 c_type)) (forall ((?t_77_403_322 c_type)) (forall ((?m1_402_323 c_unique)) (forall ((?m2_401_324 c_unique)) (let ((?v_0 (type_memory (type_pointer ?t_77_403_322) ?t_78_404_321))) (= (separation1 (c_sort ?v_0 ?m1_402_323) (c_sort ?v_0 ?m2_401_324)) (forall ((?p_400_325 c_unique)) (forall ((?a_399_326 c_unique)) (let ((?v_1 (type_pointer ?t_77_403_322)) (?v_2 (c_sort (type_pointer ?t_78_404_321) ?p_400_325))) (=> (valid (c_sort type_alloc_table ?a_399_326) ?v_2) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_402_323) ?v_2))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_401_324) ?v_2)))))))))))))))) +(declare-fun separation1_range1 (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_80_412_327 c_type)) (forall ((?t_79_411_328 c_type)) (forall ((?m1_410_329 c_unique)) (forall ((?m2_409_330 c_unique)) (forall ((?size_408_331 Int)) (let ((?v_0 (type_memory (type_pointer ?t_79_411_328) ?t_80_412_327))) (= (separation1_range1 (c_sort ?v_0 ?m1_410_329) (c_sort ?v_0 ?m2_409_330) ?size_408_331) (forall ((?p_407_332 c_unique)) (forall ((?a_406_333 c_unique)) (=> (valid (c_sort type_alloc_table ?a_406_333) (c_sort (type_pointer ?t_80_412_327) ?p_407_332)) (forall ((?i_405_334 Int)) (let ((?v_1 (type_pointer ?t_79_411_328)) (?v_2 (type_pointer ?t_80_412_327))) (let ((?v_3 (c_sort ?v_2 ?p_407_332))) (=> (and (<= 0 ?i_405_334) (< ?i_405_334 ?size_408_331)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_410_329) (c_sort ?v_2 (shift ?v_3 ?i_405_334))))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_409_330) ?v_3)))))))))))))))))))) +(declare-fun separation1_range (c_ssorted Int) Bool) +(assert (forall ((?t_82_420_335 c_type)) (forall ((?t_81_419_336 c_type)) (forall ((?m_418_337 c_unique)) (forall ((?size_417_338 Int)) (= (separation1_range (c_sort (type_memory (type_pointer ?t_81_419_336) ?t_82_420_335) ?m_418_337) ?size_417_338) (forall ((?p_416_339 c_unique)) (forall ((?a_415_340 c_unique)) (=> (valid (c_sort type_alloc_table ?a_415_340) (c_sort (type_pointer ?t_82_420_335) ?p_416_339)) (forall ((?i1_414_341 Int)) (forall ((?i2_413_342 Int)) (let ((?v_0 (type_pointer ?t_81_419_336))) (let ((?v_2 (c_sort (type_memory ?v_0 ?t_82_420_335) ?m_418_337)) (?v_1 (type_pointer ?t_82_420_335))) (let ((?v_3 (c_sort ?v_1 ?p_416_339))) (=> (and (<= 0 ?i1_414_341) (< ?i1_414_341 ?size_417_338)) (=> (and (<= 0 ?i2_413_342) (< ?i2_413_342 ?size_417_338)) (=> (not (= ?i1_414_341 ?i2_413_342)) (not (= (base_addr (c_sort ?v_0 (acc ?v_2 (c_sort ?v_1 (shift ?v_3 ?i1_414_341))))) (base_addr (c_sort ?v_0 (acc ?v_2 (c_sort ?v_1 (shift ?v_3 ?i2_413_342)))))))))))))))))))))))) +(declare-fun separation2 (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_84_426_343 c_type)) (forall ((?t_83_425_344 c_type)) (forall ((?m1_424_345 c_unique)) (forall ((?m2_423_346 c_unique)) (let ((?v_0 (type_memory (type_pointer ?t_83_425_344) ?t_84_426_343))) (= (separation2 (c_sort ?v_0 ?m1_424_345) (c_sort ?v_0 ?m2_423_346)) (forall ((?p1_422_347 c_unique)) (forall ((?p2_421_348 c_unique)) (let ((?v_1 (type_pointer ?t_83_425_344)) (?v_2 (type_pointer ?t_84_426_343))) (=> (not (= ?p1_422_347 ?p2_421_348)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_424_345) (c_sort ?v_2 ?p1_422_347)))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_423_346) (c_sort ?v_2 ?p2_421_348))))))))))))))))) +(declare-fun separation2_range1 (c_ssorted c_ssorted Int) Bool) +(assert (forall ((?t_86_435_349 c_type)) (forall ((?t_85_434_350 c_type)) (forall ((?m1_433_351 c_unique)) (forall ((?m2_432_352 c_unique)) (forall ((?size_431_353 Int)) (let ((?v_0 (type_memory (type_pointer ?t_85_434_350) ?t_86_435_349))) (= (separation2_range1 (c_sort ?v_0 ?m1_433_351) (c_sort ?v_0 ?m2_432_352) ?size_431_353) (forall ((?p_430_354 c_unique)) (forall ((?q_429_355 c_unique)) (forall ((?a_428_356 c_unique)) (forall ((?i_427_357 Int)) (let ((?v_1 (type_pointer ?t_85_434_350)) (?v_2 (type_pointer ?t_86_435_349))) (=> (and (<= 0 ?i_427_357) (< ?i_427_357 ?size_431_353)) (not (= (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m1_433_351) (c_sort ?v_2 (shift (c_sort ?v_2 ?p_430_354) ?i_427_357))))) (base_addr (c_sort ?v_1 (acc (c_sort ?v_0 ?m2_432_352) (c_sort ?v_2 ?q_429_355)))))))))))))))))))) +(declare-fun on_heap (c_ssorted c_ssorted) Bool) +(declare-fun on_stack (c_ssorted c_ssorted) Bool) +(declare-fun fresh (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_87_438_358 c_type)) (forall ((?a_437_359 c_unique)) (forall ((?p_436_360 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a_437_359)) (?v_1 (c_sort (type_pointer ?t_87_438_358) ?p_436_360))) (=> (fresh ?v_0 ?v_1) (not (valid ?v_0 ?v_1)))))))) +(assert (forall ((?t_88_442_361 c_type)) (forall ((?a_441_362 c_unique)) (forall ((?p_440_363 c_unique)) (=> (fresh (c_sort type_alloc_table ?a_441_362) (c_sort (type_pointer ?t_88_442_361) ?p_440_363)) (forall ((?i_439_364 Int)) (let ((?v_0 (type_pointer ?t_88_442_361))) (not (valid (c_sort type_alloc_table ?a_441_362) (c_sort ?v_0 (shift (c_sort ?v_0 ?p_440_363) ?i_439_364))))))))))) +(declare-fun alloc_extends (c_ssorted c_ssorted) Bool) +(assert (forall ((?t_89_446_365 c_type)) (forall ((?a1_445_366 c_unique)) (forall ((?a2_444_367 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_445_366) (c_sort type_alloc_table ?a2_444_367)) (forall ((?q_443_368 c_unique)) (let ((?v_0 (c_sort (type_pointer ?t_89_446_365) ?q_443_368))) (=> (valid (c_sort type_alloc_table ?a1_445_366) ?v_0) (valid (c_sort type_alloc_table ?a2_444_367) ?v_0))))))))) +(assert (forall ((?t_90_451_369 c_type)) (forall ((?a1_450_370 c_unique)) (forall ((?a2_449_371 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_450_370) (c_sort type_alloc_table ?a2_449_371)) (forall ((?q_448_372 c_unique)) (forall ((?i_447_373 Int)) (let ((?v_0 (c_sort (type_pointer ?t_90_451_369) ?q_448_372))) (=> (valid_index (c_sort type_alloc_table ?a1_450_370) ?v_0 ?i_447_373) (valid_index (c_sort type_alloc_table ?a2_449_371) ?v_0 ?i_447_373)))))))))) +(assert (forall ((?t_91_457_374 c_type)) (forall ((?a1_456_375 c_unique)) (forall ((?a2_455_376 c_unique)) (=> (alloc_extends (c_sort type_alloc_table ?a1_456_375) (c_sort type_alloc_table ?a2_455_376)) (forall ((?q_454_377 c_unique)) (forall ((?i_453_378 Int)) (forall ((?j_452_379 Int)) (let ((?v_0 (c_sort (type_pointer ?t_91_457_374) ?q_454_377))) (=> (valid_range (c_sort type_alloc_table ?a1_456_375) ?v_0 ?i_453_378 ?j_452_379) (valid_range (c_sort type_alloc_table ?a2_455_376) ?v_0 ?i_453_378 ?j_452_379))))))))))) +(assert (forall ((?a_458_380 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a_458_380))) (alloc_extends ?v_0 ?v_0)))) +(assert (forall ((?a1_461_381 c_unique)) (forall ((?a2_460_382 c_unique)) (forall ((?a3_459_383 c_unique)) (let ((?v_1 (c_sort type_alloc_table ?a1_461_381)) (?v_0 (c_sort type_alloc_table ?a2_460_382)) (?v_2 (c_sort type_alloc_table ?a3_459_383))) (=> (alloc_extends ?v_1 ?v_0) (=> (alloc_extends ?v_0 ?v_2) (alloc_extends ?v_1 ?v_2)))))))) +(declare-fun free_stack (c_ssorted c_ssorted c_ssorted) Bool) +(assert (forall ((?t_92_466_384 c_type)) (forall ((?a1_465_385 c_unique)) (forall ((?a2_464_386 c_unique)) (forall ((?a3_463_387 c_unique)) (=> (free_stack (c_sort type_alloc_table ?a1_465_385) (c_sort type_alloc_table ?a2_464_386) (c_sort type_alloc_table ?a3_463_387)) (forall ((?p_462_388 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a2_464_386)) (?v_1 (c_sort (type_pointer ?t_92_466_384) ?p_462_388))) (=> (valid ?v_0 ?v_1) (=> (on_heap ?v_0 ?v_1) (valid (c_sort type_alloc_table ?a3_463_387) ?v_1))))))))))) +(assert (forall ((?t_93_471_389 c_type)) (forall ((?a1_470_390 c_unique)) (forall ((?a2_469_391 c_unique)) (forall ((?a3_468_392 c_unique)) (=> (free_stack (c_sort type_alloc_table ?a1_470_390) (c_sort type_alloc_table ?a2_469_391) (c_sort type_alloc_table ?a3_468_392)) (forall ((?p_467_393 c_unique)) (let ((?v_0 (c_sort type_alloc_table ?a1_470_390)) (?v_1 (c_sort (type_pointer ?t_93_471_389) ?p_467_393))) (=> (valid ?v_0 ?v_1) (=> (on_stack ?v_0 ?v_1) (valid (c_sort type_alloc_table ?a3_468_392) ?v_1))))))))))) +(declare-fun null () c_unique) +(assert (forall ((?t_94_475_394 c_type)) (forall ((?a_474_395 c_unique)) (not (valid (c_sort type_alloc_table ?a_474_395) (c_sort (type_pointer ?t_94_475_394) null)))))) +(declare-fun type_global () c_type) +(assert (= (% 2800 14) 0)) +(assert (forall ((?c_478_396 Int)) (let ((?v_0 (* ?c_478_396 2))) (=> (> ?v_0 0) (> ?v_0 1))))) +(assert (forall ((?c_479_397 Int)) (=> (= (% ?c_479_397 14) 0) (= (% (- ?c_479_397 14) 14) 0)))) +(assert (forall ((?c_480_398 Int)) (=> (= (% ?c_480_398 14) 0) (=> (> ?c_480_398 0) (>= ?c_480_398 14))))) +(assert (= (whydivide 10000 5) 2000)) +(assert (not (forall ((?a Int)) (forall ((?alloc c_unique)) (forall ((?b Int)) (forall ((?c Int)) (forall ((?f c_unique)) (=> (and (and (and (= ?b 0) (= ?c 2800)) (= ?a 10000)) (valid_range (c_sort type_alloc_table ?alloc) (c_sort (type_pointer type_global) ?f) 0 2800)) (forall ((?b0 Int)) (forall ((?intM_global0 c_unique)) (=> (and (and (<= 0 ?b0) (<= ?b0 2800)) (forall ((?i_0_481_408 Int)) (let ((?v_0 (type_pointer type_global))) (=> (and (<= 0 ?i_0_481_408) (< ?i_0_481_408 ?b0)) (= (ss2Int (c_sort c_int (acc (c_sort (type_memory c_int type_global) ?intM_global0) (c_sort ?v_0 (shift (c_sort ?v_0 ?f) ?i_0_481_408))))) 2000))))) (=> (= (- ?b0 ?c) 0) (= (% ?c 14) 0))))))))))))) +(check-sat) +(exit) diff --git a/test/regress/regress0/quantifiers/symmetric_unsat_7.smt2 b/test/regress/regress0/quantifiers/symmetric_unsat_7.smt2 new file mode 100644 index 000000000..a4ce611fb --- /dev/null +++ b/test/regress/regress0/quantifiers/symmetric_unsat_7.smt2 @@ -0,0 +1,34 @@ +(set-logic AUFLIRA) +(set-info :source | Example extracted from Peter Baumgartner's talk at CADE-21: Logical Engineering with Instance-Based Methods. + +It was translated to SMT-LIB by Leonardo de Moura |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun symmetric ((Array Int (Array Int Real)) Int) Bool) +(declare-fun n () Int) +(declare-fun a0 () (Array Int (Array Int Real))) +(declare-fun e0 () Real) +(declare-fun a1 () (Array Int (Array Int Real))) +(declare-fun e1 () Real) +(declare-fun a2 () (Array Int (Array Int Real))) +(declare-fun e2 () Real) +(declare-fun a3 () (Array Int (Array Int Real))) +(declare-fun e3 () Real) +(declare-fun a4 () (Array Int (Array Int Real))) +(declare-fun e4 () Real) +(declare-fun a5 () (Array Int (Array Int Real))) +(declare-fun e5 () Real) +(declare-fun a6 () (Array Int (Array Int Real))) +(declare-fun e6 () Real) +(assert (forall ((?a (Array Int (Array Int Real))) (?n Int)) (= (symmetric ?a ?n) (forall ((?i Int) (?j Int)) (=> (and (<= 1 ?i) (<= ?i ?n) (<= 1 ?j) (<= ?j ?n)) (= (select (select ?a ?i) ?j) (select (select ?a ?j) ?i))))))) +(assert (symmetric a0 n)) +(assert (= a1 (store a0 0 (store (select a0 0) 0 e0)))) +(assert (= a2 (store a1 1 (store (select a1 1) 1 e1)))) +(assert (= a3 (store a2 2 (store (select a2 2) 2 e2)))) +(assert (= a4 (store a3 3 (store (select a3 3) 3 e3)))) +(assert (= a5 (store a4 4 (store (select a4 4) 4 e4)))) +(assert (= a6 (store a5 5 (store (select a5 5) 5 e5)))) +(assert (not (symmetric a6 n))) +(check-sat) +(exit) diff --git a/test/regress/regress0/rewriterules/Makefile b/test/regress/regress0/rewriterules/Makefile new file mode 100644 index 000000000..82da93d37 --- /dev/null +++ b/test/regress/regress0/rewriterules/Makefile @@ -0,0 +1,8 @@ +topdir = ../../../.. +srcdir = test/regress/regress0/rewriterules + +include $(topdir)/Makefile.subdir + +# synonyms for "check" +.PHONY: test +test: check diff --git a/test/regress/regress0/rewriterules/Makefile.am b/test/regress/regress0/rewriterules/Makefile.am new file mode 100644 index 000000000..94b558675 --- /dev/null +++ b/test/regress/regress0/rewriterules/Makefile.am @@ -0,0 +1,36 @@ +BINARY = cvc4 +if PROOF_REGRESSIONS +TESTS_ENVIRONMENT = LFSC="$(LFSC) $(LFSCARGS)" @srcdir@/../../run_regression $(RUN_REGRESSION_ARGS) --proof @top_builddir@/src/main/$(BINARY) +else +TESTS_ENVIRONMENT = @srcdir@/../../run_regression $(RUN_REGRESSION_ARGS) @top_builddir@/src/main/$(BINARY) +endif + +MAKEFLAGS = -k + +# These are run for all build profiles. +# If a test shouldn't be run in e.g. competition mode, +# put it below in "TESTS +=" +TESTS = \ + length_trick.smt2 length_trick2.smt2 length_gen_020.smt2 \ + datatypes.smt2 datatypes_sat.smt2 set_A_new_fast_tableau-base.smt2 \ + set_A_new_fast_tableau-base_sat.smt2 + +EXTRA_DIST = $(TESTS) + +#if CVC4_BUILD_PROFILE_COMPETITION +#else +#TESTS += \ +# error.cvc +#endif +# +# and make sure to distribute it +#EXTRA_DIST += \ +# error.cvc + +# synonyms for "check" in this directory +.PHONY: regress regress0 test +regress regress0 test: check + +# do nothing in this subdir +.PHONY: regress1 regress2 regress3 +regress1 regress2 regress3: diff --git a/test/regress/regress0/rewriterules/datatypes.smt2 b/test/regress/regress0/rewriterules/datatypes.smt2 new file mode 100644 index 000000000..a914a0c1f --- /dev/null +++ b/test/regress/regress0/rewriterules/datatypes.smt2 @@ -0,0 +1,101 @@ +;; try to solve datatypes with rewriterules +(set-logic AUFLIA) +(set-info :status unsat) + +;; lists 2 nil +(declare-sort elt 0) ;; we suppose that elt is infinite +(declare-sort list 0) + +(declare-fun nil1 () list) +(declare-fun nil2 () list) +(declare-fun cons (elt list) list) + +;;;;;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj1 (cons ?e ?l)) ?e))) :pattern ((cons ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj2 (cons ?e ?l)) ?l))) :pattern ((cons ?e ?l)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun proj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (= (proj1 (cons ?e ?l)) ?e) :rewrite-rule) )) + +(declare-fun proj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (= (proj2 (cons ?e ?l)) ?l) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun iscons (list) Bool) +(assert (= (iscons nil1) false)) +(assert (= (iscons nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons (cons ?e ?l)) true))) :pattern ((cons ?e ?l)) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons ?l) (= ?l (cons (proj1 ?l) (proj2 ?l))))) :pattern ((proj1 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons ?l) (= ?l (cons (proj1 ?l) (proj2 ?l))))) :pattern ((proj2 ?l)) ) :rewrite-rule) )) + + +(declare-fun isnil1 (list) Bool) +(assert (= (isnil1 nil1) true)) +(assert (= (isnil1 nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil1 (cons ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (=> true (=> (isnil1 ?l) (= ?l nil1))) :rewrite-rule) )) + +(declare-fun isnil2 (list) Bool) +(assert (= (isnil2 nil1) false)) +(assert (= (isnil2 nil2) true)) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil2 (cons ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (=> true (=> (isnil2 ?l) (= ?l nil2))) :rewrite-rule) )) + +;; distinct +(assert (forall ((?l list)) + (! (=> (isnil1 ?l) (and (not (isnil2 ?l)) (not (iscons ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (isnil2 ?l) (and (not (isnil1 ?l)) (not (iscons ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (iscons ?l) (and (not (isnil1 ?l)) (not (isnil2 ?l))) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons ?l))) :pattern ((proj1 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons ?l))) :pattern ((proj2 ?l)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; finite case-split +(assert (forall ((?l list)) + (! (=> (not (iscons ?l)) (or (isnil1 ?l) (isnil2 ?l))) :rewrite-rule) )) + + + +;;;;; goal + +(declare-fun e () elt) +(declare-fun l1 () list) +(declare-fun l2 () list) + + +(assert (not (=> (iscons l1) (=> (= (proj2 l1) (proj2 l2)) (= l1 (cons (proj1 l1) (proj2 l2))))))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/datatypes2.smt2 b/test/regress/regress0/rewriterules/datatypes2.smt2 new file mode 100644 index 000000000..993cd2002 --- /dev/null +++ b/test/regress/regress0/rewriterules/datatypes2.smt2 @@ -0,0 +1,150 @@ +;; try to solve datatypes with rewriterules +(set-logic AUFLIA) +(set-info :status unsat) + +;; lists 2 nil +(declare-sort elt 0) ;; we suppose that elt is infinite +(declare-sort list 0) + +(declare-fun nil1 () list) +(declare-fun nil2 () list) +(declare-fun cons1 (elt list) list) +(declare-fun cons2 (elt list) list) + +;;;;;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj1 (cons1 ?e ?l)) ?e))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj2 (cons1 ?e ?l)) ?l))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj1 (cons2 ?e ?l)) ?e))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj2 (cons2 ?e ?l)) ?l))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun proj11 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (= (proj11 (cons1 ?e ?l)) ?e) :rewrite-rule) )) + +(declare-fun proj12 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (= (proj12 (cons1 ?e ?l)) ?l) :rewrite-rule) )) + + +(declare-fun proj21 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (= (proj21 (cons2 ?e ?l)) ?e) :rewrite-rule) )) + +(declare-fun proj22 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (= (proj22 (cons2 ?e ?l)) ?l) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun iscons1 (list) Bool) +(assert (= (iscons1 nil1) false)) +(assert (= (iscons1 nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons1 (cons1 ?e ?l)) true))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons1 (cons2 ?e ?l)) false))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons1 ?l) (= ?l (cons1 (proj11 ?l) (proj12 ?l))))) :pattern ((proj11 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons1 ?l) (= ?l (cons1 (proj11 ?l) (proj12 ?l))))) :pattern ((proj12 ?l)) ) :rewrite-rule) )) + + +(declare-fun iscons2 (list) Bool) +(assert (= (iscons2 nil1) false)) +(assert (= (iscons2 nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons2 (cons1 ?e ?l)) false))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons2 (cons2 ?e ?l)) true))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons2 ?l) (= ?l (cons2 (proj21 ?l) (proj22 ?l))))) :pattern ((proj21 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons2 ?l) (= ?l (cons2 (proj21 ?l) (proj22 ?l))))) :pattern ((proj22 ?l)) ) :rewrite-rule) )) + + +(declare-fun isnil1 (list) Bool) +(assert (= (isnil1 nil1) true)) +(assert (= (isnil1 nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil1 (cons1 ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil1 (cons2 ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (=> true (=> (isnil1 ?l) (= ?l nil1))) :rewrite-rule) )) + +(declare-fun isnil2 (list) Bool) +(assert (= (isnil2 nil1) false)) +(assert (= (isnil2 nil2) true)) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil2 (cons1 ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil2 (cons2 ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (=> true (=> (isnil2 ?l) (= ?l nil2))) :rewrite-rule) )) + +;; distinct +(assert (forall ((?l list)) + (! (=> (isnil1 ?l) (and (not (isnil2 ?l)) (not (iscons1 ?l)) (not (iscons2 ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (isnil2 ?l) (and (not (isnil1 ?l)) (not (iscons1 ?l)) (not (iscons2 ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (iscons1 ?l) (and (not (isnil1 ?l)) (not (isnil2 ?l)) (not (iscons2 ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (iscons2 ?l) (and (not (isnil1 ?l)) (not (isnil2 ?l)) (not (iscons1 ?l))) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj11 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj12 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj21 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj22 ?l)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; finite case-split +(assert (forall ((?l list)) + (! (=> (and (not (iscons1 ?l)) (not (iscons2 ?l))) (or (isnil1 ?l) (isnil2 ?l))) :rewrite-rule) )) + + + +;;;;; goal + +(declare-fun e () elt) +(declare-fun l1 () list) +(declare-fun l2 () list) + + + (assert (not (=> (iscons2 l1) (=> (= (proj22 l1) (proj22 l2)) (= l1 (cons2 (proj21 l1) (proj22 l2))))))) + +;;(assert (= (cons1 l1 l2) (cons2 l1 l2))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/datatypes3.smt2 b/test/regress/regress0/rewriterules/datatypes3.smt2 new file mode 100644 index 000000000..dc3c8e20c --- /dev/null +++ b/test/regress/regress0/rewriterules/datatypes3.smt2 @@ -0,0 +1,137 @@ +;; try to solve datatypes with rewriterules +(set-logic AUFLIA) +(set-info :status unsat) + +;; lists 2 nil +(declare-sort elt 0) ;; we suppose that elt is infinite +(declare-sort list 0) + +(declare-fun nil1 () list) +(declare-fun nil2 () list) +(declare-fun cons1 (elt list) list) +(declare-fun cons2 (elt list) list) + +;;;;;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj1 (cons1 ?e ?l)) ?e))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj2 (cons1 ?e ?l)) ?l))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj1 (cons2 ?e ?l)) ?e))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj2 (cons2 ?e ?l)) ?l))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun proj11 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (= (proj11 (cons1 ?e ?l)) ?e) :rewrite-rule) )) + +(declare-fun proj12 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (= (proj12 (cons1 ?e ?l)) ?l) :rewrite-rule) )) + +(assert (= (proj11 nil1) nil1)) +(assert (= (proj12 nil1) nil1)) +(assert (= (proj11 nil2) nil2)) +(assert (= (proj12 nil2) nil2)) + +(declare-fun proj21 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (= (proj21 (cons2 ?e ?l)) ?e) :rewrite-rule) )) + +(declare-fun proj22 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (= (proj22 (cons2 ?e ?l)) ?l) :rewrite-rule) )) + +(assert (= (proj21 nil1) nil1)) +(assert (= (proj22 nil1) nil1)) +(assert (= (proj21 nil2) nil2)) +(assert (= (proj22 nil2) nil2)) + + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun iscons1 (list) Bool) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons1 (cons1 ?e ?l)) true))) :pattern ((cons1 ?e ?l)) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons1 ?l) (= ?l (cons1 (proj11 ?l) (proj12 ?l))))) :pattern ((proj11 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons1 ?l) (= ?l (cons1 (proj11 ?l) (proj12 ?l))))) :pattern ((proj12 ?l)) ) :rewrite-rule) )) + + +(declare-fun iscons2 (list) Bool) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons2 (cons2 ?e ?l)) true))) :pattern ((cons2 ?e ?l)) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons2 ?l) (= ?l (cons2 (proj21 ?l) (proj22 ?l))))) :pattern ((proj21 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons2 ?l) (= ?l (cons2 (proj21 ?l) (proj22 ?l))))) :pattern ((proj22 ?l)) ) :rewrite-rule) )) + + +(declare-fun isnil1 (list) Bool) +(assert (= (isnil1 nil1) true)) + +(declare-fun isnil2 (list) Bool) +(assert (= (isnil2 nil2) true)) + +;; distinct +(assert (forall ((?l list)) + (! (=> (isnil1 ?l) (and (not (isnil2 ?l)) (not (iscons1 ?l)) (not (iscons2 ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (isnil2 ?l) (and (not (isnil1 ?l)) (not (iscons1 ?l)) (not (iscons2 ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (iscons1 ?l) (and (not (isnil1 ?l)) (not (isnil2 ?l)) (not (iscons2 ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (iscons2 ?l) (and (not (isnil1 ?l)) (not (isnil2 ?l)) (not (iscons1 ?l))) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj11 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj12 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj21 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons1 ?l) (iscons2 ?l))) :pattern ((proj22 ?l)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; finite case-split +(assert (forall ((?l list)) + (! (=> (and (not (iscons1 ?l)) (not (iscons2 ?l))) (or (isnil1 ?l) (isnil2 ?l))) :rewrite-rule) )) + + + +;;;;; goal + +(declare-fun e () elt) +(declare-fun l1 () list) +(declare-fun l2 () list) + + +;; (assert (not (=> (iscons2 l1) (=> (= (proj22 l1) (proj22 l2)) (= l1 (cons2 (proj21 l1) (proj22 l2))))))) + +(assert (= (cons1 l1 l2) (cons2 l1 l2))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/datatypes_clark.smt2 b/test/regress/regress0/rewriterules/datatypes_clark.smt2 new file mode 100644 index 000000000..eacb5ff6a --- /dev/null +++ b/test/regress/regress0/rewriterules/datatypes_clark.smt2 @@ -0,0 +1,264 @@ +(set-logic LRA) + +;; DATATYPE +;; nat = succ(pred : nat) | zero, +;; list = cons(car : tree, cdr : list) | null, +;; tree = node(children : list) | leaf(data : nat) +;; END; + +;;;;;;;;;;; +;; nat ;; +;;;;;;;;;;; +(declare-sort nat 0) +(declare-fun zero () nat) +(declare-fun succ (nat) nat) + +;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj1 (nat) nat) +(assert (forall ((?x1 nat)) + (! (! (=> true (=> true (= (inj1 (succ ?x1)) ?x1))) :pattern ((succ ?x1)) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun pred (nat) nat) +(assert (forall ((?x1 nat)) + (! (= (pred (succ ?x1)) ?x1) :rewrite-rule) )) + +(assert (= (pred zero) zero)) + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun is_succ (nat) Bool) +(assert (= (is_succ zero) false)) +(assert (forall ((?x1 nat)) + (! (! (=> true (=> true (= (is_succ (succ ?x1)) true))) :pattern ((succ ?x1)) ) :rewrite-rule) )) + +(assert (forall ((?x1 nat)) + (! (! (=> true (=> (is_succ ?x1) (= ?x1 (succ (pred ?x1))))) :pattern ((pred ?x1)) ) :rewrite-rule) )) + +(declare-fun is_zero (nat) Bool) +(assert (= (is_zero zero) true)) +(assert (forall ((?x1 nat)) + (! (=> true (=> (is_zero ?x1) (= ?x1 zero))) :rewrite-rule) )) + +;;; directrr +(assert (forall ((?x1 nat)) + (! (= (is_succ (succ ?x1)) true) :rewrite-rule))) +(assert (forall ((?x1 nat)) + (! (= (is_zero (succ ?x1)) false) :rewrite-rule))) + + +;;;;;;;;;;;;;;;;;;;; +;; distinct +(assert (forall ((?x1 nat)) + (! (=> (is_zero ?x1) (not (is_succ ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (=> (is_succ ?x1) (not (is_zero ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (=> (not (is_zero ?x1)) (is_succ ?x1) ) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (=> (not (is_succ ?x1)) (is_zero ?x1) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?x1 nat)) + (! (! (=> true (or (is_zero ?x1) (is_succ ?x1))) :pattern ((pred ?x1)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; non-cyclic +(declare-fun size_nat (nat) Real) +(assert (forall ((?x1 nat)) + (! (! (=> true (> (size_nat (succ ?x1)) (size_nat ?x1))) :pattern ((succ ?x1)) ) :rewrite-rule) )) + + + +;;;;;;;;;;;;;;;;;;;;; +;; list and tree + +(declare-sort list 0) +(declare-sort tree 0) + +;;;;;;;;;;; +;; list ;; +;;;;;;;;;;; + +(declare-fun null () list) +(declare-fun cons (tree list) list) + +(declare-fun node (list) tree) +(declare-fun leaf (nat) tree) + +;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj2 (list) tree) +(assert (forall ((?x1 tree) (?x2 list)) + (! (! (=> true (=> true (= (inj2 (cons ?x1 ?x2)) ?x1))) :pattern ((cons ?x1 ?x2)) ) :rewrite-rule) )) + +(declare-fun inj3 (list) list) +(assert (forall ((?x1 tree) (?x2 list)) + (! (! (=> true (=> true (= (inj3 (cons ?x1 ?x2)) ?x2))) :pattern ((cons ?x1 ?x2)) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun car (list) tree) +(assert (forall ((?x1 tree) (?x2 list)) + (! (= (car (cons ?x1 ?x2)) ?x1) :rewrite-rule) )) + +(assert (= (car null) (node null))) + +(declare-fun cdr (list) list) +(assert (forall ((?x1 tree) (?x2 list)) + (! (= (cdr (cons ?x1 ?x2)) ?x2) :rewrite-rule) )) + +(assert (= (cdr null) null)) + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun is_cons (list) Bool) +(assert (= (is_cons null) false)) +(assert (forall ((?x1 tree) (?x2 list)) + (! (! (=> true (=> true (= (is_cons (cons ?x1 ?x2)) true))) :pattern ((cons ?x1 ?x2)) ) :rewrite-rule) )) + +(assert (forall ((?x1 list)) + (! (! (=> true (=> (is_cons ?x1) (= ?x1 (cons (car ?x1) (cdr ?x1))))) :pattern ((car ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (! (=> true (=> (is_cons ?x1) (= ?x1 (cons (car ?x1) (cdr ?x1))))) :pattern ((cdr ?x1)) ) :rewrite-rule) )) + +(declare-fun is_null (list) Bool) +(assert (= (is_null null) true)) + +(assert (forall ((?x1 list)) + (! (! (=> true (=> (is_null ?x1) (= (car ?x1) (node null)))) :pattern ((car ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (! (=> true (=> (is_null ?x1) (= (cdr ?x1) null))) :pattern ((cdr ?x1)) ) :rewrite-rule) )) + +(assert (forall ((?x1 list)) + (! (=> true (=> (is_null ?x1) (= ?x1 null))) :rewrite-rule) )) + +;;; directrr +(assert (forall ((?x1 tree) (?x2 list)) + (! (= (is_cons (cons ?x1 ?x2)) true) :rewrite-rule) )) +(assert (forall ((?x1 tree) (?x2 list)) + (! (= (is_null (cons ?x1 ?x2)) false) :rewrite-rule) )) + + + +;;;;;;;;;;;;;;;;;;;; +;; distinct +(assert (forall ((?x1 list)) + (! (=> (is_null ?x1) (not (is_cons ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (=> (is_cons ?x1) (not (is_null ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (=> (not (is_null ?x1)) (is_cons ?x1) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (=> (not (is_cons ?x1)) (is_null ?x1) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?x1 list)) + (! (! (=> true (or (is_null ?x1) (is_cons ?x1))) :pattern ((car ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (! (=> true (or (is_null ?x1) (is_cons ?x1))) :pattern ((cdr ?x1)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;; +;; tree + +;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj4 (tree) list) +(assert (forall ((?x1 list)) + (! (! (=> true (=> true (= (inj4 (node ?x1)) ?x1))) :pattern ((node ?x1)) ) :rewrite-rule) )) + +(declare-fun inj5 (tree) nat) +(assert (forall ((?x1 nat)) + (! (! (=> true (=> true (= (inj5 (leaf ?x1)) ?x1))) :pattern ((leaf ?x1)) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun children (tree) list) +(assert (forall ((?x1 list)) + (! (= (children (node ?x1)) ?x1) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (= (children (leaf ?x1)) null) :rewrite-rule) )) + + +(declare-fun data (tree) nat) +(assert (forall ((?x1 nat)) + (! (= (data (leaf ?x1)) ?x1) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (= (data (node ?x1)) zero) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun is_node (tree) Bool) +(assert (forall ((?x1 list)) + (! (! (=> true (=> true (= (is_node (node ?x1)) true))) :pattern ((node ?x1)) ) :rewrite-rule) )) + +(assert (forall ((?x1 tree)) + (! (! (=> true (=> (is_node ?x1) (= ?x1 (node (children ?x1))))) :pattern ((children ?x1)) ) :rewrite-rule) )) + +(assert (forall ((?x1 tree)) + (! (! (=> true (=> (is_node ?x1) (= (data ?x1) zero))) :pattern ((data ?x1)) ) :rewrite-rule) )) + + +(declare-fun is_leaf (tree) Bool) +(assert (forall ((?x1 nat)) + (! (! (=> true (=> true (= (is_leaf (leaf ?x1)) true))) :pattern ((leaf ?x1)) ) :rewrite-rule) )) + +(assert (forall ((?x1 tree)) + (! (! (=> true (=> (is_leaf ?x1) (= ?x1 (leaf (data ?x1))))) :pattern ((data ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 tree)) + (! (! (=> true (=> (is_leaf ?x1) (= (children ?x1) null))) :pattern ((children ?x1)) ) :rewrite-rule) )) + +;;; directrr +(assert (forall ((?x1 list)) + (! (= (is_node (node ?x1)) true) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (= (is_leaf (node ?x1)) false) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (= (is_leaf (leaf ?x1)) true) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (= (is_node (leaf ?x1)) false) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;;; +;; distinct +(assert (forall ((?x1 tree)) + (! (=> (is_node ?x1) (not (is_leaf ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 tree)) + (! (=> (is_leaf ?x1) (not (is_node ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 tree)) + (! (=> (not (is_node ?x1)) (is_leaf ?x1) ) :rewrite-rule) )) +(assert (forall ((?x1 tree)) + (! (=> (not (is_leaf ?x1)) (is_node ?x1) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?x1 tree)) + (! (! (=> true (or (is_node ?x1) (is_leaf ?x1))) :pattern ((children ?x1)) ) :rewrite-rule) )) + +(assert (forall ((?x1 tree)) + (! (! (=> true (or (is_node ?x1) (is_leaf ?x1))) :pattern ((data ?x1)) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;; +;; non-cyclic +(declare-fun size_list (list) Real) +(declare-fun size_tree (tree) Real) +(assert (forall ((?x1 tree) (?x2 list)) + (! (! (=> true (and (> (size_list (cons ?x1 ?x2)) (size_tree ?x1)) (> (size_list (cons ?x1 ?x2)) (size_list ?x2)))) :pattern ((cons ?x1 ?x2)) ) :rewrite-rule) )) +(assert (forall ((?x1 list)) + (! (! (=> true (> (size_tree (node ?x1)) (size_list ?x1))) :pattern ((node ?x1)) ) :rewrite-rule) )) +(assert (forall ((?x1 nat)) + (! (! (=> true (> (size_tree (leaf ?x1)) (size_nat ?x1))) :pattern ((leaf ?x1)) ) :rewrite-rule) )) diff --git a/test/regress/regress0/rewriterules/datatypes_sat.smt2 b/test/regress/regress0/rewriterules/datatypes_sat.smt2 new file mode 100644 index 000000000..92576f976 --- /dev/null +++ b/test/regress/regress0/rewriterules/datatypes_sat.smt2 @@ -0,0 +1,101 @@ +;; try to solve datatypes with rewriterules +(set-logic AUFLIA) +(set-info :status sat) + +;; lists 2 nil +(declare-sort elt 0) ;; we suppose that elt is infinite +(declare-sort list 0) + +(declare-fun nil1 () list) +(declare-fun nil2 () list) +(declare-fun cons (elt list) list) + +;;;;;;;;;;;;;;;;;;;; +;; injective + +(declare-fun inj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj1 (cons ?e ?l)) ?e))) :pattern ((cons ?e ?l)) ) :rewrite-rule) )) + +(declare-fun inj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (inj2 (cons ?e ?l)) ?l))) :pattern ((cons ?e ?l)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;;; +;; projection + +(declare-fun proj1 (list) elt) +(assert (forall ((?e elt) (?l list)) + (! (= (proj1 (cons ?e ?l)) ?e) :rewrite-rule) )) + +(declare-fun proj2 (list) list) +(assert (forall ((?e elt) (?l list)) + (! (= (proj2 (cons ?e ?l)) ?l) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; test +(declare-fun iscons (list) Bool) +(assert (= (iscons nil1) false)) +(assert (= (iscons nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (! (=> true (=> true (= (iscons (cons ?e ?l)) true))) :pattern ((cons ?e ?l)) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons ?l) (= ?l (cons (proj1 ?l) (proj2 ?l))))) :pattern ((proj1 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (=> (iscons ?l) (= ?l (cons (proj1 ?l) (proj2 ?l))))) :pattern ((proj2 ?l)) ) :rewrite-rule) )) + + +(declare-fun isnil1 (list) Bool) +(assert (= (isnil1 nil1) true)) +(assert (= (isnil1 nil2) false)) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil1 (cons ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (=> true (=> (isnil1 ?l) (= ?l nil1))) :rewrite-rule) )) + +(declare-fun isnil2 (list) Bool) +(assert (= (isnil2 nil1) false)) +(assert (= (isnil2 nil2) true)) +(assert (forall ((?e elt) (?l list)) + (! (= (isnil2 (cons ?e ?l)) false) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (=> true (=> (isnil2 ?l) (= ?l nil2))) :rewrite-rule) )) + +;; distinct +(assert (forall ((?l list)) + (! (=> (isnil1 ?l) (and (not (isnil2 ?l)) (not (iscons ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (isnil2 ?l) (and (not (isnil1 ?l)) (not (iscons ?l))) ) :rewrite-rule) )) + +(assert (forall ((?l list)) + (! (=> (iscons ?l) (and (not (isnil1 ?l)) (not (isnil2 ?l))) ) :rewrite-rule) )) + + +;;;;;;;;;;;;;;;;;;; +;; case-split +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons ?l))) :pattern ((proj1 ?l)) ) :rewrite-rule) )) +(assert (forall ((?l list)) + (! (! (=> true (or (isnil1 ?l) (isnil2 ?l) (iscons ?l))) :pattern ((proj2 ?l)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;;;; +;; finite case-split +(assert (forall ((?l list)) + (! (=> (not (iscons ?l)) (or (isnil1 ?l) (isnil2 ?l))) :rewrite-rule) )) + + + +;;;;; goal + +(declare-fun e () elt) +(declare-fun l1 () list) +(declare-fun l2 () list) + + +(assert (not (=> (iscons l1) (=> (= (proj2 l1) (proj2 l2)) (= l1 (cons (proj1 l2) (proj2 l2))))))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length.smt2 b/test/regress/regress0/rewriterules/length.smt2 new file mode 100644 index 000000000..215698ade --- /dev/null +++ b/test/regress/regress0/rewriterules/length.smt2 @@ -0,0 +1,26 @@ +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (forall ((?l list)) (! (=> (= ?l nil) (= (length ?l) 0)) :rewrite-rule))) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ (length ?l) 1)) :rewrite-rule))) + +;;(assert (forall ((?l list)) (=> (= ?l nil) (= (length ?l) 0)))) + +;;(assert (forall ((?e Int) (?l list) (?l2 list)) (=> (= ?l2 (cons ?e ?l)) (= (length ?l2) (+ (length ?l) 1))))) + + +(assert (not (= (length (cons 1 (cons 2 (cons 3 nil)))) 3))) + +(check-sat) +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen.smt2 b/test/regress/regress0/rewriterules/length_gen.smt2 new file mode 100644 index 000000000..dda478357 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 42 nil)) 42))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_010.smt2 b/test/regress/regress0/rewriterules/length_gen_010.smt2 new file mode 100644 index 000000000..7c7663b17 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_010.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 10 nil)) 10))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_010_lemma.smt2 b/test/regress/regress0/rewriterules/length_gen_010_lemma.smt2 new file mode 100644 index 000000000..02bc877fc --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_010_lemma.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (= (length (cons ?e ?l)) (+ 1 (length ?l))))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)))) + +(assert (forall ((?n Int) (?l list)) (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 10 nil)) 10))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_020.smt2 b/test/regress/regress0/rewriterules/length_gen_020.smt2 new file mode 100644 index 000000000..8e0021175 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_020.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 20 nil)) 20))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_020_sat.smt2 b/test/regress/regress0/rewriterules/length_gen_020_sat.smt2 new file mode 100644 index 000000000..cc75eb85a --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_020_sat.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status sat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 20 nil)) 200))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_040.smt2 b/test/regress/regress0/rewriterules/length_gen_040.smt2 new file mode 100644 index 000000000..687422223 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_040.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 40 nil)) 40))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_040_lemma.smt2 b/test/regress/regress0/rewriterules/length_gen_040_lemma.smt2 new file mode 100644 index 000000000..293ea147b --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_040_lemma.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (= (length (cons ?e ?l)) (+ 1 (length ?l))))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)))) + +(assert (forall ((?n Int) (?l list)) (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 40 nil)) 40))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_040_lemma_trigger.smt2 b/test/regress/regress0/rewriterules/length_gen_040_lemma_trigger.smt2 new file mode 100644 index 000000000..69f9f97be --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_040_lemma_trigger.smt2 @@ -0,0 +1,35 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (!(= (length (cons ?e ?l)) (+ 1 (length ?l))) :pattern ((length (cons ?e ?l))) ))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :pattern ((gen_cons ?n ?l)) ))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) + :pattern ((gen_cons ?n ?l)) ))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 40 nil)) 40))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_080.smt2 b/test/regress/regress0/rewriterules/length_gen_080.smt2 new file mode 100644 index 000000000..061042be3 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_080.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 80 nil)) 80))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_1280.smt2 b/test/regress/regress0/rewriterules/length_gen_1280.smt2 new file mode 100644 index 000000000..b613844ce --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_1280.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 1280 nil)) 1280))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_1280_lemma_trigger.smt2 b/test/regress/regress0/rewriterules/length_gen_1280_lemma_trigger.smt2 new file mode 100644 index 000000000..7d1cf3203 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_1280_lemma_trigger.smt2 @@ -0,0 +1,35 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (!(= (length (cons ?e ?l)) (+ 1 (length ?l))) :pattern ((length (cons ?e ?l))) ))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :pattern ((gen_cons ?n ?l)) ))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) + :pattern ((gen_cons ?n ?l)) ))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 1280 nil)) 1280))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_160.smt2 b/test/regress/regress0/rewriterules/length_gen_160.smt2 new file mode 100644 index 000000000..339c70bb5 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_160.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 160 nil)) 160))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_160_lemma.smt2 b/test/regress/regress0/rewriterules/length_gen_160_lemma.smt2 new file mode 100644 index 000000000..28b58183e --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_160_lemma.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (= (length (cons ?e ?l)) (+ 1 (length ?l))))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)))) + +(assert (forall ((?n Int) (?l list)) (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 160 nil)) 160))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_160_lemma_trigger.smt2 b/test/regress/regress0/rewriterules/length_gen_160_lemma_trigger.smt2 new file mode 100644 index 000000000..65d0c9570 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_160_lemma_trigger.smt2 @@ -0,0 +1,35 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (!(= (length (cons ?e ?l)) (+ 1 (length ?l))) :pattern ((length (cons ?e ?l))) ))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :pattern ((gen_cons ?n ?l)) ))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) + :pattern ((gen_cons ?n ?l)) ))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 160 nil)) 160))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_160_sat.smt2 b/test/regress/regress0/rewriterules/length_gen_160_sat.smt2 new file mode 100644 index 000000000..e2ed52faf --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_160_sat.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status sat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 160 nil)) 1600))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_2560.smt2 b/test/regress/regress0/rewriterules/length_gen_2560.smt2 new file mode 100644 index 000000000..2aff61656 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_2560.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 2560 nil)) 2560))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_2560_sat.smt2 b/test/regress/regress0/rewriterules/length_gen_2560_sat.smt2 new file mode 100644 index 000000000..3e88e781f --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_2560_sat.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 2560 nil)) 25600))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_640.smt2 b/test/regress/regress0/rewriterules/length_gen_640.smt2 new file mode 100644 index 000000000..f1dc6bbf2 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_640.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 640 nil)) 640))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_640_lemma.smt2 b/test/regress/regress0/rewriterules/length_gen_640_lemma.smt2 new file mode 100644 index 000000000..29d0f1aca --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_640_lemma.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (= (length (cons ?e ?l)) (+ 1 (length ?l))))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)))) + +(assert (forall ((?n Int) (?l list)) (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 640 nil)) 640))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_640_sat.smt2 b/test/regress/regress0/rewriterules/length_gen_640_sat.smt2 new file mode 100644 index 000000000..958c2c730 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_640_sat.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 640 nil)) 6400))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_inv_1280.smt2 b/test/regress/regress0/rewriterules/length_gen_inv_1280.smt2 new file mode 100644 index 000000000..30e3bc864 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_inv_1280.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (cons 1 (gen_cons (- ?n 1) ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 1280 nil)) 1280))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_inv_160.smt2 b/test/regress/regress0/rewriterules/length_gen_inv_160.smt2 new file mode 100644 index 000000000..9c2a5c307 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_inv_160.smt2 @@ -0,0 +1,34 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (cons 1 (gen_cons (- ?n 1) ?l)))) :rewrite-rule))) + +(declare-fun n () Int) + +(assert (not (= (length (gen_cons 160 nil)) 160))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_n.smt2 b/test/regress/regress0/rewriterules/length_gen_n.smt2 new file mode 100644 index 000000000..5d1255eb0 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_n.smt2 @@ -0,0 +1,45 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (! (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)) :rewrite-rule))) + +(assert (forall ((?n Int) (?l list)) (! (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))) :rewrite-rule))) + + +;;(assert (not (forall ((?n Int)) (=> (>= ?n 0) (=> (= (length (gen_cons ?n nil)) ?n) (= (length (gen_cons (+ ?n 1) nil)) (+ ?n 1))) )))) + +;;(assert (not (forall ((?n Int) (?l list)) (=> (>= ?n 0) (=> (= (length ?l) ?n) (= (length (cons 1 ?l)) (+ ?n 1))) )))) + +;; (assert (not (forall ((?n Int)) (=> (>= ?n 0) (=> (= (length (gen_cons ?n nil)) ?n) (= (length (cons 1 (gen_cons ?n nil))) (+ ?n 1))) )))) + +;;(assert (not (forall ((?n Int)) (=> (>= ?n 0) (= (gen_cons (+ ?n 1) nil) (cons 1 (gen_cons ?n nil))) )))) + +(assert (not (forall ((?n Int)) (=> (>= ?n 0) (=> + (forall ((?l list)) (= (gen_cons ?n (cons 1 ?l)) (cons 1 (gen_cons ?n ?l)))) + (forall ((?l list)) (= (gen_cons (+ ?n 1) (cons 1 ?l)) (cons 1 (gen_cons (+ ?n 1) ?l)))) + ))))) + + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_gen_n_lemma.smt2 b/test/regress/regress0/rewriterules/length_gen_n_lemma.smt2 new file mode 100644 index 000000000..b1462cf98 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_gen_n_lemma.smt2 @@ -0,0 +1,43 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (= (length (cons ?e ?l)) (+ 1 (length ?l))))) + +(declare-fun gen_cons (Int list) list) + +(assert (forall ((?n Int) (?l list)) (=> (= ?n 0) (= (gen_cons ?n ?l) ?l)))) + +(assert (forall ((?n Int) (?l list)) (=> (> ?n 0) (= (gen_cons ?n ?l) + (gen_cons (- ?n 1) (cons 1 ?l)))))) + + +;;(assert (not (forall ((?n Int)) (=> (>= ?n 0) (=> (= (length (gen_cons ?n nil)) ?n) (= (length (gen_cons (+ ?n 1) nil)) (+ ?n 1))) )))) + +;;(assert (not (forall ((?n Int) (?l list)) (=> (>= ?n 0) (=> (= (length ?l) ?n) (= (length (cons 1 ?l)) (+ ?n 1))) )))) + +;;(assert (not (forall ((?n Int)) (=> (>= ?n 0) (=> (= (length (gen_cons ?n nil)) ?n) (= (length (cons 1 (gen_cons ?n nil))) (+ ?n 1))) )))) + +(assert (not (forall ((?n Int)) (=> (>= ?n 0) (=> + (forall ((?l list)) (= (gen_cons ?n (cons 1 ?l)) (cons 1 (gen_cons ?n ?l)))) + (forall ((?l list)) (= (gen_cons (+ ?n 1) (cons 1 ?l)) (cons 1 (gen_cons (+ ?n 1) ?l)))) + ))))) + + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_trick.smt2 b/test/regress/regress0/rewriterules/length_trick.smt2 new file mode 100644 index 000000000..84afc5815 --- /dev/null +++ b/test/regress/regress0/rewriterules/length_trick.smt2 @@ -0,0 +1,32 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + + + + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ (length ?l) 1)) :rewrite-rule))) + +;;(assert (forall ((?l list)) (=> (= ?l nil) (= (length ?l) 0)))) + +;;(assert (forall ((?e Int) (?l list) (?l2 list)) (=> (= ?l2 (cons ?e ?l)) (= (length ?l2) (+ (length ?l) 1))))) + + +(assert (not (= (length (cons 1 (cons 2 (cons 3 nil)))) 3))) + +(check-sat) +(exit) diff --git a/test/regress/regress0/rewriterules/length_trick2.smt2 b/test/regress/regress0/rewriterules/length_trick2.smt2 new file mode 100644 index 000000000..af9e7f07d --- /dev/null +++ b/test/regress/regress0/rewriterules/length_trick2.smt2 @@ -0,0 +1,32 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + + + + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ (length ?l) 1)) :rewrite-rule))) + +;;(assert (forall ((?l list)) (=> (= ?l nil) (= (length ?l) 0)))) + +;;(assert (forall ((?e Int) (?l list) (?l2 list)) (=> (= ?l2 (cons ?e ?l)) (= (length ?l2) (+ (length ?l) 1))))) + +(assert (forall ((?a Int) (?b Int) (?l list)) + (not (> (length (cons ?a (cons ?b ?l))) (length ?l))))) +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_trick3.smt2 b/test/regress/regress0/rewriterules/length_trick3.smt2 new file mode 100644 index 000000000..f6899541b --- /dev/null +++ b/test/regress/regress0/rewriterules/length_trick3.smt2 @@ -0,0 +1,36 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) +;; don't use arith +(declare-sort mynat 0) +(declare-fun zero () mynat) +(declare-fun succ (mynat) mynat) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) mynat) + +(assert (= (length nil) zero)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (succ (length ?l))) :rewrite-rule))) + +(declare-fun ten_one_cons (list) list) + +(assert (forall ((?l list)) (! (= (ten_one_cons ?l) + (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 ?l) ))))))))) + ) :rewrite-rule))) + +(assert (not (= (length (ten_one_cons nil)) + (succ(succ(succ(succ(succ(succ(succ(succ(succ(succ zero))))))))))))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/length_trick3_int.smt2 b/test/regress/regress0/rewriterules/length_trick3_int.smt2 new file mode 100644 index 000000000..d58bf55fe --- /dev/null +++ b/test/regress/regress0/rewriterules/length_trick3_int.smt2 @@ -0,0 +1,44 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) + + +;;define length +(declare-fun length (list) Int) + +(assert (= (length nil) 0)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (+ 1 (length ?l))) :rewrite-rule))) + +(declare-fun ten_one_cons (list) list) + +(assert (forall ((?l list)) (! (= (ten_one_cons ?l) + (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 ?l) ))))))))) + ) :rewrite-rule))) + +(assert (not (= (length (ten_one_cons nil)) + 10))) + +(check-sat) + +(declare-fun ten_one_ten (list) list) + +(assert (forall ((?l list)) (! (= (ten_one_ten ?l) + (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons (ten_one_cons ?l) ))))))))) + ) :rewrite-rule))) + +(declare-fun two_one_ten (list) list) + +(assert (forall ((?l list)) (! (= (two_one_ten ?l) + (ten_one_cons (ten_one_cons ?l)) + ) :rewrite-rule))) + +(exit) diff --git a/test/regress/regress0/rewriterules/set_A_new_fast_tableau-base.smt2 b/test/regress/regress0/rewriterules/set_A_new_fast_tableau-base.smt2 new file mode 100644 index 000000000..65dc23a10 --- /dev/null +++ b/test/regress/regress0/rewriterules/set_A_new_fast_tableau-base.smt2 @@ -0,0 +1,100 @@ +;; A new fast tableau-base ... Domenico Cantone et Calogero G.Zarba +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort elt 0) +(declare-sort set 0) + +(declare-fun in (elt set) Bool) + +;;;;;;;;;;;;;;;;;;;; +;; inter + +(declare-fun inter (set set) set) +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (in ?s (inter ?t1 ?t2)) (and (in ?s ?t1) (in ?s ?t2))) :rewrite-rule))) + + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (not (in ?s ?t1)) (not (in ?s (inter ?t1 ?t2)))) :pattern ((inter ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (not (in ?s ?t2)) (not (in ?s (inter ?t1 ?t2)))) :pattern ((inter ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (not (in ?s (inter ?t1 ?t2))) (in ?s ?t1)) (not (in ?s ?t2))) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (not (in ?s (inter ?t1 ?t2))) (in ?s ?t2)) (not (in ?s ?t1))) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (and (in ?s ?t1) (in ?s ?t2)) (in ?s (inter ?t1 ?t2))) :pattern ((inter ?t1 ?t2)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;; +;; union + +(declare-fun union (set set) set) +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (not (in ?s (union ?t1 ?t2))) (and (not (in ?s ?t1)) (not (in ?s ?t2)))) :rewrite-rule))) + + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (in ?s ?t1) (in ?s (union ?t1 ?t2))) :pattern ((union ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (in ?s ?t2) (in ?s (union ?t1 ?t2))) :pattern ((union ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (in ?s (union ?t1 ?t2)) (not (in ?s ?t1))) (in ?s ?t2)) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (in ?s (union ?t1 ?t2)) (not (in ?s ?t2))) (in ?s ?t1)) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (and (not (in ?s ?t1)) (not (in ?s ?t2))) (not (in ?s (union ?t1 ?t2)))) :pattern ((union ?t1 ?t2)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;; +;;sing + +(declare-fun sing (elt) set) +(assert (forall ((?s elt)) + (! (! (=> true (in ?s (sing ?s))) :pattern ((sing ?s)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 elt)) + (! (=> true (=> (in ?s (sing ?t1)) (= ?s ?t1))) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 elt)) + (! (=> (not (in ?s (sing ?t1))) (not (= ?s ?t1))) :rewrite-rule) )) + + + +;;;;;;;;;;;;;;;;;;; +;; fullfiling +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (in ?s (union ?t1 ?t2)) (or (in ?s ?t1) (not (in ?s ?t1)))) :rewrite-rule))) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (in ?s ?t1) (or (in ?s ?t2) (not (in ?s ?t2)))) :pattern ((inter ?t1 ?t2))) :rewrite-rule))) + +(assert (forall ((?t1 set) (?t2 set)) (! (=> (not (= ?t1 ?t2)) (exists ((?e elt)) (or (and (in ?e ?t1) (not (in ?e ?t2))) (and (not (in ?e ?t1)) (in ?e ?t2))))) :rewrite-rule))) + +(declare-fun e () elt) +(declare-fun t1 () set) +(declare-fun t2 () set) +(declare-fun t3 () set) + +;;(assert (not (=> (in e (inter (union t1 t2) (union t1 t1))) (in e (union t1 t1))))) +;;(assert (not (=> (in e (union t1 t1)) (in e t1)))) + +;; hyp +;;(assert (=> (in e (union t1 t1)) (in e t1))) + +;;(assert (not (=> (in e (inter (union t1 t2) (union t1 t1))) (in e t1)))) + +;;(assert (or (and (not (in e (union t1 (union t2 t3)))) (in e (union (union t1 t2) t3))) (and (in e (union t1 (union t2 t3))) (not (in e (union (union t1 t2) t3))))) ) +(assert (not (= (union t1 (union t2 t3)) (union (union t1 t2) t3))) ) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/set_A_new_fast_tableau-base_sat.smt2 b/test/regress/regress0/rewriterules/set_A_new_fast_tableau-base_sat.smt2 new file mode 100644 index 000000000..07e9f9643 --- /dev/null +++ b/test/regress/regress0/rewriterules/set_A_new_fast_tableau-base_sat.smt2 @@ -0,0 +1,100 @@ +;; A new fast tableau-base ... Domenico Cantone et Calogero G.Zarba +(set-logic AUFLIA) +(set-info :status sat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort elt 0) +(declare-sort set 0) + +(declare-fun in (elt set) Bool) + +;;;;;;;;;;;;;;;;;;;; +;; inter + +(declare-fun inter (set set) set) +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (in ?s (inter ?t1 ?t2)) (and (in ?s ?t1) (in ?s ?t2))) :rewrite-rule))) + + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (not (in ?s ?t1)) (not (in ?s (inter ?t1 ?t2)))) :pattern ((inter ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (not (in ?s ?t2)) (not (in ?s (inter ?t1 ?t2)))) :pattern ((inter ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (not (in ?s (inter ?t1 ?t2))) (in ?s ?t1)) (not (in ?s ?t2))) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (not (in ?s (inter ?t1 ?t2))) (in ?s ?t2)) (not (in ?s ?t1))) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (and (in ?s ?t1) (in ?s ?t2)) (in ?s (inter ?t1 ?t2))) :pattern ((inter ?t1 ?t2)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;;; +;; union + +(declare-fun union (set set) set) +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (not (in ?s (union ?t1 ?t2))) (and (not (in ?s ?t1)) (not (in ?s ?t2)))) :rewrite-rule))) + + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (in ?s ?t1) (in ?s (union ?t1 ?t2))) :pattern ((union ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (in ?s ?t2) (in ?s (union ?t1 ?t2))) :pattern ((union ?t1 ?t2)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (in ?s (union ?t1 ?t2)) (not (in ?s ?t1))) (in ?s ?t2)) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (and (in ?s (union ?t1 ?t2)) (not (in ?s ?t2))) (in ?s ?t1)) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (and (not (in ?s ?t1)) (not (in ?s ?t2))) (not (in ?s (union ?t1 ?t2)))) :pattern ((union ?t1 ?t2)) ) :rewrite-rule) )) + +;;;;;;;;;;;;;;;; +;;sing + +(declare-fun sing (elt) set) +(assert (forall ((?s elt)) + (! (! (=> true (in ?s (sing ?s))) :pattern ((sing ?s)) ) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 elt)) + (! (=> true (=> (in ?s (sing ?t1)) (= ?s ?t1))) :rewrite-rule) )) + +(assert (forall ((?s elt) (?t1 elt)) + (! (=> (not (in ?s (sing ?t1))) (not (= ?s ?t1))) :rewrite-rule) )) + + + +;;;;;;;;;;;;;;;;;;; +;; fullfiling +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (=> (in ?s (union ?t1 ?t2)) (or (in ?s ?t1) (not (in ?s ?t1)))) :rewrite-rule))) + +(assert (forall ((?s elt) (?t1 set) (?t2 set)) + (! (! (=> (in ?s ?t1) (or (in ?s ?t2) (not (in ?s ?t2)))) :pattern ((inter ?t1 ?t2))) :rewrite-rule))) + +;; (assert (forall ((?t1 set) (?t2 set)) (! (=> (not (= ?t1 ?t2)) (exists ((?e elt)) (or (and (in ?e ?t1) (not (in ?e ?t2))) (and (not (in ?e ?t1)) (in ?e ?t2))))) ))) + +(declare-fun e () elt) +(declare-fun t1 () set) +(declare-fun t2 () set) +(declare-fun t3 () set) + +;;(assert (not (=> (in e (inter (union t1 t2) (union t1 t1))) (in e (union t1 t1))))) +;;(assert (not (=> (in e (union t1 t1)) (in e t1)))) + +;; hyp +;;(assert (=> (in e (union t1 t1)) (in e t1))) + +;;(assert (not (=> (in e (inter (union t1 t2) (union t1 t1))) (in e t1)))) + +(assert (or (and (not (in e (union t1 (union t2 t3)))) (in e (union (union t1 t2) t3))) (and (in e (union t1 (union t2 t3))) (not (in e (union (union t2 t2) t3))))) ) + + +(check-sat) + +(exit) diff --git a/test/regress/regress0/rewriterules/test_guards.smt2 b/test/regress/regress0/rewriterules/test_guards.smt2 new file mode 100644 index 000000000..98c845fb5 --- /dev/null +++ b/test/regress/regress0/rewriterules/test_guards.smt2 @@ -0,0 +1,45 @@ +;; Same than length.smt2 but the nil case is not a rewrite rule +;; So here the rewrite rules have no guards length + +(set-logic AUFLIA) +(set-info :status unsat) + +;; don't use a datatypes for currently focusing in uf +(declare-sort list 0) +;; don't use arith +(declare-sort mynat 0) +(declare-fun zero () mynat) +(declare-fun succ (mynat) mynat) + +(declare-fun cons (Int list) list) +(declare-fun nil () list) +(declare-fun p (list) Bool) + + +;;define length +(declare-fun length (list) mynat) + +(assert (= (length nil) zero)) + +(assert (forall ((?e Int) (?l list)) (! (= (length (cons ?e ?l)) (succ (length ?l))) :rewrite-rule))) + +(declare-fun ten_one_cons (list) list) + +(assert (forall ((?l list)) (! (=> (p ?l) (= (ten_one_cons ?l) + (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 ?l) ))))))))) + )) :rewrite-rule))) + +(declare-fun a () Bool) +(declare-fun b () Bool) +(declare-fun c () Bool) + +(assert (=> a (p nil)) ) +(assert (=> b (p nil)) ) +(assert (or a b)) + +(assert (not (= (length (ten_one_cons nil)) + (succ(succ(succ(succ(succ(succ(succ(succ(succ(succ zero))))))))))))) + +(check-sat) + +(exit) diff --git a/test/regress/regress0/uflia/xs-09-16-3-4-1-5.smt b/test/regress/regress0/uflia/xs-09-16-3-4-1-5.smt index d9158d400..549306c5b 100644 --- a/test/regress/regress0/uflia/xs-09-16-3-4-1-5.smt +++ b/test/regress/regress0/uflia/xs-09-16-3-4-1-5.smt @@ -1,29 +1,29 @@ -(benchmark mathsat -:source { MathSat group } -:logic QF_UFLIA +(benchmark mathsat +:source { MathSat group } +:logic QF_UFLIA :status unsat :category { industrial } :difficulty { 2 } -:extrafuns ((fmt1 Int)) -:extrafuns ((fmt0 Int)) -:extrafuns ((arg1 Int)) -:extrafuns ((arg0 Int)) -:extrafuns ((fmt_length Int)) -:extrafuns ((distance Int)) -:extrafuns ((adr_hi Int)) -:extrafuns ((adr_medhi Int)) -:extrafuns ((adr_medlo Int)) -:extrafuns ((adr_lo Int)) -:extrafuns ((select_format Int Int)) -:extrafuns ((percent Int)) -:extrafuns ((s Int)) -:extrafuns ((s_count Int Int)) -:extrafuns ((x Int)) -:extrafuns ((x_count Int Int)) -:formula -(flet ($concval (and (and (and (and (and (and (and (and (= distance 16) (= fmt_length 9)) (= adr_lo 3)) (= adr_medlo 4)) (= adr_medhi 1)) (= adr_hi 5)) (= percent 37)) (= s 115)) (= x 120))) -(flet ($attack (and (and (and (and (and (and (and (= fmt0 0) (= arg0 (- fmt0 distance))) (>= arg1 fmt0)) (< fmt1 (- (+ fmt0 fmt_length) 1))) (> fmt1 (+ fmt0 1))) (>= arg1 (+ arg0 distance))) (< arg1 (- (+ (+ arg0 distance) fmt_length) 4))) (= arg1 (+ (+ arg0 (* 4 (s_count (- (- fmt1 2) fmt0)))) (* 4 (x_count (- (- fmt1 2) fmt0))))))) -(flet ($restrict (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (= (select_format 0) percent) (= (select_format 0) s)) (= (select_format 0) x)) (= (select_format 0) adr_lo)) (= (select_format 0) adr_medlo)) (= (select_format 0) adr_medhi)) (= (select_format 0) adr_hi)) (= (select_format 0) 255)) (= (select_format 1) percent)) (= (select_format 1) s)) (= (select_format 1) x)) (= (select_format 1) adr_lo)) (= (select_format 1) adr_medlo)) (= (select_format 1) adr_medhi)) (= (select_format 1) adr_hi)) (= (select_format 1) 255)) (= (select_format 2) percent)) (= (select_format 2) s)) (= (select_format 2) x)) (= (select_format 2) adr_lo)) (= (select_format 2) adr_medlo)) (= (select_format 2) adr_medhi)) (= (select_format 2) adr_hi)) (= (select_format 2) 255)) (= (select_format 3) percent)) (= (select_format 3) s)) (= (select_format 3) x)) (= (select_format 3) adr_lo)) (= (select_format 3) adr_medlo)) (= (select_format 3) adr_medhi)) (= (select_format 3) adr_hi)) (= (select_format 3) 255)) (= (select_format 4) percent)) (= (select_format 4) s)) (= (select_format 4) x)) (= (select_format 4) adr_lo)) (= (select_format 4) adr_medlo)) (= (select_format 4) adr_medhi)) (= (select_format 4) adr_hi)) (= (select_format 4) 255)) (= (select_format 5) percent)) (= (select_format 5) s)) (= (select_format 5) x)) (= (select_format 5) adr_lo)) (= (select_format 5) adr_medlo)) (= (select_format 5) adr_medhi)) (= (select_format 5) adr_hi)) (= (select_format 5) 255)) (= (select_format 6) percent)) (= (select_format 6) s)) (= (select_format 6) x)) (= (select_format 6) adr_lo)) (= (select_format 6) adr_medlo)) (= (select_format 6) adr_medhi)) (= (select_format 6) adr_hi)) (= (select_format 6) 255)) (= (select_format 7) percent)) (= (select_format 7) s)) (= (select_format 7) x)) (= (select_format 7) adr_lo)) (= (select_format 7) adr_medlo)) (= (select_format 7) adr_medhi)) (= (select_format 7) adr_hi)) (= (select_format 7) 255)) (= (select_format 8) percent)) (= (select_format 8) s)) (= (select_format 8) x)) (= (select_format 8) adr_lo)) (= (select_format 8) adr_medlo)) (= (select_format 8) adr_medhi)) (= (select_format 8) adr_hi)) (= (select_format 8) 255))) -(flet ($counterdef (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (if_then_else (and (= (select_format 0) percent) (= (select_format 1) s)) (= (s_count 0) 1) (= (s_count 0) 0)) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) s)) (= (s_count 1) (+ (s_count 0) 1)) (= (s_count 1) (s_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) s)) (= (s_count 2) (+ (s_count 1) 1)) (= (s_count 2) (s_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) s)) (= (s_count 3) (+ (s_count 2) 1)) (= (s_count 3) (s_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) s)) (= (s_count 4) (+ (s_count 3) 1)) (= (s_count 4) (s_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) s)) (= (s_count 5) (+ (s_count 4) 1)) (= (s_count 5) (s_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) s)) (= (s_count 6) (+ (s_count 5) 1)) (= (s_count 6) (s_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) s)) (= (s_count 7) (+ (s_count 6) 1)) (= (s_count 7) (s_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) s)) (= (s_count 8) (+ (s_count 7) 1)) (= (s_count 8) (s_count 7)))) (if_then_else (and (= (select_format 0) percent) (= (select_format 1) x)) (= (x_count 0) 1) (= (x_count 0) 0))) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) x)) (= (x_count 1) (+ (x_count 0) 1)) (= (x_count 1) (x_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) x)) (= (x_count 2) (+ (x_count 1) 1)) (= (x_count 2) (x_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) x)) (= (x_count 3) (+ (x_count 2) 1)) (= (x_count 3) (x_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) x)) (= (x_count 4) (+ (x_count 3) 1)) (= (x_count 4) (x_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) x)) (= (x_count 5) (+ (x_count 4) 1)) (= (x_count 5) (x_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) x)) (= (x_count 6) (+ (x_count 5) 1)) (= (x_count 6) (x_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) x)) (= (x_count 7) (+ (x_count 6) 1)) (= (x_count 7) (x_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) x)) (= (x_count 8) (+ (x_count 7) 1)) (= (x_count 8) (x_count 7))))) -(flet ($integral (and (or (or (or (or (or (or (or (or (= fmt1 (+ fmt0 0)) (= fmt1 (+ fmt0 1))) (= fmt1 (+ fmt0 2))) (= fmt1 (+ fmt0 3))) (= fmt1 (+ fmt0 4))) (= fmt1 (+ fmt0 5))) (= fmt1 (+ fmt0 6))) (= fmt1 (+ fmt0 7))) (= fmt1 (+ fmt0 8))) (or (or (or (or (or (= arg1 (+ fmt0 0)) (= arg1 (+ fmt0 1))) (= arg1 (+ fmt0 2))) (= arg1 (+ fmt0 3))) (= arg1 (+ fmt0 4))) (= arg1 (+ fmt0 5))))) -(and (and (and (and (and $concval $attack) $restrict) $counterdef) $integral) (not (and (and (and (and (and (= (select_format fmt1) percent) (= (select_format (+ fmt1 1)) s)) (= (select_format arg1) adr_lo)) (= (select_format (+ arg1 1)) adr_medlo)) (= (select_format (+ arg1 2)) adr_medhi)) (= (select_format (+ arg1 3)) adr_hi)))))))))) +:extrafuns ((fmt1 Int)) +:extrafuns ((fmt0 Int)) +:extrafuns ((arg1 Int)) +:extrafuns ((arg0 Int)) +:extrafuns ((fmt_length Int)) +:extrafuns ((distance Int)) +:extrafuns ((adr_hi Int)) +:extrafuns ((adr_medhi Int)) +:extrafuns ((adr_medlo Int)) +:extrafuns ((adr_lo Int)) +:extrafuns ((select_format Int Int)) +:extrafuns ((percent Int)) +:extrafuns ((s Int)) +:extrafuns ((s_count Int Int)) +:extrafuns ((x Int)) +:extrafuns ((x_count Int Int)) +:formula +(flet ($concval (and (and (and (and (and (and (and (and (= distance 16) (= fmt_length 9)) (= adr_lo 3)) (= adr_medlo 4)) (= adr_medhi 1)) (= adr_hi 5)) (= percent 37)) (= s 115)) (= x 120))) +(flet ($attack (and (and (and (and (and (and (and (= fmt0 0) (= arg0 (- fmt0 distance))) (>= arg1 fmt0)) (< fmt1 (- (+ fmt0 fmt_length) 1))) (> fmt1 (+ fmt0 1))) (>= arg1 (+ arg0 distance))) (< arg1 (- (+ (+ arg0 distance) fmt_length) 4))) (= arg1 (+ (+ arg0 (* 4 (s_count (- (- fmt1 2) fmt0)))) (* 4 (x_count (- (- fmt1 2) fmt0))))))) +(flet ($restrict (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (= (select_format 0) percent) (= (select_format 0) s)) (= (select_format 0) x)) (= (select_format 0) adr_lo)) (= (select_format 0) adr_medlo)) (= (select_format 0) adr_medhi)) (= (select_format 0) adr_hi)) (= (select_format 0) 255)) (= (select_format 1) percent)) (= (select_format 1) s)) (= (select_format 1) x)) (= (select_format 1) adr_lo)) (= (select_format 1) adr_medlo)) (= (select_format 1) adr_medhi)) (= (select_format 1) adr_hi)) (= (select_format 1) 255)) (= (select_format 2) percent)) (= (select_format 2) s)) (= (select_format 2) x)) (= (select_format 2) adr_lo)) (= (select_format 2) adr_medlo)) (= (select_format 2) adr_medhi)) (= (select_format 2) adr_hi)) (= (select_format 2) 255)) (= (select_format 3) percent)) (= (select_format 3) s)) (= (select_format 3) x)) (= (select_format 3) adr_lo)) (= (select_format 3) adr_medlo)) (= (select_format 3) adr_medhi)) (= (select_format 3) adr_hi)) (= (select_format 3) 255)) (= (select_format 4) percent)) (= (select_format 4) s)) (= (select_format 4) x)) (= (select_format 4) adr_lo)) (= (select_format 4) adr_medlo)) (= (select_format 4) adr_medhi)) (= (select_format 4) adr_hi)) (= (select_format 4) 255)) (= (select_format 5) percent)) (= (select_format 5) s)) (= (select_format 5) x)) (= (select_format 5) adr_lo)) (= (select_format 5) adr_medlo)) (= (select_format 5) adr_medhi)) (= (select_format 5) adr_hi)) (= (select_format 5) 255)) (= (select_format 6) percent)) (= (select_format 6) s)) (= (select_format 6) x)) (= (select_format 6) adr_lo)) (= (select_format 6) adr_medlo)) (= (select_format 6) adr_medhi)) (= (select_format 6) adr_hi)) (= (select_format 6) 255)) (= (select_format 7) percent)) (= (select_format 7) s)) (= (select_format 7) x)) (= (select_format 7) adr_lo)) (= (select_format 7) adr_medlo)) (= (select_format 7) adr_medhi)) (= (select_format 7) adr_hi)) (= (select_format 7) 255)) (= (select_format 8) percent)) (= (select_format 8) s)) (= (select_format 8) x)) (= (select_format 8) adr_lo)) (= (select_format 8) adr_medlo)) (= (select_format 8) adr_medhi)) (= (select_format 8) adr_hi)) (= (select_format 8) 255))) +(flet ($counterdef (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (if_then_else (and (= (select_format 0) percent) (= (select_format 1) s)) (= (s_count 0) 1) (= (s_count 0) 0)) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) s)) (= (s_count 1) (+ (s_count 0) 1)) (= (s_count 1) (s_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) s)) (= (s_count 2) (+ (s_count 1) 1)) (= (s_count 2) (s_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) s)) (= (s_count 3) (+ (s_count 2) 1)) (= (s_count 3) (s_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) s)) (= (s_count 4) (+ (s_count 3) 1)) (= (s_count 4) (s_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) s)) (= (s_count 5) (+ (s_count 4) 1)) (= (s_count 5) (s_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) s)) (= (s_count 6) (+ (s_count 5) 1)) (= (s_count 6) (s_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) s)) (= (s_count 7) (+ (s_count 6) 1)) (= (s_count 7) (s_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) s)) (= (s_count 8) (+ (s_count 7) 1)) (= (s_count 8) (s_count 7)))) (if_then_else (and (= (select_format 0) percent) (= (select_format 1) x)) (= (x_count 0) 1) (= (x_count 0) 0))) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) x)) (= (x_count 1) (+ (x_count 0) 1)) (= (x_count 1) (x_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) x)) (= (x_count 2) (+ (x_count 1) 1)) (= (x_count 2) (x_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) x)) (= (x_count 3) (+ (x_count 2) 1)) (= (x_count 3) (x_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) x)) (= (x_count 4) (+ (x_count 3) 1)) (= (x_count 4) (x_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) x)) (= (x_count 5) (+ (x_count 4) 1)) (= (x_count 5) (x_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) x)) (= (x_count 6) (+ (x_count 5) 1)) (= (x_count 6) (x_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) x)) (= (x_count 7) (+ (x_count 6) 1)) (= (x_count 7) (x_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) x)) (= (x_count 8) (+ (x_count 7) 1)) (= (x_count 8) (x_count 7))))) +(flet ($integral (and (or (or (or (or (or (or (or (or (= fmt1 (+ fmt0 0)) (= fmt1 (+ fmt0 1))) (= fmt1 (+ fmt0 2))) (= fmt1 (+ fmt0 3))) (= fmt1 (+ fmt0 4))) (= fmt1 (+ fmt0 5))) (= fmt1 (+ fmt0 6))) (= fmt1 (+ fmt0 7))) (= fmt1 (+ fmt0 8))) (or (or (or (or (or (= arg1 (+ fmt0 0)) (= arg1 (+ fmt0 1))) (= arg1 (+ fmt0 2))) (= arg1 (+ fmt0 3))) (= arg1 (+ fmt0 4))) (= arg1 (+ fmt0 5))))) +(and (and (and (and (and $concval $attack) $restrict) $counterdef) $integral) (not (and (and (and (and (and (= (select_format fmt1) percent) (= (select_format (+ fmt1 1)) s)) (= (select_format arg1) adr_lo)) (= (select_format (+ arg1 1)) adr_medlo)) (= (select_format (+ arg1 2)) adr_medhi)) (= (select_format (+ arg1 3)) adr_hi)))))))))) diff --git a/test/regress/regress1/xs-11-20-5-2-5-3.smt b/test/regress/regress1/xs-11-20-5-2-5-3.smt index f8264cf86..00ca325e1 100644 --- a/test/regress/regress1/xs-11-20-5-2-5-3.smt +++ b/test/regress/regress1/xs-11-20-5-2-5-3.smt @@ -1,29 +1,29 @@ -(benchmark mathsat -:source { MathSat group } -:logic QF_UFLIA +(benchmark mathsat +:source { MathSat group } +:logic QF_UFLIA :status unsat :category { industrial } :difficulty { 2 } -:extrafuns ((fmt1 Int)) -:extrafuns ((fmt0 Int)) -:extrafuns ((arg1 Int)) -:extrafuns ((arg0 Int)) -:extrafuns ((fmt_length Int)) -:extrafuns ((distance Int)) -:extrafuns ((adr_hi Int)) -:extrafuns ((adr_medhi Int)) -:extrafuns ((adr_medlo Int)) -:extrafuns ((adr_lo Int)) -:extrafuns ((select_format Int Int)) -:extrafuns ((percent Int)) -:extrafuns ((s Int)) -:extrafuns ((s_count Int Int)) -:extrafuns ((x Int)) -:extrafuns ((x_count Int Int)) -:formula -(flet ($concval (and (and (and (and (and (and (and (and (= distance 20) (= fmt_length 11)) (= adr_lo 5)) (= adr_medlo 2)) (= adr_medhi 5)) (= adr_hi 3)) (= percent 37)) (= s 115)) (= x 120))) -(flet ($attack (and (and (and (and (and (and (and (= fmt0 0) (= arg0 (- fmt0 distance))) (>= arg1 fmt0)) (< fmt1 (- (+ fmt0 fmt_length) 1))) (> fmt1 (+ fmt0 1))) (>= arg1 (+ arg0 distance))) (< arg1 (- (+ (+ arg0 distance) fmt_length) 4))) (= arg1 (+ (+ arg0 (* 4 (s_count (- (- fmt1 2) fmt0)))) (* 4 (x_count (- (- fmt1 2) fmt0))))))) -(flet ($restrict (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (= (select_format 0) percent) (= (select_format 0) s)) (= (select_format 0) x)) (= (select_format 0) adr_lo)) (= (select_format 0) adr_medlo)) (= (select_format 0) adr_medhi)) (= (select_format 0) adr_hi)) (= (select_format 0) 255)) (= (select_format 1) percent)) (= (select_format 1) s)) (= (select_format 1) x)) (= (select_format 1) adr_lo)) (= (select_format 1) adr_medlo)) (= (select_format 1) adr_medhi)) (= (select_format 1) adr_hi)) (= (select_format 1) 255)) (= (select_format 2) percent)) (= (select_format 2) s)) (= (select_format 2) x)) (= (select_format 2) adr_lo)) (= (select_format 2) adr_medlo)) (= (select_format 2) adr_medhi)) (= (select_format 2) adr_hi)) (= (select_format 2) 255)) (= (select_format 3) percent)) (= (select_format 3) s)) (= (select_format 3) x)) (= (select_format 3) adr_lo)) (= (select_format 3) adr_medlo)) (= (select_format 3) adr_medhi)) (= (select_format 3) adr_hi)) (= (select_format 3) 255)) (= (select_format 4) percent)) (= (select_format 4) s)) (= (select_format 4) x)) (= (select_format 4) adr_lo)) (= (select_format 4) adr_medlo)) (= (select_format 4) adr_medhi)) (= (select_format 4) adr_hi)) (= (select_format 4) 255)) (= (select_format 5) percent)) (= (select_format 5) s)) (= (select_format 5) x)) (= (select_format 5) adr_lo)) (= (select_format 5) adr_medlo)) (= (select_format 5) adr_medhi)) (= (select_format 5) adr_hi)) (= (select_format 5) 255)) (= (select_format 6) percent)) (= (select_format 6) s)) (= (select_format 6) x)) (= (select_format 6) adr_lo)) (= (select_format 6) adr_medlo)) (= (select_format 6) adr_medhi)) (= (select_format 6) adr_hi)) (= (select_format 6) 255)) (= (select_format 7) percent)) (= (select_format 7) s)) (= (select_format 7) x)) (= (select_format 7) adr_lo)) (= (select_format 7) adr_medlo)) (= (select_format 7) adr_medhi)) (= (select_format 7) adr_hi)) (= (select_format 7) 255)) (= (select_format 8) percent)) (= (select_format 8) s)) (= (select_format 8) x)) (= (select_format 8) adr_lo)) (= (select_format 8) adr_medlo)) (= (select_format 8) adr_medhi)) (= (select_format 8) adr_hi)) (= (select_format 8) 255)) (= (select_format 9) percent)) (= (select_format 9) s)) (= (select_format 9) x)) (= (select_format 9) adr_lo)) (= (select_format 9) adr_medlo)) (= (select_format 9) adr_medhi)) (= (select_format 9) adr_hi)) (= (select_format 9) 255)) (= (select_format 10) percent)) (= (select_format 10) s)) (= (select_format 10) x)) (= (select_format 10) adr_lo)) (= (select_format 10) adr_medlo)) (= (select_format 10) adr_medhi)) (= (select_format 10) adr_hi)) (= (select_format 10) 255))) -(flet ($counterdef (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (if_then_else (and (= (select_format 0) percent) (= (select_format 1) s)) (= (s_count 0) 1) (= (s_count 0) 0)) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) s)) (= (s_count 1) (+ (s_count 0) 1)) (= (s_count 1) (s_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) s)) (= (s_count 2) (+ (s_count 1) 1)) (= (s_count 2) (s_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) s)) (= (s_count 3) (+ (s_count 2) 1)) (= (s_count 3) (s_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) s)) (= (s_count 4) (+ (s_count 3) 1)) (= (s_count 4) (s_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) s)) (= (s_count 5) (+ (s_count 4) 1)) (= (s_count 5) (s_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) s)) (= (s_count 6) (+ (s_count 5) 1)) (= (s_count 6) (s_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) s)) (= (s_count 7) (+ (s_count 6) 1)) (= (s_count 7) (s_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) s)) (= (s_count 8) (+ (s_count 7) 1)) (= (s_count 8) (s_count 7)))) (if_then_else (and (= (select_format 9) percent) (= (select_format 10) s)) (= (s_count 9) (+ (s_count 8) 1)) (= (s_count 9) (s_count 8)))) (if_then_else (and (= (select_format 10) percent) (= (select_format 11) s)) (= (s_count 10) (+ (s_count 9) 1)) (= (s_count 10) (s_count 9)))) (if_then_else (and (= (select_format 0) percent) (= (select_format 1) x)) (= (x_count 0) 1) (= (x_count 0) 0))) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) x)) (= (x_count 1) (+ (x_count 0) 1)) (= (x_count 1) (x_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) x)) (= (x_count 2) (+ (x_count 1) 1)) (= (x_count 2) (x_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) x)) (= (x_count 3) (+ (x_count 2) 1)) (= (x_count 3) (x_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) x)) (= (x_count 4) (+ (x_count 3) 1)) (= (x_count 4) (x_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) x)) (= (x_count 5) (+ (x_count 4) 1)) (= (x_count 5) (x_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) x)) (= (x_count 6) (+ (x_count 5) 1)) (= (x_count 6) (x_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) x)) (= (x_count 7) (+ (x_count 6) 1)) (= (x_count 7) (x_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) x)) (= (x_count 8) (+ (x_count 7) 1)) (= (x_count 8) (x_count 7)))) (if_then_else (and (= (select_format 9) percent) (= (select_format 10) x)) (= (x_count 9) (+ (x_count 8) 1)) (= (x_count 9) (x_count 8)))) (if_then_else (and (= (select_format 10) percent) (= (select_format 11) x)) (= (x_count 10) (+ (x_count 9) 1)) (= (x_count 10) (x_count 9))))) -(flet ($integral (and (or (or (or (or (or (or (or (or (or (or (= fmt1 (+ fmt0 0)) (= fmt1 (+ fmt0 1))) (= fmt1 (+ fmt0 2))) (= fmt1 (+ fmt0 3))) (= fmt1 (+ fmt0 4))) (= fmt1 (+ fmt0 5))) (= fmt1 (+ fmt0 6))) (= fmt1 (+ fmt0 7))) (= fmt1 (+ fmt0 8))) (= fmt1 (+ fmt0 9))) (= fmt1 (+ fmt0 10))) (or (or (or (or (or (or (or (= arg1 (+ fmt0 0)) (= arg1 (+ fmt0 1))) (= arg1 (+ fmt0 2))) (= arg1 (+ fmt0 3))) (= arg1 (+ fmt0 4))) (= arg1 (+ fmt0 5))) (= arg1 (+ fmt0 6))) (= arg1 (+ fmt0 7))))) -(and (and (and (and (and $concval $attack) $restrict) $counterdef) $integral) (not (and (and (and (and (and (= (select_format fmt1) percent) (= (select_format (+ fmt1 1)) s)) (= (select_format arg1) adr_lo)) (= (select_format (+ arg1 1)) adr_medlo)) (= (select_format (+ arg1 2)) adr_medhi)) (= (select_format (+ arg1 3)) adr_hi)))))))))) +:extrafuns ((fmt1 Int)) +:extrafuns ((fmt0 Int)) +:extrafuns ((arg1 Int)) +:extrafuns ((arg0 Int)) +:extrafuns ((fmt_length Int)) +:extrafuns ((distance Int)) +:extrafuns ((adr_hi Int)) +:extrafuns ((adr_medhi Int)) +:extrafuns ((adr_medlo Int)) +:extrafuns ((adr_lo Int)) +:extrafuns ((select_format Int Int)) +:extrafuns ((percent Int)) +:extrafuns ((s Int)) +:extrafuns ((s_count Int Int)) +:extrafuns ((x Int)) +:extrafuns ((x_count Int Int)) +:formula +(flet ($concval (and (and (and (and (and (and (and (and (= distance 20) (= fmt_length 11)) (= adr_lo 5)) (= adr_medlo 2)) (= adr_medhi 5)) (= adr_hi 3)) (= percent 37)) (= s 115)) (= x 120))) +(flet ($attack (and (and (and (and (and (and (and (= fmt0 0) (= arg0 (- fmt0 distance))) (>= arg1 fmt0)) (< fmt1 (- (+ fmt0 fmt_length) 1))) (> fmt1 (+ fmt0 1))) (>= arg1 (+ arg0 distance))) (< arg1 (- (+ (+ arg0 distance) fmt_length) 4))) (= arg1 (+ (+ arg0 (* 4 (s_count (- (- fmt1 2) fmt0)))) (* 4 (x_count (- (- fmt1 2) fmt0))))))) +(flet ($restrict (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (or (= (select_format 0) percent) (= (select_format 0) s)) (= (select_format 0) x)) (= (select_format 0) adr_lo)) (= (select_format 0) adr_medlo)) (= (select_format 0) adr_medhi)) (= (select_format 0) adr_hi)) (= (select_format 0) 255)) (= (select_format 1) percent)) (= (select_format 1) s)) (= (select_format 1) x)) (= (select_format 1) adr_lo)) (= (select_format 1) adr_medlo)) (= (select_format 1) adr_medhi)) (= (select_format 1) adr_hi)) (= (select_format 1) 255)) (= (select_format 2) percent)) (= (select_format 2) s)) (= (select_format 2) x)) (= (select_format 2) adr_lo)) (= (select_format 2) adr_medlo)) (= (select_format 2) adr_medhi)) (= (select_format 2) adr_hi)) (= (select_format 2) 255)) (= (select_format 3) percent)) (= (select_format 3) s)) (= (select_format 3) x)) (= (select_format 3) adr_lo)) (= (select_format 3) adr_medlo)) (= (select_format 3) adr_medhi)) (= (select_format 3) adr_hi)) (= (select_format 3) 255)) (= (select_format 4) percent)) (= (select_format 4) s)) (= (select_format 4) x)) (= (select_format 4) adr_lo)) (= (select_format 4) adr_medlo)) (= (select_format 4) adr_medhi)) (= (select_format 4) adr_hi)) (= (select_format 4) 255)) (= (select_format 5) percent)) (= (select_format 5) s)) (= (select_format 5) x)) (= (select_format 5) adr_lo)) (= (select_format 5) adr_medlo)) (= (select_format 5) adr_medhi)) (= (select_format 5) adr_hi)) (= (select_format 5) 255)) (= (select_format 6) percent)) (= (select_format 6) s)) (= (select_format 6) x)) (= (select_format 6) adr_lo)) (= (select_format 6) adr_medlo)) (= (select_format 6) adr_medhi)) (= (select_format 6) adr_hi)) (= (select_format 6) 255)) (= (select_format 7) percent)) (= (select_format 7) s)) (= (select_format 7) x)) (= (select_format 7) adr_lo)) (= (select_format 7) adr_medlo)) (= (select_format 7) adr_medhi)) (= (select_format 7) adr_hi)) (= (select_format 7) 255)) (= (select_format 8) percent)) (= (select_format 8) s)) (= (select_format 8) x)) (= (select_format 8) adr_lo)) (= (select_format 8) adr_medlo)) (= (select_format 8) adr_medhi)) (= (select_format 8) adr_hi)) (= (select_format 8) 255)) (= (select_format 9) percent)) (= (select_format 9) s)) (= (select_format 9) x)) (= (select_format 9) adr_lo)) (= (select_format 9) adr_medlo)) (= (select_format 9) adr_medhi)) (= (select_format 9) adr_hi)) (= (select_format 9) 255)) (= (select_format 10) percent)) (= (select_format 10) s)) (= (select_format 10) x)) (= (select_format 10) adr_lo)) (= (select_format 10) adr_medlo)) (= (select_format 10) adr_medhi)) (= (select_format 10) adr_hi)) (= (select_format 10) 255))) +(flet ($counterdef (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (if_then_else (and (= (select_format 0) percent) (= (select_format 1) s)) (= (s_count 0) 1) (= (s_count 0) 0)) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) s)) (= (s_count 1) (+ (s_count 0) 1)) (= (s_count 1) (s_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) s)) (= (s_count 2) (+ (s_count 1) 1)) (= (s_count 2) (s_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) s)) (= (s_count 3) (+ (s_count 2) 1)) (= (s_count 3) (s_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) s)) (= (s_count 4) (+ (s_count 3) 1)) (= (s_count 4) (s_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) s)) (= (s_count 5) (+ (s_count 4) 1)) (= (s_count 5) (s_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) s)) (= (s_count 6) (+ (s_count 5) 1)) (= (s_count 6) (s_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) s)) (= (s_count 7) (+ (s_count 6) 1)) (= (s_count 7) (s_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) s)) (= (s_count 8) (+ (s_count 7) 1)) (= (s_count 8) (s_count 7)))) (if_then_else (and (= (select_format 9) percent) (= (select_format 10) s)) (= (s_count 9) (+ (s_count 8) 1)) (= (s_count 9) (s_count 8)))) (if_then_else (and (= (select_format 10) percent) (= (select_format 11) s)) (= (s_count 10) (+ (s_count 9) 1)) (= (s_count 10) (s_count 9)))) (if_then_else (and (= (select_format 0) percent) (= (select_format 1) x)) (= (x_count 0) 1) (= (x_count 0) 0))) (if_then_else (and (= (select_format 1) percent) (= (select_format 2) x)) (= (x_count 1) (+ (x_count 0) 1)) (= (x_count 1) (x_count 0)))) (if_then_else (and (= (select_format 2) percent) (= (select_format 3) x)) (= (x_count 2) (+ (x_count 1) 1)) (= (x_count 2) (x_count 1)))) (if_then_else (and (= (select_format 3) percent) (= (select_format 4) x)) (= (x_count 3) (+ (x_count 2) 1)) (= (x_count 3) (x_count 2)))) (if_then_else (and (= (select_format 4) percent) (= (select_format 5) x)) (= (x_count 4) (+ (x_count 3) 1)) (= (x_count 4) (x_count 3)))) (if_then_else (and (= (select_format 5) percent) (= (select_format 6) x)) (= (x_count 5) (+ (x_count 4) 1)) (= (x_count 5) (x_count 4)))) (if_then_else (and (= (select_format 6) percent) (= (select_format 7) x)) (= (x_count 6) (+ (x_count 5) 1)) (= (x_count 6) (x_count 5)))) (if_then_else (and (= (select_format 7) percent) (= (select_format 8) x)) (= (x_count 7) (+ (x_count 6) 1)) (= (x_count 7) (x_count 6)))) (if_then_else (and (= (select_format 8) percent) (= (select_format 9) x)) (= (x_count 8) (+ (x_count 7) 1)) (= (x_count 8) (x_count 7)))) (if_then_else (and (= (select_format 9) percent) (= (select_format 10) x)) (= (x_count 9) (+ (x_count 8) 1)) (= (x_count 9) (x_count 8)))) (if_then_else (and (= (select_format 10) percent) (= (select_format 11) x)) (= (x_count 10) (+ (x_count 9) 1)) (= (x_count 10) (x_count 9))))) +(flet ($integral (and (or (or (or (or (or (or (or (or (or (or (= fmt1 (+ fmt0 0)) (= fmt1 (+ fmt0 1))) (= fmt1 (+ fmt0 2))) (= fmt1 (+ fmt0 3))) (= fmt1 (+ fmt0 4))) (= fmt1 (+ fmt0 5))) (= fmt1 (+ fmt0 6))) (= fmt1 (+ fmt0 7))) (= fmt1 (+ fmt0 8))) (= fmt1 (+ fmt0 9))) (= fmt1 (+ fmt0 10))) (or (or (or (or (or (or (or (= arg1 (+ fmt0 0)) (= arg1 (+ fmt0 1))) (= arg1 (+ fmt0 2))) (= arg1 (+ fmt0 3))) (= arg1 (+ fmt0 4))) (= arg1 (+ fmt0 5))) (= arg1 (+ fmt0 6))) (= arg1 (+ fmt0 7))))) +(and (and (and (and (and $concval $attack) $restrict) $counterdef) $integral) (not (and (and (and (and (and (= (select_format fmt1) percent) (= (select_format (+ fmt1 1)) s)) (= (select_format arg1) adr_lo)) (= (select_format (+ arg1 1)) adr_medlo)) (= (select_format (+ arg1 2)) adr_medhi)) (= (select_format (+ arg1 3)) adr_hi)))))))))) diff --git a/test/unit/prop/cnf_stream_black.h b/test/unit/prop/cnf_stream_black.h index de0510582..70c306a6d 100644 --- a/test/unit/prop/cnf_stream_black.h +++ b/test/unit/prop/cnf_stream_black.h @@ -83,6 +83,10 @@ public: return 0; } + bool isDecision(Node) const { + return false; + } + void unregisterVar(SatLiteral lit) { } diff --git a/test/unit/theory/theory_arith_white.h b/test/unit/theory/theory_arith_white.h index b4d5c0086..48b9b2d35 100644 --- a/test/unit/theory/theory_arith_white.h +++ b/test/unit/theory/theory_arith_white.h @@ -22,6 +22,7 @@ #include "theory/theory.h" #include "theory/arith/theory_arith.h" +#include "theory/quantifiers_engine.h" #include "expr/node.h" #include "expr/node_manager.h" #include "context/context.h" @@ -51,6 +52,7 @@ class TheoryArithWhite : public CxxTest::TestSuite { LogicInfo d_logicInfo; Theory::Effort d_level; + QuantifiersEngine* d_quantifiersEngine; TheoryArith* d_arith; TypeNode* d_booleanType; @@ -99,7 +101,9 @@ public: d_nm = new NodeManager(d_ctxt, NULL); d_scope = new NodeManagerScope(d_nm); d_outputChannel.clear(); - d_arith = new TheoryArith(d_ctxt, d_uctxt, d_outputChannel, Valuation(NULL), d_logicInfo); + d_logicInfo.lock(); + d_quantifiersEngine = new QuantifiersEngine(d_ctxt, NULL); + d_arith = new TheoryArith(d_ctxt, d_uctxt, d_outputChannel, Valuation(NULL), d_logicInfo, d_quantifiersEngine); preregistered = new std::set(); @@ -115,6 +119,7 @@ public: delete preregistered; delete d_arith; + delete d_quantifiersEngine; d_outputChannel.clear(); delete d_scope; delete d_nm; diff --git a/test/unit/theory/theory_black.h b/test/unit/theory/theory_black.h index 34536445f..74f5870a3 100644 --- a/test/unit/theory/theory_black.h +++ b/test/unit/theory/theory_black.h @@ -74,6 +74,16 @@ public: return LemmaStatus(Node::null(), 0); } + void requirePhase(TNode, bool) + throw(Interrupted, AssertionException) { + Unreachable(); + } + + bool flipDecision() + throw(Interrupted, AssertionException) { + Unreachable(); + } + void setIncomplete() throw(AssertionException) { Unreachable(); @@ -102,8 +112,8 @@ public: set d_registered; vector d_getSequence; - DummyTheory(Context* ctxt, UserContext* uctxt, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(theory::THEORY_BUILTIN, ctxt, uctxt, out, valuation, logicInfo) { + DummyTheory(Context* ctxt, UserContext* uctxt, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(theory::THEORY_BUILTIN, ctxt, uctxt, out, valuation, logicInfo, qe) { } void registerTerm(TNode n) { @@ -167,8 +177,8 @@ public: d_nm = new NodeManager(d_ctxt, NULL); d_scope = new NodeManagerScope(d_nm); d_logicInfo = new LogicInfo(); - - d_dummy = new DummyTheory(d_ctxt, d_uctxt, d_outputChannel, Valuation(NULL), *d_logicInfo); + d_logicInfo->lock(); + d_dummy = new DummyTheory(d_ctxt, d_uctxt, d_outputChannel, Valuation(NULL), *d_logicInfo, NULL); d_outputChannel.clear(); atom0 = d_nm->mkConst(true); atom1 = d_nm->mkConst(false); diff --git a/test/unit/theory/theory_engine_white.h b/test/unit/theory/theory_engine_white.h index 2d6730949..ae61bd0d3 100644 --- a/test/unit/theory/theory_engine_white.h +++ b/test/unit/theory/theory_engine_white.h @@ -60,6 +60,12 @@ class FakeOutputChannel : public OutputChannel { LemmaStatus lemma(TNode n, bool removable) throw(AssertionException) { Unimplemented(); } + void requirePhase(TNode, bool) throw(AssertionException) { + Unimplemented(); + } + bool flipDecision() throw(AssertionException) { + Unimplemented(); + } void explanation(TNode n) throw(AssertionException) { Unimplemented(); } @@ -107,8 +113,8 @@ class FakeTheory : public Theory { // static std::deque s_expected; public: - FakeTheory(context::Context* ctxt, context::UserContext* uctxt, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) : - Theory(theoryId, ctxt, uctxt, out, valuation, logicInfo) + FakeTheory(context::Context* ctxt, context::UserContext* uctxt, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo, QuantifiersEngine* qe) : + Theory(theoryId, ctxt, uctxt, out, valuation, logicInfo, qe) { } /** Register an expected rewrite call */