#pragma once
#include "ast/ast.h"
#include "ast/normal_forms/defined_names.h"
class expr_predicate {
public:
virtual ~expr_predicate() = default;
virtual bool operator()(expr * t) = 0;
};
class name_exprs {
public:
virtual ~name_exprs() = default;
virtual void operator()(expr * n, expr_ref_vector & new_defs, proof_ref_vector & new_def_proofs, expr_ref & r, proof_ref & p ) = 0;
virtual void reset() = 0;
};
name_exprs * mk_expr_namer(ast_manager & m, defined_names & n, expr_predicate & pred);
name_exprs * mk_quantifier_label_namer(ast_manager & m, defined_names & n);
name_exprs * mk_nested_formula_namer(ast_manager & m, defined_names & n);
void del_name_exprs(name_exprs * functor);