}
}
Assert( !eq_merged );
- */
+ //*/
//combine the equality engine
m->assertEqualityEngine( &d_equalityEngine );
}
}
Assert( !eq_merged );
- */
+ //*/
//get all constructors
eq::EqClassesIterator eqccs_i = eq::EqClassesIterator( &d_equalityEngine );
Assert( n.getKind()==APPLY_UF );
Node f = n.getOperator();
+ //check if already defined, if so, throw error
+ if( d_sorts.find( f )!=d_sorts.end() ){
+ Message() << "Cannot define function " << f << " more than once." << std::endl;
+ exit( 0 );
+ }
+
//create a sort S that represents the inputs of the function
std::stringstream ss;
ss << "I_" << f;
std::map< Node, TypeNode > d_sorts;
//defined functions to injections input -> argument elements
std::map< Node, std::vector< Node > > d_input_arg_inj;
- //flatten ITE
- void flattenITE( Node lhs, Node n, std::vector< std::vector< Node > >& conds, std::vector< Node >& terms );
//simplify
Node simplify( Node n, bool pol, bool hasPol, std::vector< Node >& constraints, bool is_fun_def = false );
//simplify term
//CVC4 will answer SAT or unknown
Trace("fmf-consistent") << std::endl;
debugPrint("fmf-consistent");
+ //if the check was incomplete, we must set incomplete flag
+ if( d_incomplete_check ){
+ d_quantEngine->getOutputChannel().setIncomplete();
+ }
}else{
//otherwise, the search will continue
}
if( avar.getAttribute(FunDefAttribute()) ){
Trace("quant-attr") << "Attribute : function definition : " << q << std::endl;
d_qattr_fundef[q] = true;
+ Assert( q[1].getKind()==EQUAL || q[1].getKind()==IFF );
+ Assert( q[1][0].getKind()==APPLY_UF );
+ Node f = q[1][0].getOperator();
+ if( d_fun_defs.find( f )!=d_fun_defs.end() ){
+ Message() << "Cannot define function " << f << " more than once." << std::endl;
+ exit( 0 );
+ }
+ d_fun_defs[f] = true;
}
if( avar.getAttribute(SygusAttribute()) ){
//should be nested existential
/** filter all nodes that have instances */
void filterInstances( std::vector< Node >& nodes );
-
+private:
+ std::map< Node, bool > d_fun_defs;
public: //general queries concerning quantified formulas wrt modules
/** is quantifier treated as a rewrite rule? */
static bool isRewriteRule( Node q );
(set-option :strings-exp true)
(set-option :produce-models true)
(set-info :smt-lib-version 2.0)
-(set-info :status sat)
+(set-info :status unknown)
(declare-fun text () String)
(declare-fun output () String)
-% EXPECT: sat
+% EXPECT: unknown
% EXPECT: ((charlst2 (store ((as const (Array Int String)) "C") 0 "<")))