mirror of
https://github.com/Z3Prover/z3
synced 2025-08-18 01:02:15 +00:00
63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
/*++
|
|
Copyright (c) 2015 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
char_rewriter.h
|
|
|
|
Abstract:
|
|
|
|
Basic rewriting rules for characters constraints.
|
|
|
|
Author:
|
|
|
|
Nikolaj Bjorner (nbjorner) 2022-03-10
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "ast/char_decl_plugin.h"
|
|
#include "ast/rewriter/rewriter_types.h"
|
|
#include "util/params.h"
|
|
#include "util/lbool.h"
|
|
|
|
|
|
/**
|
|
\brief Cheap rewrite rules for character constraints
|
|
*/
|
|
class char_rewriter {
|
|
ast_manager& m;
|
|
char_decl_plugin* m_char;
|
|
|
|
br_status mk_char_from_bv(expr* e, expr_ref& result);
|
|
|
|
br_status mk_char_to_int(expr* e, expr_ref& result);
|
|
|
|
br_status mk_char_le(expr* a, expr* b, expr_ref& result);
|
|
|
|
br_status mk_char_is_digit(expr* a, expr_ref& result);
|
|
|
|
br_status mk_char_to_bv(expr* a, expr_ref& result);
|
|
|
|
public:
|
|
|
|
char_rewriter(ast_manager& m);
|
|
|
|
family_id get_fid();
|
|
|
|
br_status mk_app_core(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result);
|
|
|
|
expr_ref mk_app(func_decl* f, expr_ref_vector const& args) { return mk_app(f, args.size(), args.data()); }
|
|
|
|
expr_ref mk_app(func_decl* f, unsigned n, expr* const* args) {
|
|
expr_ref result(m);
|
|
if (f->get_family_id() != get_fid() ||
|
|
BR_FAILED == mk_app_core(f, n, args, result))
|
|
result = m.mk_app(f, n, args);
|
|
return result;
|
|
}
|
|
|
|
};
|
|
|