3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-06 20:56:25 +00:00
z3/src/ast/normal_forms/name_exprs.h
Nikolaj Bjorner 4bc044c982 update header guards to be C++ style. Fixes issue #9
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2015-07-08 23:18:40 -07:00

65 lines
1.8 KiB
C++

/*++
Copyright (c) 2011 Microsoft Corporation
Module Name:
name_exprs.h
Abstract:
Goodies for naming nested expressions.
Author:
Leonardo (leonardo) 2011-10-06
Notes:
--*/
#ifndef NAME_EXPRS_H_
#define NAME_EXPRS_H_
#include"ast.h"
#include"defined_names.h"
class expr_predicate {
public:
virtual bool operator()(expr * t) = 0;
};
class name_exprs {
public:
virtual ~name_exprs() {}
virtual void operator()(expr * n, // [IN] expression that contain the sub-expressions to be named
expr_ref_vector & new_defs, // [OUT] new definitions
proof_ref_vector & new_def_proofs, // [OUT] proofs of the new definitions
expr_ref & r, // [OUT] resultant expression
proof_ref & p // [OUT] proof for (iff n p)
) = 0;
virtual void set_cancel(bool f) = 0;
void cancel() { set_cancel(true); }
void reset_cancel() { set_cancel(false); }
virtual void reset() = 0;
};
/**
\brief Create an expression "namer" that will create replace nested expressions that satisfy pred with new
fresh declarations.
*/
name_exprs * mk_expr_namer(ast_manager & m, defined_names & n, expr_predicate & pred);
/**
\brief Create an expression "namer" that will replace quantifiers and labels with new fresh declarations.
*/
name_exprs * mk_quantifier_label_namer(ast_manager & m, defined_names & n);
/**
\brief Create an expression "namer" that will replace all nested formulas and term if-then-elses with
fresh declarations.
*/
name_exprs * mk_nested_formula_namer(ast_manager & m, defined_names & n);
void del_name_exprs(name_exprs * functor);
#endif