module Z3::API

Extended Modules

Defined in:

z3/api.cr

Constant Summary

Context = begin context = LibZ3.mk_context(LibZ3.mk_config) LibZ3.set_error_handler(context, ->(_context : LibZ3::Context, _code : LibZ3::ErrorCode) do end) context end

Z3's own error handler prints the message to stderr and lets the failed call hand back a null pointer, so the program carries on with a null AST inside an expression. This one does nothing at all, leaving the error code set for checked to raise on - a Crystal exception can't be thrown out of a C callback and back through Z3's own frames.

Instance Method Summary

Instance Method Detail

def add_rec_def(decl, args, body) #

[View source]
def app_args(ast) #

The arguments of an application, so a term like a == 2 can be taken apart. Anything which isn't an application has no arguments.

TODO this becomes much less ad hoc once we have a real printer


[View source]
def ast_to_string(*args) #

[View source]
def const_decl(expr) #

The decl of a variable - a in a + 1 - which is what Z3 wants wherever it talks about one. Anything else is a term rather than a variable, and the two calls which take one (set_initial_value, #model_has_interp) both mean this.


[View source]
def fpa_get_ebits(*args) #

[View source]
def fpa_get_numeral_exponent_bv(*args) #

[View source]
def fpa_get_numeral_exponent_string(*args) #

[View source]
def fpa_get_numeral_sign_bv(*args) #

[View source]
def fpa_get_numeral_significand_bv(*args) #

[View source]
def fpa_get_numeral_significand_string(*args) #

[View source]
def fpa_get_sbits(*args) #

[View source]
def fpa_is_numeral(*args) #

[View source]
def fpa_is_numeral_inf(*args) #

[View source]
def fpa_is_numeral_nan(*args) #

[View source]
def fpa_is_numeral_negative(*args) #

[View source]
def fpa_is_numeral_zero(*args) #

[View source]
def func_entry_dec_ref(*args) #

[View source]
def func_entry_get_arg(*args) #

[View source]
def func_entry_get_num_args(*args) #

[View source]
def func_entry_get_value(*args) #

[View source]
def func_entry_inc_ref(*args) #

[View source]
def func_interp_dec_ref(*args) #

[View source]
def func_interp_get_arity(*args) #

[View source]
def func_interp_get_else(*args) #

[View source]
def func_interp_get_entry(*args) #

[View source]
def func_interp_get_num_entries(*args) #

[View source]
def func_interp_inc_ref(*args) #

[View source]
def get_algebraic_number_lower(*args) #

[View source]
def get_algebraic_number_upper(*args) #

[View source]
def get_app_decl(*args) #

[View source]
def get_arity(*args) #

[View source]
def get_ast_kind(*args) #

[View source]
def get_bool_value(*args) #

[View source]
def get_decl_kind(*args) #

[View source]
def get_decl_name(decl) #

[View source]
def get_domain(*args) #

[View source]
def get_numeral_string(*args) #

[View source]
def get_range(*args) #

[View source]
def get_string(ast) #

[View source]
def is_algebraic_number(*args) #

[View source]
def is_eq_ast(*args) #

[View source]
def is_string(*args) #

[View source]
def mk_abs(*args) #

[View source]
def mk_add(asts) #

[View source]
def mk_and(asts) #

[View source]
def mk_app(decl, args) #

[View source]
def mk_atleast(asts, k : UInt32) #

[View source]
def mk_atmost(asts, k : UInt32) #

[View source]
def mk_bit2bool(*args) #

[View source]
def mk_bv2int(*args) #

[View source]
def mk_bvadd(*args) #

[View source]
def mk_bvadd_no_overflow(*args) #

[View source]
def mk_bvadd_no_underflow(*args) #

[View source]
def mk_bvand(*args) #

[View source]
def mk_bvashr(*args) #

[View source]
def mk_bvlshr(*args) #

[View source]
def mk_bvmul(*args) #

[View source]
def mk_bvmul_no_overflow(*args) #

[View source]
def mk_bvmul_no_underflow(*args) #

[View source]
def mk_bvnand(*args) #

[View source]
def mk_bvneg(*args) #

[View source]
def mk_bvneg_no_overflow(*args) #

[View source]
def mk_bvnor(*args) #

[View source]
def mk_bvnot(*args) #

[View source]
def mk_bvor(*args) #

[View source]
def mk_bvredand(*args) #

[View source]
def mk_bvredor(*args) #

[View source]
def mk_bvsdiv(*args) #

[View source]
def mk_bvsdiv_no_overflow(*args) #

[View source]
def mk_bvsge(*args) #

[View source]
def mk_bvsgt(*args) #

[View source]
def mk_bvshl(*args) #

[View source]
def mk_bvsle(*args) #

[View source]
def mk_bvslt(*args) #

[View source]
def mk_bvsmod(*args) #

[View source]
def mk_bvsrem(*args) #

[View source]
def mk_bvsub(*args) #

[View source]
def mk_bvsub_no_overflow(*args) #

[View source]
def mk_bvsub_no_underflow(*args) #

[View source]
def mk_bvudiv(*args) #

[View source]
def mk_bvuge(*args) #

[View source]
def mk_bvugt(*args) #

[View source]
def mk_bvule(*args) #

[View source]
def mk_bvult(*args) #

[View source]
def mk_bvurem(*args) #

[View source]
def mk_bvxnor(*args) #

[View source]
def mk_bvxor(*args) #

[View source]
def mk_char(*args) #

[View source]
def mk_char_from_bv(*args) #

[View source]
def mk_char_is_digit(*args) #

[View source]
def mk_char_le(*args) #

[View source]
def mk_char_to_bv(*args) #

[View source]
def mk_char_to_int(*args) #

[View source]
def mk_concat(*args) #

[View source]
def mk_const(name, sort) #

[View source]
def mk_distinct(asts) #

[View source]
def mk_div(*args) #

[View source]
def mk_divides(*args) #

[View source]
def mk_eq(*args) #

[View source]
def mk_ext_rotate_left(*args) #

[View source]
def mk_ext_rotate_right(*args) #

[View source]
def mk_extract(*args) #

[View source]
def mk_false(*args) #

[View source]
def mk_fpa_abs(*args) #

[View source]
def mk_fpa_add(*args) #

[View source]
def mk_fpa_div(*args) #

[View source]
def mk_fpa_eq(*args) #

[View source]
def mk_fpa_fma(*args) #

[View source]
def mk_fpa_fp(*args) #

[View source]
def mk_fpa_geq(*args) #

[View source]
def mk_fpa_gt(*args) #

[View source]
def mk_fpa_inf(*args) #

[View source]
def mk_fpa_is_infinite(*args) #

[View source]
def mk_fpa_is_nan(*args) #

[View source]
def mk_fpa_is_negative(*args) #

[View source]
def mk_fpa_is_normal(*args) #

[View source]
def mk_fpa_is_positive(*args) #

[View source]
def mk_fpa_is_subnormal(*args) #

[View source]
def mk_fpa_is_zero(*args) #

[View source]
def mk_fpa_leq(*args) #

[View source]
def mk_fpa_lt(*args) #

[View source]
def mk_fpa_max(*args) #

[View source]
def mk_fpa_min(*args) #

[View source]
def mk_fpa_mul(*args) #

[View source]
def mk_fpa_nan(*args) #

[View source]
def mk_fpa_neg(*args) #

[View source]
def mk_fpa_numeral_double(*args) #

[View source]
def mk_fpa_rem(*args) #

[View source]
def mk_fpa_round_nearest_ties_to_away(*args) #

[View source]
def mk_fpa_round_nearest_ties_to_even(*args) #

[View source]
def mk_fpa_round_to_integral(*args) #

[View source]
def mk_fpa_round_toward_negative(*args) #

[View source]
def mk_fpa_round_toward_positive(*args) #

[View source]
def mk_fpa_round_toward_zero(*args) #

[View source]
def mk_fpa_sort(*args) #

[View source]
def mk_fpa_sqrt(*args) #

[View source]
def mk_fpa_sub(*args) #

[View source]
def mk_fpa_to_fp_bv(*args) #

[View source]
def mk_fpa_to_fp_float(*args) #

[View source]
def mk_fpa_to_fp_int_real(*args) #

[View source]
def mk_fpa_to_fp_real(*args) #

[View source]
def mk_fpa_to_fp_signed(*args) #

[View source]
def mk_fpa_to_fp_unsigned(*args) #

[View source]
def mk_fpa_to_ieee_bv(*args) #

[View source]
def mk_fpa_to_real(*args) #

[View source]
def mk_fpa_to_sbv(*args) #

[View source]
def mk_fpa_to_ubv(*args) #

[View source]
def mk_fpa_zero(*args) #

[View source]
def mk_fresh_const(prefix : String, sort) #

[View source]
def mk_fresh_func_decl(prefix : String, domain : Array(LibZ3::Sort), range : LibZ3::Sort) #

[View source]
def mk_func_decl(name : String, domain : Array(LibZ3::Sort), range : LibZ3::Sort) #

[View source]
def mk_ge(*args) #

[View source]
def mk_gt(*args) #

[View source]
def mk_iff(*args) #

[View source]
def mk_implies(*args) #

[View source]
def mk_int2bv(*args) #

[View source]
def mk_int2real(*args) #

[View source]
def mk_int_to_str(*args) #

[View source]
def mk_is_int(*args) #

[View source]
def mk_ite(*args) #

[View source]
def mk_le(*args) #

[View source]
def mk_lt(*args) #

[View source]
def mk_mod(*args) #

[View source]
def mk_mul(asts) #

[View source]
def mk_ne(a, b) #

Not a real Z3 function


[View source]
def mk_not(*args) #

[View source]
def mk_numeral(num : Int | BigRational | Float, sort) #

[View source]
def mk_optimize(*args) #

[View source]
def mk_or(asts) #

[View source]
def mk_pbeq(asts, coeffs : Array(Int32), k : Int32) #

[View source]
def mk_pbge(asts, coeffs : Array(Int32), k : Int32) #

[View source]
def mk_pble(asts, coeffs : Array(Int32), k : Int32) #

[View source]
def mk_power(*args) #

[View source]
def mk_real2int(*args) #

[View source]
def mk_rec_func_decl(name : String, domain : Array(LibZ3::Sort), range : LibZ3::Sort) #

[View source]
def mk_rem(*args) #

[View source]
def mk_repeat(*args) #

[View source]
def mk_rotate_left(*args) #

[View source]
def mk_rotate_right(*args) #

[View source]
def mk_sbv_to_str(*args) #

[View source]
def mk_seq_at(*args) #

[View source]
def mk_seq_concat(asts) #

[View source]
def mk_seq_contains(*args) #

[View source]
def mk_seq_empty(*args) #

[View source]
def mk_seq_extract(*args) #

[View source]
def mk_seq_index(*args) #

[View source]
def mk_seq_last_index(*args) #

[View source]
def mk_seq_length(*args) #

[View source]
def mk_seq_nth(*args) #

[View source]
def mk_seq_prefix(*args) #

[View source]
def mk_seq_replace(*args) #

[View source]
def mk_seq_replace_all(*args) #

[View source]
def mk_seq_suffix(*args) #

[View source]
def mk_seq_unit(*args) #

[View source]
def mk_sign_ext(*args) #

[View source]
def mk_simple_solver(*args) #

[View source]
def mk_solver(*args) #

[View source]
def mk_solver_for_logic(logic : String) #

[View source]
def mk_str_le(*args) #

[View source]
def mk_str_lt(*args) #

[View source]
def mk_str_to_int(*args) #

[View source]
def mk_string_from_code(*args) #

[View source]
def mk_string_to_code(*args) #

[View source]
def mk_sub(asts) #

[View source]
def mk_symbol(name : String) #

[View source]
def mk_true(*args) #

[View source]
def mk_u32string(code_points : Array(UInt32)) #

A Z3 string is a sequence of code points, and these two are the only calls which pass one either way without escaping it into ASCII first


[View source]
def mk_ubv_to_str(*args) #

[View source]
def mk_unary_minus(*args) #

[View source]
def mk_xor(*args) #

[View source]
def mk_zero_ext(*args) #

[View source]
def model_eval(model, ast, complete) #

[View source]
def model_get_const_decl(*args) #

[View source]
def model_get_const_interp(model, decl) #

[View source]
def model_get_func_decl(*args) #

[View source]
def model_get_func_interp(model, decl) #

What a model says a function does: the argument lists it had to pin down, and the else branch which answers for every other one.


[View source]
def model_get_num_consts(*args) #

[View source]
def model_get_num_funcs(*args) #

[View source]
def model_has_interp(*args) #

[View source]
def model_inc_ref(*args) #

[View source]
def model_to_string(*args) #

[View source]
def new_ast_vector(exprs) #

A vector we build ourselves, for the calls which take one. It comes back at refcount 1 and the caller has to #release_ast_vector it.


[View source]
def new_from_ast_pointer(_ast) : AnyExpr #

[View source]
def optimize_assert(*args) #

[View source]
def optimize_assert_and_track(*args) #

[View source]
def optimize_assert_soft(optimize, expr, weight : String) #

[View source]
def optimize_check(target, assumptions) #

[View source]
def optimize_from_file(*args) #

[View source]
def optimize_from_string(*args) #

[View source]
def optimize_get_assertions(*args) #

[View source]
def optimize_get_help(*args) #

[View source]
def optimize_get_model(*args) #

[View source]
def optimize_get_reason_unknown(*args) #

[View source]
def optimize_get_statistics(*args) #

[View source]
def optimize_get_unsat_core(*args) #

[View source]
def optimize_inc_ref(*args) #

[View source]
def optimize_maximize(*args) #

[View source]
def optimize_minimize(*args) #

[View source]
def optimize_pop(*args) #

[View source]
def optimize_push(*args) #

[View source]
def optimize_set_initial_value(*args) #

[View source]
def optimize_to_string(*args) #

[View source]
def read_ast_vector(vec) #

[View source]
def release_ast_vector(vec) #

[View source]
def simplify(*args) #

[View source]
def solver_assert(*args) #

[View source]
def solver_assert_and_track(*args) #

[View source]
def solver_check(*args) #

[View source]
def solver_check_assumptions(target, assumptions) #

[View source]
def solver_cube(solver, variables, backtrack_level : UInt32) #

[View source]
def solver_from_file(*args) #

[View source]
def solver_from_string(*args) #

[View source]
def solver_get_assertions(*args) #

[View source]
def solver_get_consequences(solver, assumptions, variables) #

Answers the check result along with the consequences it found, since an :unsat or :unknown means there are none to speak of


[View source]
def solver_get_help(*args) #

[View source]
def solver_get_model(*args) #

[View source]
def solver_get_non_units(*args) #

[View source]
def solver_get_num_scopes(*args) #

[View source]
def solver_get_reason_unknown(*args) #

[View source]
def solver_get_statistics(*args) #

[View source]
def solver_get_trail(*args) #

[View source]
def solver_get_units(*args) #

[View source]
def solver_get_unsat_core(*args) #

[View source]
def solver_inc_ref(*args) #

[View source]
def solver_interrupt(*args) #

[View source]
def solver_pop(*args) #

[View source]
def solver_push(*args) #

[View source]
def solver_reset(*args) #

[View source]
def solver_set_initial_value(*args) #

[View source]
def solver_to_dimacs_string(*args) #

[View source]
def solver_to_string(*args) #

[View source]
def sort_from_pointer(_sort) : AnySort #

[View source]