summaryrefslogtreecommitdiff
path: root/src/theory
diff options
context:
space:
mode:
Diffstat (limited to 'src/theory')
-rw-r--r--src/theory/datatypes/sygus_extension.cpp37
-rw-r--r--src/theory/quantifiers/fmf/model_engine.cpp8
-rw-r--r--src/theory/quantifiers/fmf/model_engine.h3
-rw-r--r--src/theory/quantifiers/sygus/ce_guided_single_inv.cpp9
-rw-r--r--src/theory/quantifiers/sygus/cegis.cpp3
-rw-r--r--src/theory/strings/core_solver.cpp30
6 files changed, 25 insertions, 65 deletions
diff --git a/src/theory/datatypes/sygus_extension.cpp b/src/theory/datatypes/sygus_extension.cpp
index 24288216f..d962ad189 100644
--- a/src/theory/datatypes/sygus_extension.cpp
+++ b/src/theory/datatypes/sygus_extension.cpp
@@ -130,39 +130,10 @@ void SygusExtension::assertFact( Node n, bool polarity, std::vector< Node >& lem
Node SygusExtension::getTermOrderPredicate( Node n1, Node n2 ) {
NodeManager* nm = NodeManager::currentNM();
std::vector< Node > comm_disj;
- // (1) size of left is greater than size of right
- Node sz_less =
- nm->mkNode(GT, nm->mkNode(DT_SIZE, n1), nm->mkNode(DT_SIZE, n2));
- comm_disj.push_back( sz_less );
- // (2) ...or sizes are equal and first child is less by term order
- std::vector<Node> sz_eq_cases;
- Node sz_eq =
- nm->mkNode(EQUAL, nm->mkNode(DT_SIZE, n1), nm->mkNode(DT_SIZE, n2));
- sz_eq_cases.push_back( sz_eq );
- if( options::sygusOpt1() ){
- TypeNode tnc = n1.getType();
- const DType& cdt = tnc.getDType();
- for( unsigned j=0; j<cdt.getNumConstructors(); j++ ){
- std::vector<Node> case_conj;
- for (unsigned k = 0; k < j; k++)
- {
- case_conj.push_back(utils::mkTester(n2, k, cdt).negate());
- }
- if (!case_conj.empty())
- {
- Node corder = nm->mkNode(
- OR,
- utils::mkTester(n1, j, cdt).negate(),
- case_conj.size() == 1 ? case_conj[0] : nm->mkNode(AND, case_conj));
- sz_eq_cases.push_back(corder);
- }
- }
- }
- Node sz_eqc = sz_eq_cases.size() == 1 ? sz_eq_cases[0]
- : nm->mkNode(kind::AND, sz_eq_cases);
- comm_disj.push_back( sz_eqc );
-
- return nm->mkNode(kind::OR, comm_disj);
+ // size of left is greater than or equal to the size of right
+ Node szGeq =
+ nm->mkNode(GEQ, nm->mkNode(DT_SIZE, n1), nm->mkNode(DT_SIZE, n2));
+ return szGeq;
}
void SygusExtension::registerTerm( Node n, std::vector< Node >& lemmas ) {
diff --git a/src/theory/quantifiers/fmf/model_engine.cpp b/src/theory/quantifiers/fmf/model_engine.cpp
index 5b2931e42..4012f687f 100644
--- a/src/theory/quantifiers/fmf/model_engine.cpp
+++ b/src/theory/quantifiers/fmf/model_engine.cpp
@@ -163,11 +163,6 @@ void ModelEngine::assertNode( Node f ){
}
-bool ModelEngine::optOneQuantPerRound(){
- return options::fmfOneQuantPerRound();
-}
-
-
int ModelEngine::checkModel(){
FirstOrderModel* fm = d_quantEngine->getModel();
@@ -230,7 +225,8 @@ int ModelEngine::checkModel(){
//determine if we should check this quantifier
if( d_quantEngine->getModel()->isQuantifierActive( q ) && d_quantEngine->hasOwnership( q, this ) ){
exhaustiveInstantiate( q, e );
- if( d_quantEngine->inConflict() || ( optOneQuantPerRound() && d_addedLemmas>0 ) ){
+ if (d_quantEngine->inConflict())
+ {
break;
}
}else{
diff --git a/src/theory/quantifiers/fmf/model_engine.h b/src/theory/quantifiers/fmf/model_engine.h
index b39dd03f8..3165b01db 100644
--- a/src/theory/quantifiers/fmf/model_engine.h
+++ b/src/theory/quantifiers/fmf/model_engine.h
@@ -29,9 +29,6 @@ class ModelEngine : public QuantifiersModule
{
friend class RepSetIterator;
private:
- //options
- bool optOneQuantPerRound();
-private:
//check model
int checkModel();
//exhaustively instantiate quantifier (possibly using mbqi)
diff --git a/src/theory/quantifiers/sygus/ce_guided_single_inv.cpp b/src/theory/quantifiers/sygus/ce_guided_single_inv.cpp
index f81d2455c..2e5a834b1 100644
--- a/src/theory/quantifiers/sygus/ce_guided_single_inv.cpp
+++ b/src/theory/quantifiers/sygus/ce_guided_single_inv.cpp
@@ -556,12 +556,9 @@ Node CegSingleInv::reconstructToSyntax(Node s,
}else{
Trace("csi-sol") << "Post-process solution..." << std::endl;
Node prev = d_solution;
- if (options::minSynthSol())
- {
- d_solution =
- d_qe->getTermDatabaseSygus()->getExtRewriter()->extendedRewrite(
- d_solution);
- }
+ d_solution =
+ d_qe->getTermDatabaseSygus()->getExtRewriter()->extendedRewrite(
+ d_solution);
if( prev!=d_solution ){
Trace("csi-sol") << "Solution (after post process) : " << d_solution << std::endl;
}
diff --git a/src/theory/quantifiers/sygus/cegis.cpp b/src/theory/quantifiers/sygus/cegis.cpp
index 3ef3a3edc..57fe40517 100644
--- a/src/theory/quantifiers/sygus/cegis.cpp
+++ b/src/theory/quantifiers/sygus/cegis.cpp
@@ -136,8 +136,7 @@ bool Cegis::addEvalLemmas(const std::vector<Node>& candidates,
bool addedEvalLemmas = false;
// Refinement evaluation should not be done for grammars with symbolic
// constructors.
- bool doRefEval = options::sygusRefEval() && !d_usingSymCons;
- if (doRefEval)
+ if (!d_usingSymCons)
{
Trace("cegqi-engine") << " *** Do refinement lemma evaluation"
<< (doGen ? " with conjecture-specific refinement"
diff --git a/src/theory/strings/core_solver.cpp b/src/theory/strings/core_solver.cpp
index e2cafa4d3..723a8c08e 100644
--- a/src/theory/strings/core_solver.cpp
+++ b/src/theory/strings/core_solver.cpp
@@ -1484,22 +1484,22 @@ bool CoreSolver::detectLoop(NormalForm& nfi,
unsigned rproc)
{
int has_loop[2] = { -1, -1 };
- if( options::stringLB() != 2 ) {
- for( unsigned r=0; r<2; r++ ) {
- NormalForm& nf = r == 0 ? nfi : nfj;
- NormalForm& nfo = r == 0 ? nfj : nfi;
- std::vector<Node>& nfv = nf.d_nf;
- std::vector<Node>& nfov = nfo.d_nf;
- if (!nfov[index].isConst())
+ for (unsigned r = 0; r < 2; r++)
+ {
+ NormalForm& nf = r == 0 ? nfi : nfj;
+ NormalForm& nfo = r == 0 ? nfj : nfi;
+ std::vector<Node>& nfv = nf.d_nf;
+ std::vector<Node>& nfov = nfo.d_nf;
+ if (nfov[index].isConst())
+ {
+ continue;
+ }
+ for (unsigned lp = index + 1, lpEnd = nfv.size() - rproc; lp < lpEnd; lp++)
+ {
+ if (nfv[lp] == nfov[index])
{
- for (unsigned lp = index + 1; lp < nfv.size() - rproc; lp++)
- {
- if (nfv[lp] == nfov[index])
- {
- has_loop[r] = lp;
- break;
- }
- }
+ has_loop[r] = lp;
+ break;
}
}
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback