void boolector_propt::lcnf(const bvt &bv) { bvt new_bv; if(process_clause(bv, new_bv)) return; BtorExp *lor_var, *args[new_bv.size()]; unsigned int i=0, j=0; for(bvt::const_iterator it=new_bv.begin(); it!=new_bv.end(); it++, i++) args[i] = boolector_literal(*it); if (i>1) { lor_var = boolector_or(boolector_ctx, args[0], args[1]); for(j=2; j<i; j++) lor_var = boolector_or(boolector_ctx, args[j], lor_var); boolector_assert(boolector_ctx, lor_var); } else if (i==1) { boolector_assert(boolector_ctx, args[0]); } }
literalt boolector_propt::lor(const bvt &bv) { literalt l=new_variable(); u_int size=bv.size()+1; BtorExp *args[size], *result; for(unsigned int i=0; i<bv.size(); i++) { args[i] = boolector_literal(bv[i]); if (i==1) result = boolector_or(boolector_ctx, args[0], args[1]); else if (i>1) result = boolector_or(boolector_ctx, result, args[i]); } boolector_assert(boolector_ctx, boolector_iff(boolector_ctx, boolector_literal(l), result)); return l; }
literalt boolector_propt::lor(literalt a, literalt b) { if(a==const_literal(false)) return b; if(b==const_literal(false)) return a; if(a==const_literal(true)) return const_literal(true); if(b==const_literal(true)) return const_literal(true); if(a==b) return a; literalt l=new_variable(); BtorExp *result; result = boolector_or(boolector_ctx, boolector_literal(a), boolector_literal(b)); boolector_assert(boolector_ctx, boolector_iff(boolector_ctx, boolector_literal(l), result)); return l; }
const size_t V3SvrBoolector::setImplyUnion(const V3SvrDataVec& Exps) { if (Exps.size() == 0) return 0; vector<size_t>::const_iterator it = Exps.begin(); assert (*it); BtorExp *aExp = (isNegFormula(*it) ? boolector_not(_Solver, getOriExp(*it)) : boolector_copy(_Solver, getOriExp(*it))); BtorExp *bExp, *oExp; ++it; for (; it != Exps.end(); ++it) { assert (*it); assert (aExp); bExp = (isNegFormula(*it) ? boolector_not(_Solver, getOriExp(*it)) : boolector_copy(_Solver, getOriExp(*it))); oExp = boolector_or(_Solver, aExp, bExp); assert (oExp); boolector_release(_Solver, aExp); boolector_release(_Solver, bExp); aExp = oExp; } bExp = boolector_var(_Solver, 1, NULL); oExp = boolector_implies(_Solver, bExp, aExp); boolector_assert(_Solver, oExp); boolector_release(_Solver, oExp); boolector_release(_Solver, aExp); assert (!isNegFormula(getPosExp(bExp))); assert (bExp); return getPosExp(bExp); }