3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-24 23:03:41 +00:00

prepare for inverse model conversion for formulas

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-11-17 19:55:23 -08:00
parent dc0b2a8acf
commit b3bd9b89b5
7 changed files with 79 additions and 139 deletions

View file

@ -58,28 +58,33 @@ public:
VERIFY(m_c1 && m_c2);
}
virtual void operator()(model_ref & m) {
void operator()(model_ref & m) override {
this->m_c2->operator()(m);
this->m_c1->operator()(m);
}
virtual void operator()(model_ref & m, unsigned goal_idx) {
void operator()(expr_ref & fml) override {
this->m_c1->operator()(fml);
this->m_c2->operator()(fml);
}
void operator()(model_ref & m, unsigned goal_idx) override {
this->m_c2->operator()(m, goal_idx);
this->m_c1->operator()(m, 0);
}
virtual void operator()(labels_vec & r, unsigned goal_idx) {
void operator()(labels_vec & r, unsigned goal_idx) override {
this->m_c2->operator()(r, goal_idx);
this->m_c1->operator()(r, 0);
}
virtual char const * get_name() const { return "concat-model-converter"; }
char const * get_name() const override { return "concat-model-converter"; }
virtual model_converter * translate(ast_translation & translator) {
model_converter * translate(ast_translation & translator) override {
return this->translate_core<concat_model_converter>(translator);
}
virtual void collect(ast_pp_util& visitor) {
void collect(ast_pp_util& visitor) override {
this->m_c1->collect(visitor);
this->m_c2->collect(visitor);
}
@ -99,12 +104,12 @@ public:
concat_star_converter<model_converter>(mc1, num, mc2s, szs) {
}
virtual void operator()(model_ref & m) {
void operator()(model_ref & m) override {
// TODO: delete method after conversion is complete
UNREACHABLE();
}
virtual void operator()(model_ref & m, unsigned goal_idx) {
void operator()(model_ref & m, unsigned goal_idx) override {
unsigned num = this->m_c2s.size();
for (unsigned i = 0; i < num; i++) {
if (goal_idx < this->m_szs[i]) {
@ -122,7 +127,7 @@ public:
UNREACHABLE();
}
virtual void operator()(labels_vec & r, unsigned goal_idx) {
void operator()(labels_vec & r, unsigned goal_idx) override {
unsigned num = this->m_c2s.size();
for (unsigned i = 0; i < num; i++) {
if (goal_idx < this->m_szs[i]) {
@ -140,9 +145,9 @@ public:
UNREACHABLE();
}
virtual char const * get_name() const { return "concat-star-model-converter"; }
char const * get_name() const override { return "concat-star-model-converter"; }
virtual model_converter * translate(ast_translation & translator) {
model_converter * translate(ast_translation & translator) override {
return this->translate_core<concat_star_model_converter>(translator);
}
};
@ -173,22 +178,28 @@ public:
virtual ~model2mc() {}
virtual void operator()(model_ref & m) {
void operator()(model_ref & m) override {
m = m_model;
}
virtual void operator()(model_ref & m, unsigned goal_idx) {
void operator()(model_ref & m, unsigned goal_idx) override {
m = m_model;
}
virtual void operator()(labels_vec & r, unsigned goal_idx) {
void operator()(labels_vec & r, unsigned goal_idx) {
r.append(m_labels.size(), m_labels.c_ptr());
}
virtual void cancel() {
void operator()(expr_ref& fml) override {
expr_ref r(m_model->get_manager());
m_model->eval(fml, r, false);
fml = r;
}
void cancel() override {
}
virtual void display(std::ostream & out) {
void display(std::ostream & out) override {
out << "(model->model-converter-wrapper\n";
model_v2_pp(out, *m_model);
out << ")\n";
@ -198,6 +209,7 @@ public:
model * m = m_model->translate(translator);
return alloc(model2mc, m);
}
};
model_converter * model2model_converter(model * m) {