sort * bv_decl_plugin::mk_sort(decl_kind k, unsigned num_parameters, parameter const * parameters) {
    if (!(num_parameters == 1 && parameters[0].is_int())) {
        m_manager->raise_exception("expecting one integer parameter to bit-vector sort");
    }
    unsigned bv_size = parameters[0].get_int();
    mk_bv_sort(bv_size);
    return m_bv_sorts[bv_size];
}
Esempio n. 2
0
inline sort * bv_decl_plugin::get_bv_sort(unsigned bv_size) {
    if (bv_size < (1 << 12)) {
        mk_bv_sort(bv_size);
            return m_bv_sorts[bv_size];
    }
    parameter p(bv_size);
    sort_size sz(sort_size::mk_very_big());
    return m_manager->mk_sort(symbol("bv"), sort_info(m_family_id, BV_SORT, sz, 1, &p));
}
Esempio n. 3
0
void bv_decl_plugin::set_manager(ast_manager * m, family_id id) {
    decl_plugin::set_manager(m, id);

    for (unsigned i = 1; i <= 64; i++) {
        mk_bv_sort(i);
    }
    m_bit0 = m->mk_const_decl(symbol("bit0"), get_bv_sort(1), func_decl_info(m_family_id, OP_BIT0));
    m_bit1 = m->mk_const_decl(symbol("bit1"), get_bv_sort(1), func_decl_info(m_family_id, OP_BIT1));
    m->inc_ref(m_bit0);
    m->inc_ref(m_bit1);

    sort * b = m->mk_bool_sort();
    sort * d[3] = {b, b, b};
    m_carry = m_manager->mk_func_decl(symbol("carry"), 3, d, b, func_decl_info(m_family_id, OP_CARRY));
    m_manager->inc_ref(m_carry);
    m_xor3 = m_manager->mk_func_decl(symbol("xor3"), 3, d, b, func_decl_info(m_family_id, OP_XOR3));
    m_manager->inc_ref(m_xor3);

    m_int_sort = m_manager->mk_sort(m_manager->mk_family_id("arith"), INT_SORT);
    SASSERT(m_int_sort != 0); // arith_decl_plugin must be installed before bv_decl_plugin.
    m_manager->inc_ref(m_int_sort);
}