From 3013db0a0cf330ebd8d09a4d9c0b4d5dd3312068 Mon Sep 17 00:00:00 2001 From: Andrew Reynolds Date: Mon, 12 May 2014 14:15:40 -0500 Subject: [PATCH] Minor updates/fix to --cbqi-recurse --- contrib/run-script-cascj7-fnt | 14 +++++++++----- contrib/run-script-cascj7-fof | 17 ++++++++++++----- contrib/run-script-cascj7-tff | 12 +++++++++--- src/theory/quantifiers/first_order_model.cpp | 10 +++++++--- src/theory/quantifiers/full_model_check.cpp | 6 ++++++ src/theory/quantifiers/instantiation_engine.cpp | 12 +++++------- src/theory/quantifiers_engine.cpp | 1 - 7 files changed, 48 insertions(+), 24 deletions(-) diff --git a/contrib/run-script-cascj7-fnt b/contrib/run-script-cascj7-fnt index 5d51381da..073a9f297 100755 --- a/contrib/run-script-cascj7-fnt +++ b/contrib/run-script-cascj7-fnt @@ -2,16 +2,15 @@ cvc4=cvc4 bench="$1" -let "to = $2 - 70" file=${bench##*/} filename=${file%.*} -echo "Run $bench at $2" +echo "------- cvc4-fnt $bench at $2..." # use: trywith [params..] -# to attempt a run. Only thing printed on stdout is "sat" or "unsat", in -# which case this run script terminates immediately. Otherwise, this +# to attempt a run. If an SZS ontology result is printed, then +# the run script terminates immediately. Otherwise, this # function returns normally. function trywith { limit=$1; shift; @@ -24,9 +23,14 @@ function trywith { esac; exit 1) if [ ${PIPESTATUS[1]} -eq 0 ]; then exit 0; fi } +function finishwith { + echo "--- Run $@ at $limit..."; + $cvc4 --no-checking --no-interactive --dump-models --produce-models "$@" $bench +} trywith 30 --finite-model-find --sort-inference --uf-ss-fair trywith 30 --finite-model-find --mbqi=gen-ev --uf-ss-totality --decision=internal --sort-inference --uf-ss-fair trywith 10 --finite-model-find --disable-uf-ss-min-model --sort-inference --uf-ss-fair -trywith $to --finite-model-find --mbqi=abs --pre-skolem-quant --sort-inference --uf-ss-fair +trywith 30 --finite-model-find --mbqi=abs --pre-skolem-quant --sort-inference --uf-ss-fair +finishwith --finite-model-find --mbqi=abs --pre-skolem-quant --sort-inference --uf-ss-fair --mbqi-one-inst-per-round echo "% SZS status" "GaveUp for $filename" diff --git a/contrib/run-script-cascj7-fof b/contrib/run-script-cascj7-fof index eb0478e24..582a14952 100755 --- a/contrib/run-script-cascj7-fof +++ b/contrib/run-script-cascj7-fof @@ -2,14 +2,15 @@ cvc4=cvc4 bench="$1" -let "to = $2 - 85" file=${bench##*/} filename=${file%.*} +echo "------- cvc4-fof $bench at $2..." + # use: trywith [params..] -# to attempt a run. Only thing printed on stdout is "sat" or "unsat", in -# which case this run script terminates immediately. Otherwise, this +# to attempt a run. If an SZS ontology result is printed, then +# the run script terminates immediately. Otherwise, this # function returns normally. function trywith { limit=$1; shift; @@ -22,10 +23,16 @@ function trywith { esac; exit 1) if [ ${PIPESTATUS[1]} -eq 0 ]; then exit 0; fi } +function finishwith { + echo "--- Run $@ at $limit..."; + $cvc4 --no-checking --no-interactive --dump-instantiations "$@" $bench +} trywith 30 --full-saturate-quant -trywith 10 --decision=internal --full-saturate-quant +trywith 15 --decision=internal --full-saturate-quant trywith 30 --finite-model-find --fmf-inst-engine --mbqi=gen-ev +trywith 30 --relevant-triggers --full-saturate-quant trywith 15 --finite-model-find --decision=justification-stoponly -trywith $to --quant-cf --full-saturate-quant +trywith 30 --pre-skolem-quant --full-saturate-quant +finishwith --quant-cf --full-saturate-quant echo "% SZS status" "GaveUp for $filename" diff --git a/contrib/run-script-cascj7-tff b/contrib/run-script-cascj7-tff index 893b69572..8033bed1f 100755 --- a/contrib/run-script-cascj7-tff +++ b/contrib/run-script-cascj7-tff @@ -2,11 +2,12 @@ cvc4=cvc4 bench="$1" -let "to = $2 - 170" file=${bench##*/} filename=${file%.*} +echo "------- cvc4-tff $bench at $2..." + # use: trywith [params..] # to attempt a run. Only thing printed on stdout is "sat" or "unsat", in # which case this run script terminates immediately. Otherwise, this @@ -22,11 +23,16 @@ function trywith { esac; exit 1) if [ ${PIPESTATUS[1]} -eq 0 ]; then exit 0; fi } +function finishwith { + echo "--- Run $@ at $limit..."; + $cvc4 --no-checking --no-interactive --dump-instantiations "$@" $bench +} trywith 15 --cbqi-recurse --full-saturate-quant trywith 15 --decision=internal --full-saturate-quant trywith 30 --quant-cf --qcf-tconstraint --full-saturate-quant trywith 20 --finite-model-find -trywith 90 --full-saturate-quant -trywith $to --cbqi-recurse --full-saturate-quant --pre-skolem-quant +trywith 30 --full-saturate-quant +trywith 60 --quant-cf --full-saturate-quant +finishwith --cbqi-recurse --full-saturate-quant --pre-skolem-quant echo "% SZS status" "GaveUp for $filename" diff --git a/src/theory/quantifiers/first_order_model.cpp b/src/theory/quantifiers/first_order_model.cpp index 3edf97467..e3514d949 100644 --- a/src/theory/quantifiers/first_order_model.cpp +++ b/src/theory/quantifiers/first_order_model.cpp @@ -38,9 +38,13 @@ d_qe( qe ), d_axiom_asserted( c, false ), d_forall_asserts( c ), d_isModelSet( c } void FirstOrderModel::assertQuantifier( Node n ){ - d_forall_asserts.push_back( n ); - if( n.getAttribute(AxiomAttribute()) ){ - d_axiom_asserted = true; + if( n.getKind()==FORALL ){ + d_forall_asserts.push_back( n ); + if( n.getAttribute(AxiomAttribute()) ){ + d_axiom_asserted = true; + } + }else if( n.getKind()==NOT ){ + Assert( n[0].getKind()==FORALL ); } } diff --git a/src/theory/quantifiers/full_model_check.cpp b/src/theory/quantifiers/full_model_check.cpp index 63df56392..5cf5a4c72 100644 --- a/src/theory/quantifiers/full_model_check.cpp +++ b/src/theory/quantifiers/full_model_check.cpp @@ -679,6 +679,9 @@ bool FullModelChecker::doExhaustiveInstantiation( FirstOrderModel * fm, Node f, if( d_qe->addInstantiation( f, inst ) ){ Trace("fmc-debug-inst") << "** Added instantiation." << std::endl; d_addedLemmas++; + if( options::fmfOneInstPerRound() ){ + break; + } }else{ Trace("fmc-debug-inst") << "** Instantiation was duplicate." << std::endl; //this can happen if evaluation is unknown @@ -796,6 +799,9 @@ bool FullModelChecker::exhaustiveInstantiate(FirstOrderModelFmc * fm, Node f, No if( d_qe->addInstantiation( f, inst ) ){ Trace("fmc-exh-debug") << " ...success."; addedLemmas++; + if( options::fmfOneInstPerRound() ){ + break; + } }else{ Trace("fmc-exh-debug") << ", failed."; } diff --git a/src/theory/quantifiers/instantiation_engine.cpp b/src/theory/quantifiers/instantiation_engine.cpp index 123dc02b6..53c6d9e27 100644 --- a/src/theory/quantifiers/instantiation_engine.cpp +++ b/src/theory/quantifiers/instantiation_engine.cpp @@ -393,17 +393,15 @@ void InstantiationEngine::debugSat( int reason ){ } } } + if( options::recurseCbqi() && !options::preSkolemQuant() && d_setIncomplete ){ + Debug("quantifiers-sat") << "Cannot conclude SAT with nested quantifiers in recursive strategy." << std::endl; + //TODO : only when existentials with inst constants + d_quantEngine->getOutputChannel().setIncomplete(); + } //} Debug("quantifiers-sat") << "return SAT: Cbqi, no quantifier is active. " << std::endl; - //static bool setTrust = false; - //if( !setTrust ){ - // setTrust = true; - // Notice() << "trust-"; - //} }else if( reason==SAT_INST_STRATEGY ){ Debug("quantifiers-sat") << "return SAT: No strategy chose to add an instantiation." << std::endl; - //Notice() << "sat "; - //Unimplemented(); } } diff --git a/src/theory/quantifiers_engine.cpp b/src/theory/quantifiers_engine.cpp index a16f46ace..53163cd5f 100644 --- a/src/theory/quantifiers_engine.cpp +++ b/src/theory/quantifiers_engine.cpp @@ -266,7 +266,6 @@ void QuantifiersEngine::registerPattern( std::vector & pattern) { } void QuantifiersEngine::assertNode( Node f ){ - Assert( f.getKind()==FORALL ); d_model->assertQuantifier( f ); for( int i=0; i<(int)d_modules.size(); i++ ){ d_modules[i]->assertNode( f ); -- 2.30.2