mirror of
https://github.com/Z3Prover/z3
synced 2025-04-28 03:15:50 +00:00
still integrating duality
This commit is contained in:
parent
feb5360999
commit
e939dd2bc5
10 changed files with 66 additions and 24 deletions
|
@ -156,10 +156,11 @@ namespace Duality {
|
|||
|
||||
virtual
|
||||
lbool interpolate_tree(TermTree *assumptions,
|
||||
TermTree *&interpolants,
|
||||
model &_model,
|
||||
TermTree *goals = 0
|
||||
) = 0;
|
||||
TermTree *&interpolants,
|
||||
model &_model,
|
||||
TermTree *goals = 0,
|
||||
bool weak = false
|
||||
) = 0;
|
||||
|
||||
/** Assert a background axiom. */
|
||||
virtual void assert_axiom(const expr &axiom) = 0;
|
||||
|
@ -181,11 +182,13 @@ namespace Duality {
|
|||
interpolating_solver *islvr; /** iZ3 solver */
|
||||
|
||||
lbool interpolate_tree(TermTree *assumptions,
|
||||
TermTree *&interpolants,
|
||||
model &_model,
|
||||
TermTree *goals = 0)
|
||||
TermTree *&interpolants,
|
||||
model &_model,
|
||||
TermTree *goals = 0,
|
||||
bool weak = false)
|
||||
{
|
||||
literals _labels;
|
||||
islvr->SetWeakInterpolants(weak);
|
||||
return islvr->interpolate_tree(assumptions,interpolants,_model,_labels,true);
|
||||
}
|
||||
|
||||
|
|
|
@ -585,7 +585,7 @@ namespace Duality {
|
|||
// if (dualLabels != null) dualLabels.Dispose();
|
||||
|
||||
timer_start("interpolate_tree");
|
||||
lbool res = ls->interpolate_tree(tree, interpolant, dualModel,goals);
|
||||
lbool res = ls->interpolate_tree(tree, interpolant, dualModel,goals,true);
|
||||
timer_stop("interpolate_tree");
|
||||
if (res == l_false)
|
||||
{
|
||||
|
|
|
@ -294,7 +294,9 @@ namespace Duality {
|
|||
|
||||
/** Return the counterexample */
|
||||
virtual Counterexample GetCounterexample(){
|
||||
return cex;
|
||||
Counterexample res = cex;
|
||||
cex.tree = 0; // Cex now belongs to caller
|
||||
return res;
|
||||
}
|
||||
|
||||
// options
|
||||
|
@ -879,6 +881,7 @@ namespace Duality {
|
|||
#endif
|
||||
if(_cex) *_cex = cex;
|
||||
else delete cex.tree; // delete the cex if not required
|
||||
cex.tree = 0;
|
||||
node->Bound = save; // put back original bound
|
||||
timer_stop("ProveConjecture");
|
||||
return false;
|
||||
|
|
|
@ -467,14 +467,12 @@ expr context::make_quant(decl_kind op, const std::vector<sort> &_sorts, const st
|
|||
|
||||
if(res == unsat){
|
||||
|
||||
// TODO
|
||||
#if 0
|
||||
interpolation_options_struct opts;
|
||||
if(weak_mode)
|
||||
Z3_set_interpolation_option(options,"weak","1");
|
||||
#endif
|
||||
opts.set("weak","1");
|
||||
|
||||
::ast *proof = m_solver->get_proof();
|
||||
iz3interpolate(m(),proof,_assumptions,_parents,_interpolants,_theory,0);
|
||||
iz3interpolate(m(),proof,_assumptions,_parents,_interpolants,_theory,&opts);
|
||||
|
||||
std::vector<expr> linearized_interpolants(_interpolants.size());
|
||||
for(unsigned i = 0; i < _interpolants.size(); i++)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue