3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 00:55:31 +00:00
This commit is contained in:
Jakob Rath 2023-03-13 07:37:17 +01:00
parent 233baf170c
commit 69fbfc3616
2 changed files with 20 additions and 10 deletions

View file

@ -159,6 +159,20 @@ namespace polysat {
return b;
}
expr* polysat_ast::mk_op(op_constraint const& op, bool sign) {
expr* e = nullptr;
switch (op.get_op()) {
case op_constraint::code::inv_op:
e = mk_inv(op.p(), op.r());
break;
default:
return nullptr;
}
if (sign)
e = mk_not(e);
return e;
}
expr* polysat_ast::mk_not(expr* e) {
return d->store(m().mk_not(e));
}
@ -193,15 +207,9 @@ namespace polysat {
return mk_ule(c->to_ule().lhs(), c->to_ule().rhs(), c.sign());
if (c->is_umul_ovfl())
return mk_umul_ovfl(c->to_umul_ovfl().p(), c->to_umul_ovfl().q(), c.sign());
if (c->is_op()) {
op_constraint& op = c->to_op();
switch (op.get_op()) {
case op_constraint::code::inv_op:
return mk_inv(op.p(), op.r());
default:
break;
}
}
if (c->is_op())
if (expr* e = mk_op(c->to_op(), c.sign()))
return e;
verbose_stream() << "polysat_ast not yet supported: " << c << "\n";
m_ok = false;
// NOT_IMPLEMENTED_YET();

View file

@ -13,6 +13,7 @@ Author:
--*/
#pragma once
#include "math/polysat/types.h"
#include "math/polysat/constraint.h"
class expr;
class ast_manager;
@ -21,7 +22,6 @@ class bv_util;
namespace polysat {
struct polysat_ast_d;
class signed_constraint;
class polysat_ast {
solver& s;
@ -67,6 +67,8 @@ namespace polysat {
// p_inv = pseudo-inverse(p)
expr* mk_inv(pdd const& p, pdd const& p_inv);
expr* mk_op(op_constraint const& op, bool sign);
expr* mk_not(expr* e);
expr* mk_lit(sat::literal lit);