mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 06:03:23 +00:00
adding dt plugin
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ef20237edd
commit
5fdf300557
3 changed files with 114 additions and 0 deletions
|
@ -13,6 +13,7 @@ z3_add_component(ast_sls
|
||||||
sls_bv_terms.cpp
|
sls_bv_terms.cpp
|
||||||
sls_bv_valuation.cpp
|
sls_bv_valuation.cpp
|
||||||
sls_context.cpp
|
sls_context.cpp
|
||||||
|
sls_datatype_plugin.cpp
|
||||||
sls_euf_plugin.cpp
|
sls_euf_plugin.cpp
|
||||||
sls_smt_solver.cpp
|
sls_smt_solver.cpp
|
||||||
COMPONENT_DEPENDENCIES
|
COMPONENT_DEPENDENCIES
|
||||||
|
|
54
src/ast/sls/sls_datatype_plugin.cpp
Normal file
54
src/ast/sls/sls_datatype_plugin.cpp
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/*++
|
||||||
|
Copyright (c) 2024 Microsoft Corporation
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
sls_datatype_plugin.cpp
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Algebraic Datatypes for SLS
|
||||||
|
|
||||||
|
Author:
|
||||||
|
|
||||||
|
Nikolaj Bjorner (nbjorner) 2024-10-14
|
||||||
|
|
||||||
|
--*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ast/sls/sls_datatype_plugin.h"
|
||||||
|
|
||||||
|
namespace sls {
|
||||||
|
|
||||||
|
datatype_plugin::datatype_plugin(context& c):
|
||||||
|
plugin(c),
|
||||||
|
m_dt(m) {
|
||||||
|
m_fid = m_dt.get_family_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
datatype_plugin::~datatype_plugin() {}
|
||||||
|
|
||||||
|
void datatype_plugin::add_axioms() {
|
||||||
|
for (auto t : ctx.subterms()) {
|
||||||
|
auto s = t->get_sort();
|
||||||
|
if (!m_dt.is_datatype(s))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expr_ref datatype_plugin::get_value(expr* e) { return expr_ref(m); }
|
||||||
|
void datatype_plugin::initialize() {}
|
||||||
|
void datatype_plugin::start_propagation() {}
|
||||||
|
void datatype_plugin::propagate_literal(sat::literal lit) {}
|
||||||
|
bool datatype_plugin::propagate() { return false; }
|
||||||
|
bool datatype_plugin::is_sat() { return true; }
|
||||||
|
void datatype_plugin::register_term(expr* e) {}
|
||||||
|
std::ostream& datatype_plugin::display(std::ostream& out) const {
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
void datatype_plugin::mk_model(model& mdl) {}
|
||||||
|
|
||||||
|
void datatype_plugin::collect_statistics(statistics& st) const {}
|
||||||
|
void datatype_plugin::reset_statistics() {}
|
||||||
|
|
||||||
|
}
|
59
src/ast/sls/sls_datatype_plugin.h
Normal file
59
src/ast/sls/sls_datatype_plugin.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/*++
|
||||||
|
Copyright (c) 2024 Microsoft Corporation
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
sls_datatype_plugin.h
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Algebraic Datatypes for SLS
|
||||||
|
|
||||||
|
Author:
|
||||||
|
|
||||||
|
Nikolaj Bjorner (nbjorner) 2024-10-14
|
||||||
|
|
||||||
|
--*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ast/sls/sls_context.h"
|
||||||
|
#include "ast/datatype_decl_plugin.h"
|
||||||
|
|
||||||
|
namespace sls {
|
||||||
|
|
||||||
|
class datatype_plugin : public plugin {
|
||||||
|
struct stats {
|
||||||
|
unsigned m_num_axioms = 0;
|
||||||
|
void reset() { memset(this, 0, sizeof(*this)); }
|
||||||
|
};
|
||||||
|
obj_map<sort, ptr_vector<expr>> m_dts;
|
||||||
|
|
||||||
|
datatype_util m_dt;
|
||||||
|
stats m_stats;
|
||||||
|
|
||||||
|
void add_axioms();
|
||||||
|
|
||||||
|
public:
|
||||||
|
datatype_plugin(context& c);
|
||||||
|
~datatype_plugin() override;
|
||||||
|
family_id fid() { return m_fid; }
|
||||||
|
expr_ref get_value(expr* e) override;
|
||||||
|
void initialize() override;
|
||||||
|
void start_propagation() override;
|
||||||
|
void propagate_literal(sat::literal lit) override;
|
||||||
|
bool propagate() override;
|
||||||
|
bool is_sat() override;
|
||||||
|
void register_term(expr* e) override;
|
||||||
|
std::ostream& display(std::ostream& out) const override;
|
||||||
|
void mk_model(model& mdl) override;
|
||||||
|
bool set_value(expr* e, expr* v) override { return false; }
|
||||||
|
|
||||||
|
void repair_up(app* e) override {}
|
||||||
|
bool repair_down(app* e) override { return false; }
|
||||||
|
void repair_literal(sat::literal lit) override {}
|
||||||
|
|
||||||
|
void collect_statistics(statistics& st) const override;
|
||||||
|
void reset_statistics() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue