1 /******************************************************************************
2 * Top contributors (to current version):
3 * Andrew Reynolds, Andres Noetzli, Aina Niemetz
5 * This file is part of the cvc5 project.
7 * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8 * in the top-level source directory and their institutional affiliations.
9 * All rights reserved. See the file COPYING in the top-level source
10 * directory for licensing information.
11 * ****************************************************************************
13 * Implementation of expr_miner.
16 #include "theory/quantifiers/expr_miner.h"
18 #include "expr/skolem_manager.h"
19 #include "options/quantifiers_options.h"
20 #include "theory/quantifiers/term_util.h"
21 #include "theory/rewriter.h"
24 using namespace cvc5::kind
;
28 namespace quantifiers
{
30 void ExprMiner::initialize(const std::vector
<Node
>& vars
, SygusSampler
* ss
)
33 d_vars
.insert(d_vars
.end(), vars
.begin(), vars
.end());
36 Node
ExprMiner::convertToSkolem(Node n
)
38 if (d_skolems
.empty())
40 NodeManager
* nm
= NodeManager::currentNM();
41 SkolemManager
* sm
= nm
->getSkolemManager();
42 for (const Node
& v
: d_vars
)
44 Node sk
= sm
->mkDummySkolem("rrck", v
.getType());
45 d_skolems
.push_back(sk
);
46 d_fv_to_skolem
[v
] = sk
;
50 d_vars
.begin(), d_vars
.end(), d_skolems
.begin(), d_skolems
.end());
53 void ExprMiner::initializeChecker(std::unique_ptr
<SmtEngine
>& checker
,
56 Assert (!query
.isNull());
57 if (Options::current().quantifiers
.sygusExprMinerCheckTimeoutWasSetByUser
)
60 checker
, nullptr, true, options::sygusExprMinerCheckTimeout());
64 initializeSubsolver(checker
);
66 // also set the options
67 checker
->setOption("sygus-rr-synth-input", "false");
68 checker
->setOption("input-language", "smt2");
69 // Convert bound variables to skolems. This ensures the satisfiability
71 Node squery
= convertToSkolem(query
);
72 checker
->assertFormula(squery
);
75 Result
ExprMiner::doCheck(Node query
)
77 Node queryr
= Rewriter::rewrite(query
);
80 if (!queryr
.getConst
<bool>())
82 return Result(Result::UNSAT
);
86 return Result(Result::SAT
);
89 std::unique_ptr
<SmtEngine
> smte
;
90 initializeChecker(smte
, query
);
91 return smte
->checkSat();
94 } // namespace quantifiers