vm_obj tactic_get_subsingleton_info(vm_obj const & fn, vm_obj const & n, vm_obj const & m, vm_obj const & s) { TRY; type_context ctx = mk_type_context_for(s, m); if (is_none(n)) { return mk_result(get_subsingleton_info(ctx, to_expr(fn)), s); } else { return mk_result(get_subsingleton_info(ctx, to_expr(fn), force_to_unsigned(get_some_value(n), 0)), s); } CATCH; }
void user_sort_factory::freeze_universe(sort * s) { if (!m_finite.contains(s)) { value_set * set = nullptr; m_sort2value_set.find(s, set); if (!m_sort2value_set.find(s, set) || set->m_values.empty()) { // we cannot freeze an empty universe. get_some_value(s); // add one element to the universe... } SASSERT(m_sort2value_set.find(s, set) && set != 0 && !set->m_values.empty()); m_finite.insert(s); } }
bool struct_factory::get_some_values(sort * s, expr_ref & v1, expr_ref & v2) { value_set * set = get_value_set(s); switch (set->size()) { case 0: v1 = get_fresh_value(s); v2 = get_fresh_value(s); return v1 != 0 && v2 != 0; case 1: v1 = get_some_value(s); v2 = get_fresh_value(s); return v2 != 0; default: obj_hashtable<expr>::iterator it = set->begin(); v1 = *it; ++it; v2 = *it; return true; } }