}
# designed for 300 seconds
-trywith 30 --finite-model-find --sort-inference --uf-ss-fair --mbqi=abs
+trywith 30 --finite-model-find --fmf-inst-engine --sort-inference --uf-ss-fair --mbqi=gen-ev
trywith 20 --finite-model-find --uf-ss=no-minimal --sort-inference --uf-ss-fair
-trywith 20 --finite-model-find --decision=internal
+trywith 20 --finite-model-find --decision=internal --sort-inference --uf-ss-fair
trywith 20 --finite-model-find --uf-ss-totality --sort-inference --uf-ss-fair --mbqi=gen-ev
-trywith 60 --finite-model-find --fmf-inst-engine --sort-inference --uf-ss-fair --mbqi=gen-ev
-finishwith --finite-model-find --quant-cf --sort-inference --uf-ss-fair --mbqi=abs
+trywith 60 --finite-model-find --quant-cf --sort-inference --uf-ss-fair --mbqi=abs
+finishwith --finite-model-find --sort-inference --uf-ss-fair --mbqi=abs
# echo "% SZS status" "GaveUp for $filename"
trywith 15 --clause-split --no-e-matching --full-saturate-quant
trywith 15 --finite-model-find --quant-cf --sort-inference --uf-ss-fair
trywith 5 --trigger-sel=max --full-saturate-quant
-trywith 5 --multi-trigger-when-single --full-saturate-quant
+trywith 5 --relevant-triggers --clause-split --multi-trigger-when-single --full-saturate-quant
trywith 5 --multi-trigger-when-single --multi-trigger-priority --full-saturate-quant
trywith 5 --pre-skolem-quant --no-pre-skolem-quant-nested --full-saturate-quant
-trywith 15 --decision=internal --full-saturate-quant
-trywith 15 --no-quant-cf --full-saturate-quant
-trywith 15 --trigger-sel=min --full-saturate-quant
-trywith 30 --prenex-quant=none --full-saturate-quant
+trywith 15 --relevant-triggers --decision=internal --full-saturate-quant
+trywith 15 --clause-split --no-quant-cf --full-saturate-quant
+trywith 15 --clause-split --trigger-sel=min --full-saturate-quant
+trywith 30 --relevant-triggers --prenex-quant=none --full-saturate-quant
trywith 30 --decision=internal --simplification=none --no-inst-no-entail --no-quant-cf --full-saturate-quant
trywith 30 --finite-model-find --fmf-inst-engine --sort-inference --uf-ss-fair --mbqi=gen-ev
finishwith --term-db-mode=relevant --full-saturate-quant
--- /dev/null
+#!/bin/bash
+
+cvc4=./cvc4
+bench="$1"
+
+file=${bench##*/}
+filename=${file%.*}
+
+echo "------- cvc4-tff casc 25 : $bench at $2..."
+
+# use: trywith [params..]
+# 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;
+ echo "--- Run $@ at $limit...";
+ (ulimit -t "$limit";$cvc4 --lang=tptp --no-checking --no-interactive "$@" $bench) 2>/dev/null |
+ (read w1 w2 w3 result w4 w5;
+ case "$result" in
+ Unsatisfiable) echo "$w1 $w2 $w3 $result $w4 $w5";cat;exit 0;;
+ Theorem) echo "$w1 $w2 $w3 $result $w4 $w5";cat;exit 0;;
+ esac; exit 1)
+ if [ ${PIPESTATUS[1]} -eq 0 ]; then exit 0; fi
+}
+function finishwith {
+ echo "--- Run $@...";
+ $cvc4 --lang=tptp --no-checking --no-interactive "$@" $bench
+}
+
+trywith 10 --cbqi2 --decision=internal --full-saturate-quant --force-logic="UFNIRA"
+trywith 10 --relevant-triggers --full-saturate-quant --force-logic="UFNIRA"
+trywith 20 --cbqi --cbqi-recurse --full-saturate-quant --force-logic="UFNIRA"
+trywith 20 --no-e-matching --full-saturate-quant --force-logic="UFNIRA"
+trywith 20 --qcf-tconstraint --full-saturate-quant --force-logic="UFNIRA"
+trywith 70 --full-saturate-quant --force-logic="UFNIRA"
+finishwith --cbqi2 --cbqi-recurse --full-saturate-quant --force-logic="UFNIRA"
+# echo "% SZS status" "GaveUp for $filename"
if( !options::quantConflictFind.wasSetByUser() ){
options::quantConflictFind.set( false );
}
+ if( !options::instNoEntail.wasSetByUser() ){
+ options::instNoEntail.set( false );
+ }
}
//implied options...
return e>=Theory::EFFORT_LAST_CALL;
}
-bool CegInstantiation::needsModel( Theory::Effort e ) {
- return true;
+unsigned CegInstantiation::needsModel( Theory::Effort e ) {
+ return QuantifiersEngine::QEFFORT_MODEL;
}
void CegInstantiation::check( Theory::Effort e, unsigned quant_e ) {
}
return;
}
+ }else if( !n.getAttribute(SygusProxyAttribute()).isNull() ){
+ out << n.getAttribute(SygusProxyAttribute());
+ }else{
+ out << n;
}
- out << n;
}
void CegInstantiation::collectDisjuncts( Node n, std::vector< Node >& d ) {
CegInstantiation( QuantifiersEngine * qe, context::Context* c );
public:
bool needsCheck( Theory::Effort e );
- bool needsModel( Theory::Effort e );
+ unsigned needsModel( Theory::Effort e );
/* Call during quantifier engine's check */
void check( Theory::Effort e, unsigned quant_e );
/* Called for new quantifiers */
return e==Theory::EFFORT_LAST_CALL;
}
-bool ModelEngine::needsModel( Theory::Effort e ) {
- return true;
+unsigned ModelEngine::needsModel( Theory::Effort e ) {
+ return QuantifiersEngine::QEFFORT_MODEL;
}
void ModelEngine::check( Theory::Effort e, unsigned quant_e ){
virtual ~ModelEngine();
public:
bool needsCheck( Theory::Effort e );
- bool needsModel( Theory::Effort e );
+ unsigned needsModel( Theory::Effort e );
void check( Theory::Effort e, unsigned quant_e );
void registerQuantifier( Node f );
void assertNode( Node f );
### rewrite rules options
-option quantRewriteRules --rewrite-rules bool :default true
+option quantRewriteRules --rewrite-rules bool :default false
use rewrite rules module
option rrOneInstPerRound --rr-one-inst-per-round bool :default false
add one instance of rewrite rule per round
process single invocation synthesis conjectures
option cegqiSingleInvReconstruct --cegqi-si-reconstruct bool :default true
reconstruct solutions for single invocation conjectures in original grammar
+option cegqiSingleInvReconstructConst --cegqi-si-reconstruct-const bool :default true
+ include constants when reconstruct solutions for single invocation conjectures in original grammar
option cegqiSingleInvAbort --cegqi-si-abort bool :default false
abort if our synthesis conjecture is not single invocation
sc = Node::fromExpr( dt[carg].getSygusOp() );
}else{
//TODO
-
-
+ if( !options::cegqiSingleInvReconstructConst() ){
+ Node k = NodeManager::currentNM()->mkSkolem( "sy", tn, "sygus proxy" );
+ SygusProxyAttribute spa;
+ k.setAttribute(spa,c);
+ sc = k;
+ }
}
d_builtin_const_to_sygus[tn][c] = sc;
return sc;
struct LtePartialInstAttributeId {};
typedef expr::Attribute< LtePartialInstAttributeId, bool > LtePartialInstAttribute;
+// attribute for "contains instantiation constants from"
+struct SygusProxyAttributeId {};
+typedef expr::Attribute<SygusProxyAttributeId, Node> SygusProxyAttribute;
+
class QuantifiersEngine;
namespace inst{
using namespace CVC4::theory;
using namespace CVC4::theory::inst;
+unsigned QuantifiersModule::needsModel( Theory::Effort e ) {
+ return QuantifiersEngine::QEFFORT_NONE;
+}
eq::EqualityEngine * QuantifiersModule::getEqualityEngine() {
return d_quantEngine->getMasterEqualityEngine();
d_ierCounter_lc++;
}
bool needsCheck = !d_lemmas_waiting.empty();
- bool needsModel = false;
+ unsigned needsModelE = QEFFORT_NONE;
std::vector< QuantifiersModule* > qm;
if( d_model->checkNeeded() ){
needsCheck = needsCheck || e>=Theory::EFFORT_LAST_CALL; //always need to check at or above last call
if( d_modules[i]->needsCheck( e ) ){
qm.push_back( d_modules[i] );
needsCheck = true;
- if( d_modules[i]->needsModel( e ) ){
- needsModel = true;
- }
+ unsigned me = d_modules[i]->needsModel( e );
+ needsModelE = me<needsModelE ? me : needsModelE;
}
}
}
}else if( e==Theory::EFFORT_FULL ){
++(d_statistics.d_instantiation_rounds);
}
-
Trace("quant-engine-debug") << "Check modules that needed check..." << std::endl;
for( unsigned quant_e = QEFFORT_CONFLICT; quant_e<=QEFFORT_MODEL; quant_e++ ){
bool success = true;
//build the model if any module requested it
- if( quant_e==QEFFORT_MODEL && needsModel ){
+ if( needsModelE==quant_e ){
Assert( d_builder!=NULL );
Trace("quant-engine-debug") << "Build model..." << std::endl;
d_builder->d_addedLemmas = 0;
if( d_hasAddedLemma ){
break;
//otherwise, complete the model generation if necessary
- }else if( quant_e==QEFFORT_MODEL && needsModel && options::produceModels() ){
+ }else if( quant_e==QEFFORT_MODEL && needsModelE<=quant_e && options::produceModels() ){
Trace("quant-engine-debug") << "Build completed model..." << std::endl;
d_builder->buildModel( d_model, true );
}
/* whether this module needs to check this round */
virtual bool needsCheck( Theory::Effort e ) { return e>=Theory::EFFORT_LAST_CALL; }
/* whether this module needs a model built */
- virtual bool needsModel( Theory::Effort e ) { return false; }
- /* whether this module needs a model built */
- virtual bool needsFullModel( Theory::Effort e ) { return false; }
+ virtual unsigned needsModel( Theory::Effort e );
/* reset at a round */
virtual void reset_round( Theory::Effort e ){}
/* Call during quantifier engine's check */
QEFFORT_CONFLICT,
QEFFORT_STANDARD,
QEFFORT_MODEL,
+ //none
+ QEFFORT_NONE,
};
private:
/** list of all quantifiers seen */
-; COMMAND-LINE: --incremental
+; COMMAND-LINE: --incremental --rewrite-rules
(set-logic AUFLIA)