mirror of
https://github.com/Z3Prover/z3
synced 2025-04-08 18:31:49 +00:00
75 lines
1.5 KiB
C++
75 lines
1.5 KiB
C++
/*++
|
|
Copyright (c) 2006 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
mam.h
|
|
|
|
Abstract:
|
|
|
|
Matching Abstract Machine
|
|
|
|
Author:
|
|
|
|
Leonardo de Moura (leonardo) 2007-02-13.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#ifndef _MAM_H_
|
|
#define _MAM_H_
|
|
|
|
#include"ast.h"
|
|
#include"smt_types.h"
|
|
|
|
namespace smt {
|
|
/**
|
|
\brief Matching Abstract Machine (MAM)
|
|
*/
|
|
class mam {
|
|
protected:
|
|
context & m_context;
|
|
std::ostream * m_trace_stream;
|
|
public:
|
|
mam(context & ctx, std::ostream *trace):
|
|
m_context(ctx),
|
|
m_trace_stream(trace) {
|
|
}
|
|
|
|
virtual ~mam() {
|
|
}
|
|
|
|
virtual void add_pattern(quantifier * q, app * mp) = 0;
|
|
|
|
virtual void push_scope() = 0;
|
|
|
|
virtual void pop_scope(unsigned num_scopes) = 0;
|
|
|
|
virtual void match() = 0;
|
|
|
|
virtual void rematch(bool use_irrelevant = false) = 0;
|
|
|
|
virtual bool has_work() const = 0;
|
|
|
|
virtual void relevant_eh(enode * n, bool lazy) = 0;
|
|
|
|
virtual void add_eq_eh(enode * r1, enode * r2) = 0;
|
|
|
|
virtual void reset() = 0;
|
|
|
|
virtual void display(std::ostream& out) = 0;
|
|
|
|
virtual void on_match(quantifier * q, app * pat, unsigned num_bindings, enode * const * bindings, unsigned max_generation, ptr_vector<enode> & used_enodes) = 0;
|
|
|
|
virtual bool is_shared(enode * n) const = 0;
|
|
|
|
#ifdef Z3DEBUG
|
|
virtual bool check_missing_instances() = 0;
|
|
#endif
|
|
};
|
|
|
|
mam * mk_mam(context & ctx, std::ostream *trace);
|
|
};
|
|
|
|
#endif /* _MAM_H_ */
|