3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-13 01:16:15 +00:00

adding farkas axiom to interpolation

This commit is contained in:
Ken McMillan 2013-11-07 16:17:56 -08:00
parent cf176af48e
commit b076c152b3

View file

@ -1253,13 +1253,23 @@ public:
case FarkasKind: { case FarkasKind: {
std::vector<ast> farkas_coeffs, prem_cons; std::vector<ast> farkas_coeffs, prem_cons;
get_farkas_coeffs(proof,farkas_coeffs); get_farkas_coeffs(proof,farkas_coeffs);
if(farkas_coeffs.size() != nprems){ if(nprems == 0) {// axiom, not rule
pfgoto(proof); int nargs = num_args(con);
throw unsupported(); if(farkas_coeffs.size() != nargs){
pfgoto(proof);
throw unsupported();
}
for(unsigned i = 0; i < nargs; i++){
ast lit = mk_not(arg(con,i));
prem_cons.push_back(lit);
args.push_back(iproof->make_hypothesis(lit));
}
}
else { // rule version (proves false)
prem_cons.resize(nprems);
for(unsigned i = 0; i < nprems; i++)
prem_cons[i] = conc(prem(proof,i));
} }
prem_cons.resize(nprems);
for(unsigned i = 0; i < nprems; i++)
prem_cons[i] = conc(prem(proof,i));
res = iproof->make_farkas(con,args,prem_cons,farkas_coeffs); res = iproof->make_farkas(con,args,prem_cons,farkas_coeffs);
break; break;
} }