36 squolem->options.set_keepModelFunctions(
true);
37 squolem->options.set_keepResolutionProof(
false);
38 squolem->options.set_freeOnExit(
true);
40 squolem->options.set_debugFilename(
"debug.qdimacs");
41 squolem->options.set_saveDebugFile(
true);
42 squolem->options.set_compressModel(
true);
68 else if(
squolem->modelIsTrue(
a.var_no()))
70 else if(
squolem->modelIsFalse(
a.var_no()) ||
71 squolem->modelIsDontCare(
a.var_no()))
79 return "Squolem (Certifying)";
116 if(
squolem->modelIsTrue(
a.var_no()))
118 else if(
squolem->modelIsFalse(
a.var_no()))
120 else if(
squolem->modelIsComplex(
a.var_no()))
142 std::vector<Literal> buffer(
new_bv.size());
146 buffer[i]=
new_bv[i].dimacs();
151 if(!
squolem->addClause(buffer))
157 squolem->quantifyVariableInner(
171 const quantifiert::typet type,
175 squolem->requantifyVariable(l.
var_no(), type==quantifiert::UNIVERSAL);
180 squolem->options.set_debugFilename(str.c_str());
193 l.
var_no() != 0,
"unknown variable: ", std::to_string(l.
var_no()));
197 it !=
variable_map.end(),
"variable not found in the variable map");
200 unsigned index=it->second.second;
214 std::cout <<
"CACHE HIT for " << l.
dimacs() <<
'\n';
232 else if(
wsp->pSize<=
wsp->nSize)
259 for(
unsigned i=0; i<p->size; i++)
270 else if(clause.
operands().size()==1)
277 std::cout <<
"CLAUSE: " << clause <<
'\n';
280 operands.push_back(clause);
301 for(
unsigned i=0; i<p->size; i++)
305 if(find(
cube.operands().begin(),
cube.operands().end(),
subf)==
306 cube.operands().end())
307 cube.add_to_operands(std::move(
subf));
312 if(
cube.operands().empty())
314 else if(
cube.operands().size()==1)
321 std::cout <<
"CUBE: " <<
cube <<
'\n';
324 operands.push_back(
cube);
virtual void clear()
Reset the abstract state.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
bool process_clause(const bvt &bv, bvt &dest) const
filter 'true' from clause, eliminate duplicates, recognise trivially satisfied clauses
virtual void set_no_variables(size_t no)
virtual size_t no_variables() const override
Base class for all expressions.
std::vector< exprt > operandst
void add_to_operands(const exprt &expr)
Add the given argument to the end of exprt's operands.
The Boolean constant false.
Unbounded, signed integers (mathematical integers, not bitvectors)
mstreamt & status() const
void set_quantifier(const quantifiert::typet type, const literalt l) override
void set_debug_filename(const std::string &str)
~qbf_squolem_coret() override
const exprt f_get_cnf(WitnessStack *wsp)
void set_no_variables(size_t no) override
void lcnf(const bvt &bv) override
void write_qdimacs_cnf(std::ostream &out) override
const exprt f_get(literalt l) override
function_cachet function_cache
void add_quantifier(const quantifiert &quantifier) override
std::string solver_text() const override
bool is_in_core(literalt l) const override
const exprt f_get_dnf(WitnessStack *wsp)
resultt prop_solve() override
modeltypet m_get(literalt a) const override
tvt l_get(literalt a) const override
virtual size_t no_clauses() const
virtual void add_quantifier(const quantifiert &quantifier)
virtual void set_quantifier(const quantifiert::typet type, const literalt l)
void simplify_extractbits(exprt &expr) const
variable_mapt variable_map
The Boolean constant true.
The type of an expression, extends irept.
std::vector< literalt > bvt
Squolem Backend (with Proofs)
#define INVARIANT_WITH_DIAGNOSTICS(CONDITION, REASON,...)
Same as invariant, with one or more diagnostics attached Diagnostics can be of any type that has a sp...
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
API to expression classes.