コード例 #1
0
ファイル: fun_info_tactics.cpp プロジェクト: avigad/lean
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;
}
コード例 #2
0
ファイル: value_factory.cpp プロジェクト: NikolajBjorner/z3
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);
    }
}
コード例 #3
0
ファイル: struct_factory.cpp プロジェクト: Moondee/Artemis
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;
    }
}