func_decl_ref bvarray2uf_rewriter_cfg::mk_uf_for_array(expr * e) { SASSERT(is_bv_array(e)); if (m_array_util.is_as_array(e)) return func_decl_ref(static_cast<func_decl*>(to_app(e)->get_decl()->get_parameter(0).get_ast()), m_manager); else { app * a = to_app(e); func_decl * bv_f = 0; if (!m_arrays_fs.find(e, bv_f)) { sort * domain = get_index_sort(a); sort * range = get_value_sort(a); bv_f = m_manager.mk_fresh_func_decl("f_t", "", 1, &domain, range); if (is_uninterp_const(e)) { if (m_emc) m_emc->insert(to_app(e)->get_decl(), m_array_util.mk_as_array(m_manager.get_sort(e), bv_f)); } else if (m_fmc) m_fmc->insert(bv_f); m_arrays_fs.insert(e, bv_f); m_manager.inc_ref(bv_f); } return func_decl_ref(bv_f, m_manager); } }
sort * bvarray2uf_rewriter_cfg::get_value_sort(expr * e) { return get_value_sort(m_manager.get_sort(e)); }