/*++
Copyright (c) 2011 Microsoft Corporation

Module Name:

    smt_arith.h

Abstract:

    Arithmetic solver for smt::solver
    
Author:

    Leonardo de Moura (leonardo) 2011-06-25.

Revision History:

--*/
#ifndef _SMT_ARITH_H_
#define _SMT_ARITH_H_

#include"ast.h"
#include"smt_solver_types.h"
#include"params.h"
#include"statistics.h"
class model;

namespace smt {

    class arith {
        struct imp;
        imp *       m_imp;
        params_ref  m_params;  
    public:
        arith(ast_manager & m, params_ref const & p);
        ~arith();
        void updt_params(params_ref const & p);
        void assert_axiom(expr * t, bool neg);
        void mk_atom(expr * t, atom_id id);
        void asserted(atom_id id, bool is_true);
        bool inconsistent() const;
        void push();
        void pop(unsigned num_scopes);
        void set_cancel(bool f);
        void simplify();
        void display(std::ostream & out) const;
        void reset();
        void preprocess();
        void collect_statistics(statistics & st) const;
        void reset_statistics();
        lbool check();
        void mk_model(model * md);
    };
};

#endif