}
//counterexample-guided instantiation for non-sygus
// enable if any possible quantifiers with arithmetic, datatypes or bitvectors
- if( d_logic.isQuantified() &&
- ( ( options::decisionMode()!=decision::DECISION_STRATEGY_INTERNAL &&
- ( d_logic.isTheoryEnabled(THEORY_ARITH) || d_logic.isTheoryEnabled(THEORY_DATATYPES) || d_logic.isTheoryEnabled(THEORY_BV) ) ) ||
- d_logic.isPure(THEORY_ARITH) || d_logic.isPure(THEORY_BV) ||
- options::cbqiAll() ) ){
+ if (d_logic.isQuantified()
+ && ((options::decisionMode() != decision::DECISION_STRATEGY_INTERNAL
+ && (d_logic.isTheoryEnabled(THEORY_ARITH)
+ || d_logic.isTheoryEnabled(THEORY_DATATYPES)
+ || d_logic.isTheoryEnabled(THEORY_BV)
+ || d_logic.isTheoryEnabled(THEORY_FP)))
+ || d_logic.isPure(THEORY_ARITH) || d_logic.isPure(THEORY_BV)
+ || options::cbqiAll()))
+ {
if( !options::cbqi.wasSetByUser() ){
options::cbqi.set( true );
}
preRewriteTable[kind::VARIABLE] = rewrite::variable;
preRewriteTable[kind::BOUND_VARIABLE] = rewrite::variable;
preRewriteTable[kind::SKOLEM] = rewrite::variable;
+ preRewriteTable[kind::INST_CONSTANT] = rewrite::variable;
preRewriteTable[kind::EQUAL] = rewrite::equal;
postRewriteTable[kind::VARIABLE] = rewrite::variable;
postRewriteTable[kind::BOUND_VARIABLE] = rewrite::variable;
postRewriteTable[kind::SKOLEM] = rewrite::variable;
+ postRewriteTable[kind::INST_CONSTANT] = rewrite::variable;
postRewriteTable[kind::EQUAL] = rewrite::equal;
// CBQI typically works for satisfaction-complete theories
TheoryId t = kindToTheoryId(k);
- if (t == THEORY_BV || t == THEORY_DATATYPES || t == THEORY_BOOL)
+ if (t == THEORY_BV || t == THEORY_FP || t == THEORY_DATATYPES
+ || t == THEORY_BOOL)
{
return CEG_HANDLED;
}
return itv->second;
}
CegHandledStatus ret = CEG_UNHANDLED;
- if (tn.isInteger() || tn.isReal() || tn.isBoolean() || tn.isBitVector())
+ if (tn.isInteger() || tn.isReal() || tn.isBoolean() || tn.isBitVector()
+ || tn.isFloatingPoint())
{
ret = CEG_HANDLED;
}
regress1/quantifiers/ext-ex-deq-trigger.smt2 \
regress1/quantifiers/extract-nproc.smt2 \
regress1/quantifiers/florian-case-ax.smt2 \
+ regress1/quantifiers/fp-cegqi-unsat.smt2 \
regress1/quantifiers/gauss_init_0030.fof.smt2 \
regress1/quantifiers/horn-simple.smt2 \
regress1/quantifiers/inst-max-level-segf.smt2 \
--- /dev/null
+; REQUIRES: symfpu
+(set-info :smt-lib-version 2.6)
+(set-logic FP)
+(set-info :status unsat)
+(declare-fun c_main_~E0~7 () (_ FloatingPoint 11 53))
+(declare-fun c_main_~S~7 () (_ FloatingPoint 11 53))
+(assert (and (= ((_ to_fp 11 53) RNE (_ bv0 32)) c_main_~S~7) (fp.geq c_main_~E0~7 (fp.neg ((_ to_fp 11 53) RNE 1.0))) (fp.leq c_main_~E0~7 ((_ to_fp 11 53) RNE 1.0))))
+(assert (not (and (exists ((main_~E0~7 (_ FloatingPoint 11 53)) (main_~E1~7 (_ FloatingPoint 11 53))) (and (fp.geq main_~E1~7 (fp.neg ((_ to_fp 11 53) RNE 1.0))) (= c_main_~S~7 (fp.sub RNE (fp.add RNE (fp.mul RNE ((_ to_fp 11 53) RNE 0.999) ((_ to_fp 11 53) RNE (_ bv0 32))) main_~E0~7) main_~E1~7)) (fp.geq main_~E0~7 (fp.neg ((_ to_fp 11 53) RNE 1.0))) (fp.leq main_~E0~7 ((_ to_fp 11 53) RNE 1.0)) (fp.leq main_~E1~7 ((_ to_fp 11 53) RNE 1.0)))) (fp.geq c_main_~E0~7 (fp.neg ((_ to_fp 11 53) RNE 1.0))) (fp.leq c_main_~E0~7 ((_ to_fp 11 53) RNE 1.0)))))
+(check-sat)
+(exit)