summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/inst_strategy_cbqi.cpp
diff options
context:
space:
mode:
authorajreynol <andrew.j.reynolds@gmail.com>2015-03-23 15:09:25 +0100
committerajreynol <andrew.j.reynolds@gmail.com>2015-03-23 15:09:25 +0100
commit8beb91c3113dae4a858a30c7a21387e833d60527 (patch)
tree3779a2c309adb7c6200f709244f90a5d0ac554da /src/theory/quantifiers/inst_strategy_cbqi.cpp
parent973cbd67611a2943714fd9544d098ec1472a40b8 (diff)
Decouple counter-example guided quantifier instantiation from Sygus.
Diffstat (limited to 'src/theory/quantifiers/inst_strategy_cbqi.cpp')
-rw-r--r--src/theory/quantifiers/inst_strategy_cbqi.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/theory/quantifiers/inst_strategy_cbqi.cpp b/src/theory/quantifiers/inst_strategy_cbqi.cpp
index c205a280e..fe992b619 100644
--- a/src/theory/quantifiers/inst_strategy_cbqi.cpp
+++ b/src/theory/quantifiers/inst_strategy_cbqi.cpp
@@ -346,3 +346,67 @@ Node InstStrategySimplex::getTableauxValue( ArithVar v, bool minus_delta ){
Rational qmodel = drv.substituteDelta( minus_delta ? -delta : delta );
return mkRationalNode(qmodel);
}
+
+
+
+bool CegqiOutputInstStrategy::addInstantiation( std::vector< Node >& subs, std::vector< int >& subs_typ ) {
+ return d_out->addInstantiation( subs, subs_typ );
+}
+
+bool CegqiOutputInstStrategy::isEligibleForInstantiation( Node n ) {
+ return d_out->isEligibleForInstantiation( n );
+}
+
+
+InstStrategyCegqi::InstStrategyCegqi( QuantifiersEngine * qe ) : InstStrategy( qe ) {
+ d_out = new CegqiOutputInstStrategy( this );
+}
+
+void InstStrategyCegqi::processResetInstantiationRound( Theory::Effort effort ) {
+
+}
+
+int InstStrategyCegqi::process( Node f, Theory::Effort effort, int e ) {
+ if( e<2 ){
+ return STATUS_UNFINISHED;
+ }else if( e==2 ){
+ CegInstantiator * cinst;
+ std::map< Node, CegInstantiator * >::iterator it = d_cinst.find( f );
+ if( it==d_cinst.end() ){
+ cinst = new CegInstantiator( d_quantEngine, d_out );
+ for( int i=0; i<d_quantEngine->getTermDatabase()->getNumInstantiationConstants( f ); i++ ){
+ cinst->d_vars.push_back( d_quantEngine->getTermDatabase()->getInstantiationConstant( f, i ) );
+ }
+ d_cinst[f] = cinst;
+ }else{
+ cinst = it->second;
+ }
+ d_curr_quant = f;
+ cinst->check();
+ d_curr_quant = Node::null();
+
+ return STATUS_UNKNOWN;
+ }
+}
+
+bool InstStrategyCegqi::addInstantiation( std::vector< Node >& subs, std::vector< int >& subs_typ ) {
+ Assert( !d_curr_quant.isNull() );
+ return d_quantEngine->addInstantiation( d_curr_quant, subs, false );
+}
+
+bool InstStrategyCegqi::isEligibleForInstantiation( Node n ) {
+ return true;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback