mirror of
https://github.com/Z3Prover/z3
synced 2025-04-08 18:31:49 +00:00
84 lines
3.3 KiB
C
84 lines
3.3 KiB
C
/*++
|
|
Copyright (c) 2011 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
tactical.h
|
|
|
|
Abstract:
|
|
|
|
Basic combinators
|
|
|
|
Author:
|
|
|
|
Leonardo (leonardo) 2011-10-13
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
#ifndef _TACTICAL_H_
|
|
#define _TACTICAL_H_
|
|
|
|
#include"tactic.h"
|
|
#include"probe.h"
|
|
|
|
tactic * and_then(unsigned num, tactic * const * ts);
|
|
tactic * and_then(tactic * t1, tactic * t2);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7, tactic * t8);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7, tactic * t8, tactic * t9);
|
|
tactic * and_then(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7, tactic * t8, tactic * t9, tactic * t10);
|
|
|
|
tactic * or_else(unsigned num, tactic * const * ts);
|
|
tactic * or_else(tactic * t1, tactic * t2);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7, tactic * t8);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7, tactic * t8, tactic * t9);
|
|
tactic * or_else(tactic * t1, tactic * t2, tactic * t3, tactic * t4, tactic * t5, tactic * t6, tactic * t7, tactic * t8, tactic * t9, tactic * t10);
|
|
|
|
tactic * repeat(tactic * t, unsigned max = UINT_MAX);
|
|
/**
|
|
\brief Fails if \c t produeces more than \c threshold subgoals.
|
|
Otherwise, it behabes like \c t.
|
|
*/
|
|
tactic * fail_if_branching(tactic * t, unsigned threshold = 1);
|
|
|
|
tactic * par(unsigned num, tactic * const * ts);
|
|
tactic * par(tactic * t1, tactic * t2);
|
|
tactic * par(tactic * t1, tactic * t2, tactic * t3);
|
|
tactic * par(tactic * t1, tactic * t2, tactic * t3, tactic * t4);
|
|
|
|
tactic * par_and_then(unsigned num, tactic * const * ts);
|
|
tactic * par_and_then(tactic * t1, tactic * t2);
|
|
|
|
tactic * try_for(tactic * t, unsigned msecs);
|
|
tactic * clean(tactic * t);
|
|
tactic * using_params(tactic * t, params_ref const & p);
|
|
|
|
// Create a tactic that fails if the result returned by probe p is true.
|
|
tactic * fail_if(probe * p);
|
|
tactic * fail_if_not(probe * p);
|
|
// Execute t1 if p returns true, and t2 otherwise
|
|
tactic * cond(probe * p, tactic * t1, tactic * t2);
|
|
// Alias for cond(p, t, mk_skip_tactic())
|
|
tactic * when(probe * p, tactic * t);
|
|
|
|
// alias for (or-else t skip)
|
|
tactic * skip_if_failed(tactic * t);
|
|
|
|
// Execute the given tactic only if proof production is not enabled.
|
|
// If proof production is enabled it is a skip
|
|
tactic * if_no_proofs(tactic * t);
|
|
tactic * if_no_unsat_cores(tactic * t);
|
|
tactic * if_no_models(tactic * t);
|
|
|
|
#endif
|