#pragma once
#include "ast/ast.h"
#include "util/uint_set.h"
#include "util/params.h"
#include "ast/simplifiers/dependent_expr_state.h"
class tactic;
class qe_lite {
class impl;
impl * m_impl;
public:
qe_lite(ast_manager& m, params_ref const & p, bool use_array_der = true);
~qe_lite();
void operator()(app_ref_vector& vars, expr_ref& fml);
void operator()(uint_set const& index_set, bool index_of_bound, expr_ref& fml);
void operator()(uint_set const& index_set, bool index_of_bound, expr_ref_vector& conjs);
void operator()(expr_ref& fml, proof_ref& pr);
void operator()(expr* fml, expr_ref& result, proof_ref& pr) { result = fml; (*this)(result, pr); }
void operator()(expr_ref& fml) { proof_ref pr(fml.m()); (*this)(fml, pr); }
};
tactic * mk_qe_lite_tactic(ast_manager & m, params_ref const & p = params_ref());
dependent_expr_simplifier* mk_qe_lite_simplifier(ast_manager& m, params_ref const& p, dependent_expr_state& st);