UNPKG

dtk-z3-solver-deno-v2

Version:

This directory contains JavaScript code to automatically derive TypeScript bindings for the C API, which are published on npm as [z3-solver](https://www.npmjs.com/package/z3-solver).

1,050 lines 103 kB
"use strict"; // THIS FILE IS AUTOMATICALLY GENERATED BY make-ts-wrapper.ts // DO NOT EDIT IT BY HAND Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; async function init(initModule) { let Mod = await initModule(); // this works for both signed and unsigned, because JS will wrap for you when constructing the Uint32Array function intArrayToByteArr(ints) { return new Uint8Array(new Uint32Array(ints).buffer); } function boolArrayToByteArr(bools) { return bools.map((b) => (b ? 1 : 0)); } function readUintArray(address, count) { return Array.from(new Uint32Array(Mod.HEAPU32.buffer, address, count)); } let outAddress = Mod._malloc(24); let outUintArray = new Uint32Array(Mod.HEAPU32.buffer, outAddress, 4); let getOutUint = (i) => outUintArray[i]; let outIntArray = new Int32Array(Mod.HEAPU32.buffer, outAddress, 4); let getOutInt = (i) => outIntArray[i]; let outUint64Array = new BigUint64Array(Mod.HEAPU32.buffer, outAddress, 2); let getOutUint64 = (i) => outUint64Array[i]; let outInt64Array = new BigInt64Array(Mod.HEAPU32.buffer, outAddress, 2); let getOutInt64 = (i) => outInt64Array[i]; return { em: Mod, Z3: { mk_context: function (c) { let ctx = Mod._Z3_mk_context(c); Mod._set_noop_error_handler(ctx); return ctx; }, mk_context_rc: function (c) { let ctx = Mod._Z3_mk_context_rc(c); Mod._set_noop_error_handler(ctx); return ctx; }, global_param_set: function (param_id, param_value) { return Mod.ccall('Z3_global_param_set', 'void', ['string', 'string'], [param_id, param_value]); }, global_param_reset_all: Mod._Z3_global_param_reset_all, global_param_get: function (param_id) { let ret = Mod.ccall('Z3_global_param_get', 'boolean', ['string', 'number'], [param_id, outAddress]); if (!ret) { return null; } return Mod.UTF8ToString(getOutUint(0)); }, mk_config: Mod._Z3_mk_config, del_config: Mod._Z3_del_config, set_param_value: function (c, param_id, param_value) { return Mod.ccall('Z3_set_param_value', 'void', ['number', 'string', 'string'], [c, param_id, param_value]); }, del_context: Mod._Z3_del_context, inc_ref: Mod._Z3_inc_ref, dec_ref: Mod._Z3_dec_ref, update_param_value: function (c, param_id, param_value) { return Mod.ccall('Z3_update_param_value', 'void', ['number', 'string', 'string'], [c, param_id, param_value]); }, get_global_param_descrs: Mod._Z3_get_global_param_descrs, interrupt: Mod._Z3_interrupt, enable_concurrent_dec_ref: Mod._Z3_enable_concurrent_dec_ref, mk_params: Mod._Z3_mk_params, params_inc_ref: Mod._Z3_params_inc_ref, params_dec_ref: Mod._Z3_params_dec_ref, params_set_bool: Mod._Z3_params_set_bool, params_set_uint: Mod._Z3_params_set_uint, params_set_double: Mod._Z3_params_set_double, params_set_symbol: Mod._Z3_params_set_symbol, params_to_string: function (c, p) { return Mod.ccall('Z3_params_to_string', 'string', ['number', 'number'], [c, p]); }, params_validate: Mod._Z3_params_validate, param_descrs_inc_ref: Mod._Z3_param_descrs_inc_ref, param_descrs_dec_ref: Mod._Z3_param_descrs_dec_ref, param_descrs_get_kind: Mod._Z3_param_descrs_get_kind, param_descrs_size: function (c, p) { let ret = Mod.ccall('Z3_param_descrs_size', 'number', ['number', 'number'], [c, p]); ret = new Uint32Array([ret])[0]; return ret; }, param_descrs_get_name: Mod._Z3_param_descrs_get_name, param_descrs_get_documentation: function (c, p, s) { return Mod.ccall('Z3_param_descrs_get_documentation', 'string', ['number', 'number', 'number'], [c, p, s]); }, param_descrs_to_string: function (c, p) { return Mod.ccall('Z3_param_descrs_to_string', 'string', ['number', 'number'], [c, p]); }, mk_int_symbol: Mod._Z3_mk_int_symbol, mk_string_symbol: function (c, s) { return Mod.ccall('Z3_mk_string_symbol', 'number', ['number', 'string'], [c, s]); }, mk_uninterpreted_sort: Mod._Z3_mk_uninterpreted_sort, mk_type_variable: Mod._Z3_mk_type_variable, mk_bool_sort: Mod._Z3_mk_bool_sort, mk_int_sort: Mod._Z3_mk_int_sort, mk_real_sort: Mod._Z3_mk_real_sort, mk_bv_sort: Mod._Z3_mk_bv_sort, mk_finite_domain_sort: Mod._Z3_mk_finite_domain_sort, mk_array_sort: Mod._Z3_mk_array_sort, mk_array_sort_n: function (c, domain, range) { return Mod.ccall('Z3_mk_array_sort_n', 'number', ['number', 'number', 'array', 'number'], [ c, domain.length, intArrayToByteArr(domain), range, ]); }, mk_tuple_sort: function (c, mk_tuple_name, field_names, field_sorts) { if (field_names.length !== field_sorts.length) { throw new TypeError(`field_names and field_sorts must be the same length (got ${field_names.length} and {field_sorts.length})`); } let outArray_proj_decl = Mod._malloc(4 * field_names.length); try { let ret = Mod.ccall('Z3_mk_tuple_sort', 'number', [ 'number', 'number', 'number', 'array', 'array', 'number', 'number', ], [ c, mk_tuple_name, field_names.length, intArrayToByteArr(field_names), intArrayToByteArr(field_sorts), outAddress, outArray_proj_decl, ]); return { rv: ret, mk_tuple_decl: getOutUint(0), proj_decl: readUintArray(outArray_proj_decl, field_names.length), }; } finally { Mod._free(outArray_proj_decl); } }, mk_enumeration_sort: function (c, name, enum_names) { let outArray_enum_consts = Mod._malloc(4 * enum_names.length); try { let outArray_enum_testers = Mod._malloc(4 * enum_names.length); try { let ret = Mod.ccall('Z3_mk_enumeration_sort', 'number', ['number', 'number', 'number', 'array', 'number', 'number'], [ c, name, enum_names.length, intArrayToByteArr(enum_names), outArray_enum_consts, outArray_enum_testers, ]); return { rv: ret, enum_consts: readUintArray(outArray_enum_consts, enum_names.length), enum_testers: readUintArray(outArray_enum_testers, enum_names.length), }; } finally { Mod._free(outArray_enum_testers); } } finally { Mod._free(outArray_enum_consts); } }, mk_list_sort: function (c, name, elem_sort) { let ret = Mod.ccall('Z3_mk_list_sort', 'number', [ 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', ], [ c, name, elem_sort, outAddress, outAddress + 4, outAddress + 8, outAddress + 12, outAddress + 16, outAddress + 20, ]); return { rv: ret, nil_decl: getOutUint(0), is_nil_decl: getOutUint(1), cons_decl: getOutUint(2), is_cons_decl: getOutUint(3), head_decl: getOutUint(4), tail_decl: getOutUint(5), }; }, mk_constructor: function (c, name, recognizer, field_names, sorts, sort_refs) { if (field_names.length !== sorts.length) { throw new TypeError(`field_names and sorts must be the same length (got ${field_names.length} and {sorts.length})`); } if (field_names.length !== sort_refs.length) { throw new TypeError(`field_names and sort_refs must be the same length (got ${field_names.length} and {sort_refs.length})`); } return Mod.ccall('Z3_mk_constructor', 'number', ['number', 'number', 'number', 'number', 'array', 'array', 'array'], [ c, name, recognizer, field_names.length, intArrayToByteArr(field_names), intArrayToByteArr(sorts), intArrayToByteArr(sort_refs), ]); }, constructor_num_fields: function (c, constr) { let ret = Mod.ccall('Z3_constructor_num_fields', 'number', ['number', 'number'], [c, constr]); ret = new Uint32Array([ret])[0]; return ret; }, del_constructor: Mod._Z3_del_constructor, mk_datatype: function (c, name, constructors) { return Mod.ccall('Z3_mk_datatype', 'number', ['number', 'number', 'number', 'array'], [ c, name, constructors.length, intArrayToByteArr(constructors), ]); }, mk_datatype_sort: Mod._Z3_mk_datatype_sort, mk_constructor_list: function (c, constructors) { return Mod.ccall('Z3_mk_constructor_list', 'number', ['number', 'number', 'array'], [ c, constructors.length, intArrayToByteArr(constructors), ]); }, del_constructor_list: Mod._Z3_del_constructor_list, mk_datatypes: function (c, sort_names, constructor_lists) { if (sort_names.length !== constructor_lists.length) { throw new TypeError(`sort_names and constructor_lists must be the same length (got ${sort_names.length} and {constructor_lists.length})`); } let outArray_sorts = Mod._malloc(4 * sort_names.length); try { let ret = Mod.ccall('Z3_mk_datatypes', 'void', ['number', 'number', 'array', 'number', 'array'], [ c, sort_names.length, intArrayToByteArr(sort_names), outArray_sorts, intArrayToByteArr(constructor_lists), ]); return readUintArray(outArray_sorts, sort_names.length); } finally { Mod._free(outArray_sorts); } }, query_constructor: function (c, constr, num_fields) { let outArray_accessors = Mod._malloc(4 * num_fields); try { let ret = Mod.ccall('Z3_query_constructor', 'void', ['number', 'number', 'number', 'number', 'number', 'number'], [ c, constr, num_fields, outAddress, outAddress + 4, outArray_accessors, ]); return { constructor: getOutUint(0), tester: getOutUint(1), accessors: readUintArray(outArray_accessors, num_fields), }; } finally { Mod._free(outArray_accessors); } }, mk_func_decl: function (c, s, domain, range) { return Mod.ccall('Z3_mk_func_decl', 'number', ['number', 'number', 'number', 'array', 'number'], [ c, s, domain.length, intArrayToByteArr(domain), range, ]); }, mk_app: function (c, d, args) { return Mod.ccall('Z3_mk_app', 'number', ['number', 'number', 'number', 'array'], [c, d, args.length, intArrayToByteArr(args)]); }, mk_const: Mod._Z3_mk_const, mk_fresh_func_decl: function (c, prefix, domain, range) { return Mod.ccall('Z3_mk_fresh_func_decl', 'number', ['number', 'string', 'number', 'array', 'number'], [ c, prefix, domain.length, intArrayToByteArr(domain), range, ]); }, mk_fresh_const: function (c, prefix, ty) { return Mod.ccall('Z3_mk_fresh_const', 'number', ['number', 'string', 'number'], [c, prefix, ty]); }, mk_rec_func_decl: function (c, s, domain, range) { return Mod.ccall('Z3_mk_rec_func_decl', 'number', ['number', 'number', 'number', 'array', 'number'], [ c, s, domain.length, intArrayToByteArr(domain), range, ]); }, add_rec_def: function (c, f, args, body) { return Mod.ccall('Z3_add_rec_def', 'void', ['number', 'number', 'number', 'array', 'number'], [ c, f, args.length, intArrayToByteArr(args), body, ]); }, mk_true: Mod._Z3_mk_true, mk_false: Mod._Z3_mk_false, mk_eq: Mod._Z3_mk_eq, mk_distinct: function (c, args) { return Mod.ccall('Z3_mk_distinct', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_not: Mod._Z3_mk_not, mk_ite: Mod._Z3_mk_ite, mk_iff: Mod._Z3_mk_iff, mk_implies: Mod._Z3_mk_implies, mk_xor: Mod._Z3_mk_xor, mk_and: function (c, args) { return Mod.ccall('Z3_mk_and', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_or: function (c, args) { return Mod.ccall('Z3_mk_or', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_add: function (c, args) { return Mod.ccall('Z3_mk_add', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_mul: function (c, args) { return Mod.ccall('Z3_mk_mul', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_sub: function (c, args) { return Mod.ccall('Z3_mk_sub', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_unary_minus: Mod._Z3_mk_unary_minus, mk_div: Mod._Z3_mk_div, mk_mod: Mod._Z3_mk_mod, mk_rem: Mod._Z3_mk_rem, mk_power: Mod._Z3_mk_power, mk_abs: Mod._Z3_mk_abs, mk_lt: Mod._Z3_mk_lt, mk_le: Mod._Z3_mk_le, mk_gt: Mod._Z3_mk_gt, mk_ge: Mod._Z3_mk_ge, mk_divides: Mod._Z3_mk_divides, mk_int2real: Mod._Z3_mk_int2real, mk_real2int: Mod._Z3_mk_real2int, mk_is_int: Mod._Z3_mk_is_int, mk_bvnot: Mod._Z3_mk_bvnot, mk_bvredand: Mod._Z3_mk_bvredand, mk_bvredor: Mod._Z3_mk_bvredor, mk_bvand: Mod._Z3_mk_bvand, mk_bvor: Mod._Z3_mk_bvor, mk_bvxor: Mod._Z3_mk_bvxor, mk_bvnand: Mod._Z3_mk_bvnand, mk_bvnor: Mod._Z3_mk_bvnor, mk_bvxnor: Mod._Z3_mk_bvxnor, mk_bvneg: Mod._Z3_mk_bvneg, mk_bvadd: Mod._Z3_mk_bvadd, mk_bvsub: Mod._Z3_mk_bvsub, mk_bvmul: Mod._Z3_mk_bvmul, mk_bvudiv: Mod._Z3_mk_bvudiv, mk_bvsdiv: Mod._Z3_mk_bvsdiv, mk_bvurem: Mod._Z3_mk_bvurem, mk_bvsrem: Mod._Z3_mk_bvsrem, mk_bvsmod: Mod._Z3_mk_bvsmod, mk_bvult: Mod._Z3_mk_bvult, mk_bvslt: Mod._Z3_mk_bvslt, mk_bvule: Mod._Z3_mk_bvule, mk_bvsle: Mod._Z3_mk_bvsle, mk_bvuge: Mod._Z3_mk_bvuge, mk_bvsge: Mod._Z3_mk_bvsge, mk_bvugt: Mod._Z3_mk_bvugt, mk_bvsgt: Mod._Z3_mk_bvsgt, mk_concat: Mod._Z3_mk_concat, mk_extract: Mod._Z3_mk_extract, mk_sign_ext: Mod._Z3_mk_sign_ext, mk_zero_ext: Mod._Z3_mk_zero_ext, mk_repeat: Mod._Z3_mk_repeat, mk_bit2bool: Mod._Z3_mk_bit2bool, mk_bvshl: Mod._Z3_mk_bvshl, mk_bvlshr: Mod._Z3_mk_bvlshr, mk_bvashr: Mod._Z3_mk_bvashr, mk_rotate_left: Mod._Z3_mk_rotate_left, mk_rotate_right: Mod._Z3_mk_rotate_right, mk_ext_rotate_left: Mod._Z3_mk_ext_rotate_left, mk_ext_rotate_right: Mod._Z3_mk_ext_rotate_right, mk_int2bv: Mod._Z3_mk_int2bv, mk_bv2int: Mod._Z3_mk_bv2int, mk_bvadd_no_overflow: Mod._Z3_mk_bvadd_no_overflow, mk_bvadd_no_underflow: Mod._Z3_mk_bvadd_no_underflow, mk_bvsub_no_overflow: Mod._Z3_mk_bvsub_no_overflow, mk_bvsub_no_underflow: Mod._Z3_mk_bvsub_no_underflow, mk_bvsdiv_no_overflow: Mod._Z3_mk_bvsdiv_no_overflow, mk_bvneg_no_overflow: Mod._Z3_mk_bvneg_no_overflow, mk_bvmul_no_overflow: Mod._Z3_mk_bvmul_no_overflow, mk_bvmul_no_underflow: Mod._Z3_mk_bvmul_no_underflow, mk_select: Mod._Z3_mk_select, mk_select_n: function (c, a, idxs) { return Mod.ccall('Z3_mk_select_n', 'number', ['number', 'number', 'number', 'array'], [c, a, idxs.length, intArrayToByteArr(idxs)]); }, mk_store: Mod._Z3_mk_store, mk_store_n: function (c, a, idxs, v) { return Mod.ccall('Z3_mk_store_n', 'number', ['number', 'number', 'number', 'array', 'number'], [ c, a, idxs.length, intArrayToByteArr(idxs), v, ]); }, mk_const_array: Mod._Z3_mk_const_array, mk_map: function (c, f, args) { return Mod.ccall('Z3_mk_map', 'number', ['number', 'number', 'number', 'array'], [c, f, args.length, intArrayToByteArr(args)]); }, mk_array_default: Mod._Z3_mk_array_default, mk_as_array: Mod._Z3_mk_as_array, mk_set_has_size: Mod._Z3_mk_set_has_size, mk_set_sort: Mod._Z3_mk_set_sort, mk_empty_set: Mod._Z3_mk_empty_set, mk_full_set: Mod._Z3_mk_full_set, mk_set_add: Mod._Z3_mk_set_add, mk_set_del: Mod._Z3_mk_set_del, mk_set_union: function (c, args) { return Mod.ccall('Z3_mk_set_union', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_set_intersect: function (c, args) { return Mod.ccall('Z3_mk_set_intersect', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_set_difference: Mod._Z3_mk_set_difference, mk_set_complement: Mod._Z3_mk_set_complement, mk_set_member: Mod._Z3_mk_set_member, mk_set_subset: Mod._Z3_mk_set_subset, mk_array_ext: Mod._Z3_mk_array_ext, mk_numeral: function (c, numeral, ty) { return Mod.ccall('Z3_mk_numeral', 'number', ['number', 'string', 'number'], [c, numeral, ty]); }, mk_real: Mod._Z3_mk_real, mk_real_int64: Mod._Z3_mk_real_int64, mk_int: Mod._Z3_mk_int, mk_unsigned_int: Mod._Z3_mk_unsigned_int, mk_int64: Mod._Z3_mk_int64, mk_unsigned_int64: Mod._Z3_mk_unsigned_int64, mk_bv_numeral: function (c, bits) { return Mod.ccall('Z3_mk_bv_numeral', 'number', ['number', 'number', 'array'], [c, bits.length, boolArrayToByteArr(bits)]); }, mk_seq_sort: Mod._Z3_mk_seq_sort, is_seq_sort: function (c, s) { return Mod.ccall('Z3_is_seq_sort', 'boolean', ['number', 'number'], [c, s]); }, get_seq_sort_basis: Mod._Z3_get_seq_sort_basis, mk_re_sort: Mod._Z3_mk_re_sort, is_re_sort: function (c, s) { return Mod.ccall('Z3_is_re_sort', 'boolean', ['number', 'number'], [c, s]); }, get_re_sort_basis: Mod._Z3_get_re_sort_basis, mk_string_sort: Mod._Z3_mk_string_sort, mk_char_sort: Mod._Z3_mk_char_sort, is_string_sort: function (c, s) { return Mod.ccall('Z3_is_string_sort', 'boolean', ['number', 'number'], [c, s]); }, is_char_sort: function (c, s) { return Mod.ccall('Z3_is_char_sort', 'boolean', ['number', 'number'], [c, s]); }, mk_string: function (c, s) { return Mod.ccall('Z3_mk_string', 'number', ['number', 'string'], [c, s]); }, mk_lstring: function (c, len, s) { return Mod.ccall('Z3_mk_lstring', 'number', ['number', 'number', 'string'], [c, len, s]); }, mk_u32string: function (c, chars) { return Mod.ccall('Z3_mk_u32string', 'number', ['number', 'number', 'array'], [c, chars.length, intArrayToByteArr(chars)]); }, is_string: function (c, s) { return Mod.ccall('Z3_is_string', 'boolean', ['number', 'number'], [c, s]); }, get_string: function (c, s) { return Mod.ccall('Z3_get_string', 'string', ['number', 'number'], [c, s]); }, get_string_length: function (c, s) { let ret = Mod.ccall('Z3_get_string_length', 'number', ['number', 'number'], [c, s]); ret = new Uint32Array([ret])[0]; return ret; }, get_string_contents: function (c, s, length) { let outArray_contents = Mod._malloc(4 * length); try { let ret = Mod.ccall('Z3_get_string_contents', 'void', ['number', 'number', 'number', 'number'], [c, s, length, outArray_contents]); return readUintArray(outArray_contents, length); } finally { Mod._free(outArray_contents); } }, mk_seq_empty: Mod._Z3_mk_seq_empty, mk_seq_unit: Mod._Z3_mk_seq_unit, mk_seq_concat: function (c, args) { return Mod.ccall('Z3_mk_seq_concat', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_seq_prefix: Mod._Z3_mk_seq_prefix, mk_seq_suffix: Mod._Z3_mk_seq_suffix, mk_seq_contains: Mod._Z3_mk_seq_contains, mk_str_lt: Mod._Z3_mk_str_lt, mk_str_le: Mod._Z3_mk_str_le, mk_seq_extract: Mod._Z3_mk_seq_extract, mk_seq_replace: Mod._Z3_mk_seq_replace, mk_seq_at: Mod._Z3_mk_seq_at, mk_seq_nth: Mod._Z3_mk_seq_nth, mk_seq_length: Mod._Z3_mk_seq_length, mk_seq_index: Mod._Z3_mk_seq_index, mk_seq_last_index: Mod._Z3_mk_seq_last_index, mk_seq_map: Mod._Z3_mk_seq_map, mk_seq_mapi: Mod._Z3_mk_seq_mapi, mk_seq_foldl: Mod._Z3_mk_seq_foldl, mk_seq_foldli: Mod._Z3_mk_seq_foldli, mk_str_to_int: Mod._Z3_mk_str_to_int, mk_int_to_str: Mod._Z3_mk_int_to_str, mk_string_to_code: Mod._Z3_mk_string_to_code, mk_string_from_code: Mod._Z3_mk_string_from_code, mk_ubv_to_str: Mod._Z3_mk_ubv_to_str, mk_sbv_to_str: Mod._Z3_mk_sbv_to_str, mk_seq_to_re: Mod._Z3_mk_seq_to_re, mk_seq_in_re: Mod._Z3_mk_seq_in_re, mk_re_plus: Mod._Z3_mk_re_plus, mk_re_star: Mod._Z3_mk_re_star, mk_re_option: Mod._Z3_mk_re_option, mk_re_union: function (c, args) { return Mod.ccall('Z3_mk_re_union', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_re_concat: function (c, args) { return Mod.ccall('Z3_mk_re_concat', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_re_range: Mod._Z3_mk_re_range, mk_re_allchar: Mod._Z3_mk_re_allchar, mk_re_loop: Mod._Z3_mk_re_loop, mk_re_power: Mod._Z3_mk_re_power, mk_re_intersect: function (c, args) { return Mod.ccall('Z3_mk_re_intersect', 'number', ['number', 'number', 'array'], [c, args.length, intArrayToByteArr(args)]); }, mk_re_complement: Mod._Z3_mk_re_complement, mk_re_diff: Mod._Z3_mk_re_diff, mk_re_empty: Mod._Z3_mk_re_empty, mk_re_full: Mod._Z3_mk_re_full, mk_char: Mod._Z3_mk_char, mk_char_le: Mod._Z3_mk_char_le, mk_char_to_int: Mod._Z3_mk_char_to_int, mk_char_to_bv: Mod._Z3_mk_char_to_bv, mk_char_from_bv: Mod._Z3_mk_char_from_bv, mk_char_is_digit: Mod._Z3_mk_char_is_digit, mk_linear_order: Mod._Z3_mk_linear_order, mk_partial_order: Mod._Z3_mk_partial_order, mk_piecewise_linear_order: Mod._Z3_mk_piecewise_linear_order, mk_tree_order: Mod._Z3_mk_tree_order, mk_transitive_closure: Mod._Z3_mk_transitive_closure, mk_pattern: function (c, terms) { return Mod.ccall('Z3_mk_pattern', 'number', ['number', 'number', 'array'], [c, terms.length, intArrayToByteArr(terms)]); }, mk_bound: Mod._Z3_mk_bound, mk_forall: function (c, weight, patterns, sorts, decl_names, body) { if (sorts.length !== decl_names.length) { throw new TypeError(`sorts and decl_names must be the same length (got ${sorts.length} and {decl_names.length})`); } return Mod.ccall('Z3_mk_forall', 'number', [ 'number', 'number', 'number', 'array', 'number', 'array', 'array', 'number', ], [ c, weight, patterns.length, intArrayToByteArr(patterns), sorts.length, intArrayToByteArr(sorts), intArrayToByteArr(decl_names), body, ]); }, mk_exists: function (c, weight, patterns, sorts, decl_names, body) { if (sorts.length !== decl_names.length) { throw new TypeError(`sorts and decl_names must be the same length (got ${sorts.length} and {decl_names.length})`); } return Mod.ccall('Z3_mk_exists', 'number', [ 'number', 'number', 'number', 'array', 'number', 'array', 'array', 'number', ], [ c, weight, patterns.length, intArrayToByteArr(patterns), sorts.length, intArrayToByteArr(sorts), intArrayToByteArr(decl_names), body, ]); }, mk_quantifier: function (c, is_forall, weight, patterns, sorts, decl_names, body) { if (sorts.length !== decl_names.length) { throw new TypeError(`sorts and decl_names must be the same length (got ${sorts.length} and {decl_names.length})`); } return Mod.ccall('Z3_mk_quantifier', 'number', [ 'number', 'boolean', 'number', 'number', 'array', 'number', 'array', 'array', 'number', ], [ c, is_forall, weight, patterns.length, intArrayToByteArr(patterns), sorts.length, intArrayToByteArr(sorts), intArrayToByteArr(decl_names), body, ]); }, mk_quantifier_ex: function (c, is_forall, weight, quantifier_id, skolem_id, patterns, no_patterns, sorts, decl_names, body) { if (sorts.length !== decl_names.length) { throw new TypeError(`sorts and decl_names must be the same length (got ${sorts.length} and {decl_names.length})`); } return Mod.ccall('Z3_mk_quantifier_ex', 'number', [ 'number', 'boolean', 'number', 'number', 'number', 'number', 'array', 'number', 'array', 'number', 'array', 'array', 'number', ], [ c, is_forall, weight, quantifier_id, skolem_id, patterns.length, intArrayToByteArr(patterns), no_patterns.length, intArrayToByteArr(no_patterns), sorts.length, intArrayToByteArr(sorts), intArrayToByteArr(decl_names), body, ]); }, mk_forall_const: function (c, weight, bound, patterns, body) { return Mod.ccall('Z3_mk_forall_const', 'number', ['number', 'number', 'number', 'array', 'number', 'array', 'number'], [ c, weight, bound.length, intArrayToByteArr(bound), patterns.length, intArrayToByteArr(patterns), body, ]); }, mk_exists_const: function (c, weight, bound, patterns, body) { return Mod.ccall('Z3_mk_exists_const', 'number', ['number', 'number', 'number', 'array', 'number', 'array', 'number'], [ c, weight, bound.length, intArrayToByteArr(bound), patterns.length, intArrayToByteArr(patterns), body, ]); }, mk_quantifier_const: function (c, is_forall, weight, bound, patterns, body) { return Mod.ccall('Z3_mk_quantifier_const', 'number', [ 'number', 'boolean', 'number', 'number', 'array', 'number', 'array', 'number', ], [ c, is_forall, weight, bound.length, intArrayToByteArr(bound), patterns.length, intArrayToByteArr(patterns), body, ]); }, mk_quantifier_const_ex: function (c, is_forall, weight, quantifier_id, skolem_id, bound, patterns, no_patterns, body) { return Mod.ccall('Z3_mk_quantifier_const_ex', 'number', [ 'number', 'boolean', 'number', 'number', 'number', 'number', 'array', 'number', 'array', 'number', 'array', 'number', ], [ c, is_forall, weight, quantifier_id, skolem_id, bound.length, intArrayToByteArr(bound), patterns.length, intArrayToByteArr(patterns), no_patterns.length, intArrayToByteArr(no_patterns), body, ]); }, mk_lambda: function (c, sorts, decl_names, body) { if (sorts.length !== decl_names.length) { throw new TypeError(`sorts and decl_names must be the same length (got ${sorts.length} and {decl_names.length})`); } return Mod.ccall('Z3_mk_lambda', 'number', ['number', 'number', 'array', 'array', 'number'], [ c, sorts.length, intArrayToByteArr(sorts), intArrayToByteArr(decl_names), body, ]); }, mk_lambda_const: function (c, bound, body) { return Mod.ccall('Z3_mk_lambda_const', 'number', ['number', 'number', 'array', 'number'], [ c, bound.length, intArrayToByteArr(bound), body, ]); }, get_symbol_kind: Mod._Z3_get_symbol_kind, get_symbol_int: Mod._Z3_get_symbol_int, get_symbol_string: function (c, s) { return Mod.ccall('Z3_get_symbol_string', 'string', ['number', 'number'], [c, s]); }, get_sort_name: Mod._Z3_get_sort_name, get_sort_id: function (c, s) { let ret = Mod.ccall('Z3_get_sort_id', 'number', ['number', 'number'], [c, s]); ret = new Uint32Array([ret])[0]; return ret; }, sort_to_ast: Mod._Z3_sort_to_ast, is_eq_sort: function (c, s1, s2) { return Mod.ccall('Z3_is_eq_sort', 'boolean', ['number', 'number', 'number'], [c, s1, s2]); }, get_sort_kind: Mod._Z3_get_sort_kind, get_bv_sort_size: function (c, t) { let ret = Mod.ccall('Z3_get_bv_sort_size', 'number', ['number', 'number'], [c, t]); ret = new Uint32Array([ret])[0]; return ret; }, get_finite_domain_sort_size: function (c, s) { let ret = Mod.ccall('Z3_get_finite_domain_sort_size', 'boolean', ['number', 'number', 'number'], [c, s, outAddress]); if (!ret) { return null; } return getOutUint64(0); }, get_array_arity: function (c, s) { let ret = Mod.ccall('Z3_get_array_arity', 'number', ['number', 'number'], [c, s]); ret = new Uint32Array([ret])[0]; return ret; }, get_array_sort_domain: Mod._Z3_get_array_sort_domain, get_array_sort_domain_n: Mod._Z3_get_array_sort_domain_n, get_array_sort_range: Mod._Z3_get_array_sort_range, get_tuple_sort_mk_decl: Mod._Z3_get_tuple_sort_mk_decl, get_tuple_sort_num_fields: function (c, t) { let ret = Mod.ccall('Z3_get_tuple_sort_num_fields', 'number', ['number', 'number'], [c, t]); ret = new Uint32Array([ret])[0]; return ret; }, get_tuple_sort_field_decl: Mod._Z3_get_tuple_sort_field_decl, get_datatype_sort_num_constructors: function (c, t) { let ret = Mod.ccall('Z3_get_datatype_sort_num_constructors', 'number', ['number', 'number'], [c, t]); ret = new Uint32Array([ret])[0]; return ret; }, get_datatype_sort_constructor: Mod._Z3_get_datatype_sort_constructor, get_datatype_sort_recognizer: Mod._Z3_get_datatype_sort_recognizer, get_datatype_sort_constructor_accessor: Mod._Z3_get_datatype_sort_constructor_accessor, datatype_update_field: Mod._Z3_datatype_update_field, get_relation_arity: function (c, s) { let ret = Mod.ccall('Z3_get_relation_arity', 'number', ['number', 'number'], [c, s]); ret = new Uint32Array([ret])[0]; return ret; }, get_relation_column: Mod._Z3_get_relation_column, mk_atmost: function (c, args, k) { return Mod.ccall('Z3_mk_atmost', 'number', ['number', 'number', 'array', 'number'], [c, args.length, intArrayToByteArr(args), k]); }, mk_atleast: function (c, args, k) { return Mod.ccall('Z3_mk_atleast', 'number', ['number', 'number', 'array', 'number'], [c, args.length, intArrayToByteArr(args), k]); }, mk_pble: function (c, args, coeffs, k) { if (args.length !== coeffs.length) { throw new TypeError(`args and coeffs must be the same length (got ${args.length} and {coeffs.length})`); } return Mod.ccall('Z3_mk_pble', 'number', ['number', 'number', 'array', 'array', 'number'], [ c, args.length, intArrayToByteArr(args), intArrayToByteArr(coeffs), k, ]); }, mk_pbge: function (c, args, coeffs, k) { if (args.length !== coeffs.length) { throw new TypeError(`args and coeffs must be the same length (got ${args.length} and {coeffs.length})`); } return Mod.ccall('Z3_mk_pbge', 'number', ['number', 'number', 'array', 'array', 'number'], [ c, args.length, intArrayToByteArr(args), intArrayToByteArr(coeffs), k, ]); }, mk_pbeq: function (c, args, coeffs, k) { if (args.length !== coeffs.length) { throw new TypeError(`args and coeffs must be the same length (got ${args.length} and {coeffs.length})`); } return Mod.ccall('Z3_mk_pbeq', 'number', ['number', 'number', 'array', 'array', 'number'], [ c, args.length, intArrayToByteArr(args), intArrayToByteArr(coeffs), k, ]); }, func_decl_to_ast: Mod._Z3_func_decl_to_ast, is_eq_func_decl: function (c, f1, f2) { return Mod.ccall('Z3_is_eq_func_decl', 'boolean', ['number', 'number', 'number'], [c, f1, f2]); }, get_func_decl_id: function (c, f) { let ret = Mod.ccall('Z3_get_func_decl_id', 'number', ['number', 'number'], [c, f]); ret = new Uint32Array([ret])[0]; return ret; }, get_decl_name: Mod._Z3_get_decl_name, get_decl_kind: Mod._Z3_get_decl_kind, get_domain_size: function (c, d) { let ret = Mod.ccall('Z3_get_domain_size', 'number', ['number', 'number'], [c, d]); ret = new Uint32Array([ret])[0]; return ret; }, get_arity: function (c, d) { let ret = Mod.ccall('Z3_get_arity', 'number', ['number', 'number'], [c, d]); ret = new Uint32Array([ret])[0]; return ret; }, get_domain: Mod._Z3_get_domain, get_range: Mod._Z3_get_range, get_decl_num_parameters: function (c, d) { let ret = Mod.ccall('Z3_get_decl_num_parameters', 'number', ['number', 'number'], [c, d]); ret = new Uint32Array([ret])[0]; return ret; }, get_decl_parameter_kind: Mod._Z3_get_decl_parameter_kind, get_decl_int_parameter: Mod._Z3_get_decl_int_parameter, get_decl_double_parameter: Mod._Z3_get_decl_double_parameter, get_decl_symbol_parameter: Mod._Z3_get_decl_symbol_parameter, get_decl_sort_parameter: Mod._Z3_get_decl_sort_parameter, get_decl_ast_parameter: Mod._Z3_get_decl_ast_parameter, get_decl_func_decl_parameter: Mod._Z3_get_decl_func_decl_parameter, get_decl_rational_parameter: function (c, d, idx) { return Mod.ccall('Z3_get_decl_rational_parameter', 'string', ['number', 'number', 'number'], [c, d, idx]); }, app_to_ast: Mod._Z3_app_to_ast, get_app_decl: Mod._Z3_get_app_decl, get_app_num_args: function (c, a) { let ret = Mod.ccall('Z3_get_app_num_args', 'number', ['number', 'number'], [c, a]); ret = new Uint32Array([ret])[0]; return ret; }, get_app_arg: Mod._Z3_get_app_arg, is_eq_ast: function (c, t1, t2) { return Mod.ccall('Z3_is_eq_ast', 'boolean', ['number', 'number', 'number'], [c, t1, t2]); }, get_ast_id: function (c, t) { let ret = Mod.ccall('Z3_get_ast_id', 'number', ['number', 'number'], [c, t]); ret = new Uint32Array([ret])[0]; return ret; }, get_ast_hash: function (c, a) { let ret = Mod.ccall('Z3_get_ast_hash', 'number', ['number', 'number'], [c, a]); ret = new Uint32Array([ret])[0]; return ret; }, get_sort: Mod._Z3_get_sort, is_well_sorted: function (c, t) { return Mod.ccall('Z3_is_well_sorted', 'boolean', ['number', 'number'], [c, t]); }, get_bool_value: Mod._Z3_get_bool_value, get_ast_kind: Mod._Z3_get_ast_kind, is_app: function (c, a) { return Mod.ccall('Z3_is_app', 'boolean', ['number', 'number'], [c, a]); }, is_ground: function (c, a) { return Mod.ccall('Z3_is_ground', 'boolean', ['number', 'number'], [c, a]); }, get_depth: function (c, a) { let ret = Mod.ccall('Z3_get_depth', 'number', ['number', 'number'], [c, a]); ret = new Uint32Array([ret])[0]; return ret; }, is_numeral_ast: function (c, a) { return Mod.ccall('Z3_is_numeral_ast', 'boolean', ['number', 'number'], [c, a]); }, is_algebraic_number: function (c, a) { return Mod.ccall('Z3_is_algebraic_number', 'boolean', ['number', 'number'], [c, a]); }, to_app: Mod._Z3_to_app, to_func_decl: Mod._Z3_to_func_decl, get_numeral_string: function (c, a) { return Mod.ccall('Z3_get_numeral_string', 'string', ['number', 'number'], [c, a]); }, get_numeral_binary_string: function (c, a) { return Mod.ccall('Z3_get_numeral_binary_string', 'string', ['number', 'number'], [c, a]); }, get_numeral_decimal_string: function (c, a, precision) { return Mod.ccall('Z3_get_numeral_decimal_string', 'string', ['number', 'number', 'number'], [c, a, precision]); }, get_numeral_double: Mod._Z3_get_numeral_double, get_numerator: Mod._Z3_get_numerator, get_denominator: Mod._Z3_get_denominator, get_numeral_small: function (c, a) { let ret = Mod.ccall('Z3_get_numeral_small', 'boolean', ['number', 'number', 'number', 'number'], [c, a, outAddress, outAddress + 8]); if (!ret) { return null; } return { num: getOutInt64(0), den: getOutInt64(1) }; }, get_numeral_int: function (c, v) { let ret = Mod.ccall('Z3_get_numeral_int', 'boolean', ['number', 'number', 'number'], [c, v, outAddress]); if (!ret) { return null; } return getOutInt(0); }, get_numeral_uint: function (c, v) { let ret = Mod.ccall('Z3_get_numeral_uint', 'boolean', ['number', 'number', 'number'], [c, v, outAddress]); if (!ret) { return null; } return getOutUint(0); }, get_numeral_uint64: function (c, v) { let ret = Mod.ccall('Z3_get_numeral_uint64', 'boolean', ['number', 'number', 'number'], [c, v, outAddress]); if (!ret) { return null; } return getOutUint64(0); }, get_numeral_int64: function (c, v) { let ret = Mod.ccall('Z3_get_numeral_int64', 'boolean', ['number', 'number', 'number'], [c, v, outAddress]); if (!ret) { return null; } return getOutInt64(0); }, get_numeral_rational_int64: function (c, v) { let ret = Mod.ccall('Z3_get_numeral_rational_int64', 'boolean', ['number', 'number', 'number', 'number'], [c, v, outAddress, outAddress + 8]); if (!ret) { return null; } return { num: getOutInt64(0), den: getOutInt64(1) }; }, get_algebraic_number_lower: Mod._Z3_get_algebraic_number_lower, get_algebraic_number_upper: Mod._Z3_get_algebraic_number_upper, pattern_to_ast: Mod._Z3_pattern_to_ast, get_pattern_num_terms: function (c, p) { let ret = Mod.ccall('Z3_get_pattern_num_terms', 'number', ['number', 'number'], [c, p]); ret = new Uint32Array([ret])[0]; return ret; }, get_pattern: Mod._Z3_get_pattern, get_index_value: function (c, a) { let ret = Mod.ccall('Z3_get_index_value', 'number', ['number', 'number'], [c, a]); ret = new Uint32Array([ret])[0]; return ret; }, is_quantifier_forall: function (c, a) { return Mod.ccall('Z3_is_quantifier_forall', 'boolean', ['number', 'number'], [c, a]); }, is_quantifier_exists: function (c, a) { return Mod.ccall('Z3_is_quantifier_exists', 'boolean', ['number', 'number'], [c, a]); }, is_lambda: function (c, a) { return Mod.ccall('Z3_is_lambda', 'boolean', ['number', 'number'], [c, a]); }, get_quantifier_weight: function (c, a) { let ret = Mod.ccall('Z3_get_quantifier_weight', 'number', ['number', 'number'], [c, a]); ret = new Uint32Array([ret])[0]; return ret; }, get_quantifier_skolem_id: Mod._Z3_get_quantifier_skolem_id, get_quantifier_id: Mod._Z3_get_quantifier_id, get_quantifier_num_patterns: function (c, a) { let ret = Mod.ccall('Z3_get_quantifier_num_patterns', 'number', ['number', 'number'], [c, a]); ret = new Uint32Array([ret])[0]; return ret; }, get_quantifier_pattern_ast: Mod._Z3_get_quantifier_pattern_ast, get_quantifier_n