Beispiel #1
0
bool fpa_simplifier_plugin::reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
    set_reduce_invoked();    

    SASSERT(f->get_family_id() == get_family_id());

    return m_rw.mk_app_core(f, num_args, args, result) == BR_DONE;
}
bool array_simplifier_plugin::reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
    if (!m_params.m_array_simplify)
        return false;
    set_reduce_invoked();
    if (m_presimp)
        return false;
#if _DEBUG
    for (unsigned i = 0; i < num_args && i < f->get_arity(); ++i) {
        SASSERT(m_manager.get_sort(args[i]) == f->get_domain(i));
    }
#endif
    TRACE("array_simplifier", {
            tout << mk_pp(f, m_manager) << " ";
            for (unsigned i = 0; i < num_args; ++i) {
                tout << mk_pp(args[i], m_manager) << " ";
            }
            tout << "\n";
        }
bool basic_simplifier_plugin::reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
    set_reduce_invoked();
    SASSERT(f->get_family_id() == m_manager.get_basic_family_id());
    basic_op_kind k = static_cast<basic_op_kind>(f->get_decl_kind());
    switch (k) {
    case OP_FALSE:
    case OP_TRUE:
        return false;
    case OP_EQ:
        SASSERT(num_args == 2);
        mk_eq(args[0], args[1], result);
        return true;
    case OP_DISTINCT:
        mk_distinct(num_args, args, result);
        return true;
    case OP_ITE:
        SASSERT(num_args == 3);
        mk_ite(args[0], args[1], args[2], result);
        return true;
    case OP_AND:
        mk_and(num_args, args, result);
        return true;
    case OP_OR:
        mk_or(num_args, args, result);
        return true;
    case OP_IMPLIES:
        mk_implies(args[0], args[1], result);
        return true;
    case OP_IFF:
        mk_iff(args[0], args[1], result);
        return true;
    case OP_XOR:
        mk_xor(args[0], args[1], result);
        return true;
    case OP_NOT:
        SASSERT(num_args == 1);
        mk_not(args[0], result);
        return true;
    default:
        UNREACHABLE();
        return false;
    }
}
Beispiel #4
0
bool fpa_simplifier_plugin::reduce_eq(expr * lhs, expr * rhs, expr_ref & result) {
    set_reduce_invoked();

    return m_rw.mk_eq_core(lhs, rhs, result) == BR_DONE;
}