Z3
Loading...
Searching...
No Matches
model Class Reference

#include <z3++.h>

Inheritance diagram for model:

Data Structures

struct  translate

Public Member Functions

 model (context &c)
 model (context &c, Z3_model m)
 model (model const &s)
 model (model &src, context &dst, translate)
 ~model () override
 operator Z3_model () const
model & operator= (model const &s)
expr eval (expr const &n, bool model_completion=false) const
unsigned num_consts () const
unsigned num_funcs () const
func_decl get_const_decl (unsigned i) const
func_decl get_func_decl (unsigned i) const
unsigned size () const
func_decl operator[] (int i) const
expr get_const_interp (func_decl c) const
func_interp get_func_interp (func_decl f) const
bool has_interp (func_decl f) const
func_interp add_func_interp (func_decl &f, expr &else_val)
void add_const_interp (func_decl &f, expr &value)
unsigned num_sorts () const
sort get_sort (unsigned i) const
 Return the uninterpreted sort at position i.
expr_vector sort_universe (sort const &s) const
std::string to_string () const
Public Member Functions inherited from object
 object (context &c)
virtual ~object ()=default
context & ctx () const
Z3_error_code check_error () const

Friends

std::ostream & operator<< (std::ostream &out, model const &m)

Additional Inherited Members

Protected Attributes inherited from object
context * m_ctx

Detailed Description

Definition at line 2850 of file z3++.h.

Constructor & Destructor Documentation

◆ model() [1/4]

model ( context & c)
inline

Definition at line 2858 of file z3++.h.

2858:object(c) { init(Z3_mk_model(c)); }
Z3_model Z3_API Z3_mk_model(Z3_context c)
Create a fresh model object. It has reference count 0.

Referenced by goal::convert_model(), goal::get_model(), optimize::get_model(), solver::get_model(), model(), model(), operator<<, and operator=().

◆ model() [2/4]

model ( context & c,
Z3_model m )
inline

Definition at line 2859 of file z3++.h.

2859:object(c) { init(m); }

◆ model() [3/4]

model ( model const & s)
inline

Definition at line 2860 of file z3++.h.

2860:object(s) { init(s.m_model); }

◆ model() [4/4]

model ( model & src,
context & dst,
translate  )
inline

Definition at line 2861 of file z3++.h.

2861: object(dst) { init(Z3_model_translate(src.ctx(), src, dst)); }
Z3_model Z3_API Z3_model_translate(Z3_context c, Z3_model m, Z3_context dst)
translate model from context c to context dst.

◆ ~model()

~model ( )
inlineoverride

Definition at line 2862 of file z3++.h.

2862{ Z3_model_dec_ref(ctx(), m_model); }
void Z3_API Z3_model_dec_ref(Z3_context c, Z3_model m)
Decrement the reference counter of the given model.

Member Function Documentation

◆ add_const_interp()

void add_const_interp ( func_decl & f,
expr & value )
inline

Definition at line 2921 of file z3++.h.

2921 {
2922 Z3_add_const_interp(ctx(), m_model, f, value);
2923 check_error();
2924 }
void Z3_API Z3_add_const_interp(Z3_context c, Z3_model m, Z3_func_decl f, Z3_ast a)
Add a constant interpretation.

◆ add_func_interp()

func_interp add_func_interp ( func_decl & f,
expr & else_val )
inline

Definition at line 2915 of file z3++.h.

2915 {
2916 Z3_func_interp r = Z3_add_func_interp(ctx(), m_model, f, else_val);
2917 check_error();
2918 return func_interp(ctx(), r);
2919 }
Z3_func_interp Z3_API Z3_add_func_interp(Z3_context c, Z3_model m, Z3_func_decl f, Z3_ast default_value)
Create a fresh func_interp object, add it to a model for a specified function. It has reference count...

◆ eval()

expr eval ( expr const & n,
bool model_completion = false ) const
inline

Definition at line 2872 of file z3++.h.

2872 {
2873 check_context(*this, n);
2874 Z3_ast r = 0;
2875 bool status = Z3_model_eval(ctx(), m_model, n, model_completion, &r);
2876 check_error();
2877 if (status == false && ctx().enable_exceptions())
2878 Z3_THROW(exception("failed to evaluate expression"));
2879 return expr(ctx(), r);
2880 }
bool Z3_API Z3_model_eval(Z3_context c, Z3_model m, Z3_ast t, bool model_completion, Z3_ast *v)
Evaluate the AST node t in the given model. Return true if succeeded, and store the result in v.
void check_context(object const &a, object const &b)
Definition z3++.h:566
#define Z3_THROW(x)
Definition z3++.h:134

◆ get_const_decl()

func_decl get_const_decl ( unsigned i) const
inline

Definition at line 2884 of file z3++.h.

2884{ Z3_func_decl r = Z3_model_get_const_decl(ctx(), m_model, i); check_error(); return func_decl(ctx(), r); }
Z3_func_decl Z3_API Z3_model_get_const_decl(Z3_context c, Z3_model m, unsigned i)
Return the i-th constant in the given model.

Referenced by operator[]().

◆ get_const_interp()

expr get_const_interp ( func_decl c) const
inline

Definition at line 2895 of file z3++.h.

2895 {
2896 check_context(*this, c);
2897 Z3_ast r = Z3_model_get_const_interp(ctx(), m_model, c);
2898 check_error();
2899 return expr(ctx(), r);
2900 }
Z3_ast Z3_API Z3_model_get_const_interp(Z3_context c, Z3_model m, Z3_func_decl a)
Return the interpretation (i.e., assignment) of constant a in the model m. Return NULL,...

◆ get_func_decl()

func_decl get_func_decl ( unsigned i) const
inline

Definition at line 2885 of file z3++.h.

2885{ Z3_func_decl r = Z3_model_get_func_decl(ctx(), m_model, i); check_error(); return func_decl(ctx(), r); }
Z3_func_decl Z3_API Z3_model_get_func_decl(Z3_context c, Z3_model m, unsigned i)
Return the declaration of the i-th function in the given model.

Referenced by operator[]().

◆ get_func_interp()

func_interp get_func_interp ( func_decl f) const
inline

Definition at line 2901 of file z3++.h.

2901 {
2902 check_context(*this, f);
2903 Z3_func_interp r = Z3_model_get_func_interp(ctx(), m_model, f);
2904 check_error();
2905 return func_interp(ctx(), r);
2906 }
Z3_func_interp Z3_API Z3_model_get_func_interp(Z3_context c, Z3_model m, Z3_func_decl f)
Return the interpretation of the function f in the model m. Return NULL, if the model does not assign...

◆ get_sort()

sort get_sort ( unsigned i) const
inline

Return the uninterpreted sort at position i.

Precondition
i < num_sorts()

Definition at line 2936 of file z3++.h.

2936 {
2937 Z3_sort s = Z3_model_get_sort(ctx(), m_model, i);
2938 check_error();
2939 return sort(ctx(), s);
2940 }
Z3_sort Z3_API Z3_model_get_sort(Z3_context c, Z3_model m, unsigned i)
Return a uninterpreted sort that m assigns an interpretation.

◆ has_interp()

bool has_interp ( func_decl f) const
inline

Definition at line 2910 of file z3++.h.

2910 {
2911 check_context(*this, f);
2912 return Z3_model_has_interp(ctx(), m_model, f);
2913 }
bool Z3_API Z3_model_has_interp(Z3_context c, Z3_model m, Z3_func_decl a)
Test if there exists an interpretation (i.e., assignment) for a in the model m.

◆ num_consts()

unsigned num_consts ( ) const
inline

Definition at line 2882 of file z3++.h.

2882{ return Z3_model_get_num_consts(ctx(), m_model); }
unsigned Z3_API Z3_model_get_num_consts(Z3_context c, Z3_model m)
Return the number of constants assigned by the given model.

Referenced by operator[](), and size().

◆ num_funcs()

unsigned num_funcs ( ) const
inline

Definition at line 2883 of file z3++.h.

2883{ return Z3_model_get_num_funcs(ctx(), m_model); }
unsigned Z3_API Z3_model_get_num_funcs(Z3_context c, Z3_model m)
Return the number of function interpretations in the given model.

Referenced by size().

◆ num_sorts()

unsigned num_sorts ( ) const
inline

Definition at line 2926 of file z3++.h.

2926 {
2927 unsigned r = Z3_model_get_num_sorts(ctx(), m_model);
2928 check_error();
2929 return r;
2930 }
unsigned Z3_API Z3_model_get_num_sorts(Z3_context c, Z3_model m)
Return the number of uninterpreted sorts that m assigns an interpretation to.

◆ operator Z3_model()

operator Z3_model ( ) const
inline

Definition at line 2863 of file z3++.h.

2863{ return m_model; }

◆ operator=()

model & operator= ( model const & s)
inline

Definition at line 2864 of file z3++.h.

2864 {
2865 Z3_model_inc_ref(s.ctx(), s.m_model);
2866 Z3_model_dec_ref(ctx(), m_model);
2867 object::operator=(s);
2868 m_model = s.m_model;
2869 return *this;
2870 }
void Z3_API Z3_model_inc_ref(Z3_context c, Z3_model m)
Increment the reference counter of the given model.

◆ operator[]()

func_decl operator[] ( int i) const
inline

Definition at line 2887 of file z3++.h.

2887 {
2888 assert(0 <= i);
2889 return static_cast<unsigned>(i) < num_consts() ? get_const_decl(i) : get_func_decl(i - num_consts());
2890 }

◆ size()

unsigned size ( ) const
inline

Definition at line 2886 of file z3++.h.

2886{ return num_consts() + num_funcs(); }

◆ sort_universe()

expr_vector sort_universe ( sort const & s) const
inline

Definition at line 2942 of file z3++.h.

2942 {
2943 check_context(*this, s);
2944 Z3_ast_vector r = Z3_model_get_sort_universe(ctx(), m_model, s);
2945 check_error();
2946 return expr_vector(ctx(), r);
2947 }
Z3_ast_vector Z3_API Z3_model_get_sort_universe(Z3_context c, Z3_model m, Z3_sort s)
Return the finite set of distinct values that represent the interpretation for sort s.
ast_vector_tpl< expr > expr_vector
Definition z3++.h:77

◆ to_string()

std::string to_string ( ) const
inline

Definition at line 2951 of file z3++.h.

2951{ return m_model ? std::string(Z3_model_to_string(ctx(), m_model)) : "null"; }
Z3_string Z3_API Z3_model_to_string(Z3_context c, Z3_model m)
Convert the given model into a string.

Referenced by operator<<.

◆ operator<<

std::ostream & operator<< ( std::ostream & out,
model const & m )
friend

Definition at line 3001 of file z3++.h.

3001{ return out << m.to_string(); }

Referenced by operator<<.