// return v;
}
+ const ASTVec STPMgr::GetAsserts_WithKey(int key)
+ {
+ vector<IntToASTVecMap *>::iterator it = _asserts.begin();
+ vector<IntToASTVecMap *>::iterator itend = _asserts.end();
+
+ ASTVec v;
+ for(; it != itend; it++)
+ {
+ IntToASTVecMap * assert_map = (*it);
+ ASTVec * cc = (*assert_map)[key];
+ if(!cc->empty())
+ {
+ v.insert(v.end(), cc->begin(), cc->end());
+ }
+ }
+
+ return v;
+ }
+
// //Create a new variable of ValueWidth 'n'
// ASTNode STPMgr::NewArrayVar(unsigned int index, unsigned int value)
// {
return CurrentSymbol;
} // End of NewParameterized_BooleanVar()
+
+
}; // end namespace beev
const ASTNode PopQuery();
const ASTNode GetQuery();
const ASTVec GetAsserts(void);
+ const ASTVec GetAsserts_WithKey(int key);
+
//add a query/assertion to the current logical context
void AddQuery(const ASTNode& q);
void AddAssert(const ASTNode& assert, int userguided_absrefine=0);
SOLVER_RETURN_TYPE
SATBased_ArrayWriteRefinement(MINISAT::Solver& newS,
const ASTNode& orig_input);
+
+ SOLVER_RETURN_TYPE
+ UserGuided_AbsRefine(MINISAT::Solver& SatSolver,
+ const ASTNode& original_input);
+
// SOLVER_RETURN_TYPE
// SATBased_AllFiniteLoops_Refinement(MINISAT::Solver& newS,
return SOLVER_UNDECIDED;
} //end of SATBased_ArrayWriteRefinement
- //bm->Creates Array Write Axioms
+ //Creates Array Write Axioms
ASTNode
AbsRefine_CounterExample::Create_ArrayWriteAxioms(const ASTNode& term,
const ASTNode& newvar)
}//end of Create_ArrayWriteAxioms()
+ //UserGuided abstraction refinement
+ SOLVER_RETURN_TYPE
+ AbsRefine_CounterExample::
+ UserGuided_AbsRefine(MINISAT::Solver& SatSolver,
+ //const ASTNode& modified_input,
+ const ASTNode& original_input)
+ {
+ ASTVec v = bm->GetAsserts_WithKey(0);
+ if(v.empty())
+ {
+ FatalError("UserGuided_AbsRefine: Something is seriously wrong."\
+ "The input set is empty");
+ }
+ ASTNode sureAddInput = (v.size() == 1) ? v[0] : bm->CreateNode(AND, v);
+
+ SOLVER_RETURN_TYPE res = SOLVER_UNDECIDED;
+ res = CallSAT_ResultCheck(SatSolver, sureAddInput, original_input);
+ if(SOLVER_UNDECIDED != res)
+ {
+ return res;
+ }
+
+ //Do refinement here
+
+
+
+ return res;
+ } //End of UserGuided_AbsRefine()
+
// static void ReplaceOrAddToMap(ASTNodeMap * VarToConstMap,
// const ASTNode& key, const ASTNode& value)
// {