3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-11 03:33:35 +00:00
z3/test/template_models.cpp
Leonardo de Moura 68269c43a6 other components
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:48:48 -07:00

102 lines
2.8 KiB
C++

#include "ast_fm.h"
#include "smtparser.h"
#include "ast_pp.h"
static void
simplify_formula(
ast_manager& ast_manager,
smtlib::symtable* table,
smtlib::parser* parser,
ast* formula
)
{
// front_end_params params;
// std::cout << std::make_pair(&ast_manager, formula) << std::endl;
// const_decl_ast *le_decl = 0, *add_decl = 0, *mul_decl = 0;
// const_decl_ast *lt_decl = 0, *gt_decl = 0, *f_decl = 0;
// type_decl_ast* int_decl = 0;
// type_ast* int_type = 0;
// table->find1("<=", le_decl);
// table->find1("+", add_decl);
// table->find1("*", mul_decl);
// table->find1("f", f_decl);
// table->find1("<", lt_decl);
// table->find1(">", gt_decl);
// table->find("Int", int_decl);
// int_type = ast_manager.mk_type(int_decl);
// ast_simplifier simplifier(ast_manager, params);
// #if 0
// iast_arith_simplifier* arith =
// simplifier.add_arithmetic(
// null_theory_id, // TBD
// add_decl,
// mul_decl,
// le_decl,
// false
// );
// arith->register_lt(lt_decl);
// arith->register_gt(gt_decl);
// #endif
// ast_fm fm(ast_manager, simplifier, le_decl, add_decl, mul_decl);
// ast_function_replace replace(ast_manager);
// ast_ref<> templ(ast_manager);
// templ = ast_manager.mk_const(add_decl,
// ast_manager.mk_var(0,int_type),
// ast_manager.mk_numeral(rational(2), int_type));
// ast_ref<> result(ast_manager);
// //
// // Replace f by \lambda x . x + 2 in formula.
// //
// replace(formula, f_decl, 1, templ.get(), result);
// std::cout << "substituted:"
// << std::make_pair(&ast_manager, result.get()) << std::endl;
// //
// // Eliminate quantified variables from the formula.
// //
// fm.eliminate(result.get(), result);
// std::cout << "projected:"
// << std::make_pair(&ast_manager, result.get()) << std::endl;
}
void tst_template_models()
{
const char* spec =
"(benchmark template_models :logic QF_LIA \n"
":extrafuns ((f Int Int) (b Int) (c Int))\n"
":formula (forall (x Int) (and (< (f x) (f (+ x 1))) (> (f b) b) (> (f c) b))))";
ast_manager ast_manager;
smtlib::parser* parser = smtlib::parser::create(ast_manager);
parser->initialize_smtlib();
parser->parse_string(spec);
smtlib::benchmark* b = parser->get_benchmark();
smtlib::symtable* table = b->get_symtable();
vector<smtlib::formula,false> formulas;
b->get_formulas(formulas);
for (unsigned j = 0; j < formulas.size(); ++j) {
simplify_formula(ast_manager, table,
parser, formulas[j].m_formula);
}
dealloc(parser);
}