finishwith --full-saturate-quant
;;
LIA|LRA|NIA|NRA)
- trywith 20 --cbqi --full-saturate-quant
- trywith 20 --full-saturate-quant
- trywith 20 --cbqi --cbqi-recurse --full-saturate-quant
- trywith 60 --qcf-tconstraint --full-saturate-quant
- trywith 120 --cbqi --cbqi-recurse --full-saturate-quant
- finishwith --cbqi-recurse --pre-skolem-quant --full-saturate-quant
+ trywith 60 --cbqi --full-saturate-quant
+ trywith 60 --full-saturate-quant
+ trywith 60 --cbqi --cbqi-recurse --full-saturate-quant
+ trywith 180 --qcf-tconstraint --full-saturate-quant
+ trywith 240 --cbqi --cbqi-recurse --full-saturate-quant
+ finishwith --cbqi --cbqi-recurse --pre-skolem-quant --full-saturate-quant
;;
QF_AUFBV)
trywith 600
runcvc4 --enable-miplib-trick --miplib-trick-subs=4 --lemmas-on-replay-failure --replay-early-close-depth=4 --replay-lemma-reject-cut=128 --replay-reject-cut=512 --unconstrained-simp --pb-rewrites
;;
ALIA|AUFLIA|AUFLIRA|AUFNIRA|BV|UF|UFBV|UFIDL|UFLIA|UFLRA|UFNIA)
- runcvc4 --simplification=none --decision=internal --full-saturate-quant
+ runcvc4
;;
LIA|LRA|NIA|NRA)
- runcvc4 --enable-cbqi --full-saturate-quant
+ runcvc4 --cbqi
;;
QF_BV)
runcvc4 --unconstrained-simp --bv-eq-slicer=auto --bv-div-zero-const --bv-intro-pow2
}
void InstantiationEngine::reset_round( Theory::Effort e ) {
+ d_cbqi_set_quant_inactive = false;
if( options::cbqi() ){
//set inactive the quantified formulas whose CE literals are asserted false
for( int i=0; i<(int)d_quantEngine->getModel()->getNumAssertedQuantifiers(); i++ ){
if( d_quantEngine->getValuation().hasSatValue( cel, value ) ){
Debug("cbqi-debug") << "...CE Literal has value " << value << std::endl;
if( !value ){
- d_quantEngine->getModel()->setQuantifierActive( q, false );
if( d_quantEngine->getValuation().isDecision( cel ) ){
Trace("cbqi-warn") << "CBQI WARNING: Bad decision on CE Literal." << std::endl;
+ }else{
+ d_quantEngine->getModel()->setQuantifierActive( q, false );
+ d_cbqi_set_quant_inactive = true;
}
}
}else{
}
bool InstantiationEngine::checkComplete() {
- for( unsigned i=0; i<d_quants.size(); i++ ){
- if( isIncomplete( d_quants[i] ) ){
- return false;
+ if( !options::cbqiSat() && d_cbqi_set_quant_inactive ){
+ return false;
+ }else{
+ for( unsigned i=0; i<d_quants.size(); i++ ){
+ if( isIncomplete( d_quants[i] ) ){
+ return false;
+ }
}
+ return true;
}
- return true;
}
void InstantiationEngine::registerQuantifier( Node f ){
bool doCbqi( Node f );
/** is the engine incomplete for this quantifier */
bool isIncomplete( Node f );
+ /** cbqi set inactive */
+ bool d_cbqi_set_quant_inactive;
private:
/** do instantiation round */
bool doInstantiationRound( Theory::Effort effort );
/** initialize */
void finishInit();
- bool needsCheck( Theory::Effort e );
+ bool needsCheck( Theory::Effort e );
void reset_round( Theory::Effort e );
void check( Theory::Effort e, unsigned quant_e );
bool checkComplete();
turns on new implementation of counterexample-based quantifier instantiation
option recurseCbqi --cbqi-recurse bool :default false
turns on recursive counterexample-based quantifier instantiation
+option cbqiSat --cbqi-sat bool :read-write :default true
+ answer sat when quantifiers are asserted with counterexample-based quantifier instantiation
### local theory extensions options