Beispiel #1
0
static tactic * mk_quant_preprocessor(ast_manager & m, bool disable_gaussian = false) {
    params_ref pull_ite_p;
    pull_ite_p.set_bool("pull_cheap_ite", true);
    pull_ite_p.set_bool("local_ctx", true);
    pull_ite_p.set_uint("local_ctx_limit", 10000000);
    
    params_ref ctx_simp_p;
    ctx_simp_p.set_uint("max_depth", 30);
    ctx_simp_p.set_uint("max_steps", 5000000);

    tactic * solve_eqs;
    if (disable_gaussian)
        solve_eqs = mk_skip_tactic();
    else
        solve_eqs = when(mk_not(mk_has_pattern_probe()), mk_solve_eqs_tactic(m));
 
    // remark: investigate if gaussian elimination is useful when patterns are not provided.
    return and_then(mk_simplify_tactic(m), 
                    mk_propagate_values_tactic(m),
                    using_params(mk_ctx_simplify_tactic(m), ctx_simp_p),
                    using_params(mk_simplify_tactic(m), pull_ite_p),
                    solve_eqs,
                    mk_elim_uncnstr_tactic(m),
                    mk_simplify_tactic(m));    
}
tactic * mk_qfnra_nlsat_tactic(ast_manager & m, params_ref const & p) {
    params_ref main_p = p;
    main_p.set_bool("elim_and", true);
    main_p.set_bool("blast_distinct", true);
    params_ref purify_p = p;
    purify_p.set_bool("complete", false); // temporary hack, solver does not support uninterpreted functions for encoding (div0 x) applications. So, we replace it application of this kind with an uninterpreted function symbol.

    tactic * factor;
    if (p.get_bool("factor", true))
        factor = mk_factor_tactic(m, p);
    else
        factor = mk_skip_tactic();

    return and_then(and_then(using_params(mk_simplify_tactic(m, p),
                                          main_p),
                             using_params(mk_purify_arith_tactic(m, p),
                                          purify_p),
                             mk_propagate_values_tactic(m, p),
                             mk_solve_eqs_tactic(m, p),
                             mk_elim_uncnstr_tactic(m, p),
                             mk_elim_term_ite_tactic(m, p)),
                    and_then(/* mk_degree_shift_tactic(m, p), */ // may affect full dimensionality detection
                             factor,
                             mk_solve_eqs_tactic(m, p),
                             using_params(mk_simplify_tactic(m, p),
                                          main_p),
                             mk_tseitin_cnf_core_tactic(m, p),
                             using_params(mk_simplify_tactic(m, p),
                                          main_p),
                             mk_nlsat_tactic(m, p)));
}
Beispiel #3
0
 Z3_tactic Z3_API Z3_tactic_skip(Z3_context c) {
     Z3_TRY;
     LOG_Z3_tactic_skip(c);
     RESET_ERROR_CODE();
     tactic * new_t = mk_skip_tactic();
     RETURN_TACTIC(new_t);
     Z3_CATCH_RETURN(0);
 }