3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-09 02:41:52 +00:00
z3/lib/expr2var.h
Leonardo de Moura e9eab22e5c Z3 sources
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:35:25 -07:00

76 lines
1.8 KiB
C++

/*++
Copyright (c) 2011 Microsoft Corporation
Module Name:
expr2var.h
Abstract:
The mapping between Z3 expressions and (low level) variables.
Example of low level variables:
- SAT solver
- Polynomial
- etc.
Author:
Leonardo (leonardo) 2011-12-23
Notes:
--*/
#ifndef _EXPR2VAR_H_
#define _EXPR2VAR_H_
#include"ast.h"
#include"obj_hashtable.h"
/**
\brief The mapping between Z3 expressions and (low level) variables.
*/
class expr2var {
public:
typedef unsigned var;
typedef obj_map<expr, var> expr2var_mapping;
typedef expr2var_mapping::iterator iterator;
typedef ptr_vector<expr>::const_iterator recent_iterator;
protected:
ast_manager & m_manager;
expr2var_mapping m_mapping;
ptr_vector<expr> m_recent_exprs;
bool m_interpreted_vars;
public:
expr2var(ast_manager & m);
~expr2var();
ast_manager & m() const { return m_manager; }
void insert(expr * n, var v);
var to_var(expr * n) const;
bool is_var(expr * n) const { return m_mapping.contains(n); }
void display(std::ostream & out) const;
void mk_inv(expr_ref_vector & var2expr) const;
// return true if the mapping contains interpreted vars.
bool interpreted_vars() const { return m_interpreted_vars; }
iterator begin() const { return m_mapping.begin(); }
iterator end() const { return m_mapping.end(); }
void reset_recent() { m_recent_exprs.reset(); }
// Iterators for traversing the recently registered expressions.
// The set of recent registered expressions is reset by using reset_recent().
recent_iterator begin_recent() const { return m_recent_exprs.begin(); }
recent_iterator end_recent() const { return m_recent_exprs.end(); }
void reset();
};
#endif