|   1066   \begin{description} |   1066   \begin{description} | 
|   1067  |   1067  | 
|   1068   \item @{method safe} repeatedly performs safe steps on all subgoals. |   1068   \item @{method safe} repeatedly performs safe steps on all subgoals. | 
|   1069   It is deterministic, with at most one outcome. |   1069   It is deterministic, with at most one outcome. | 
|   1070  |   1070  | 
|   1071   \item @{method clarify} performs a series of safe steps as follows. |   1071   \item @{method clarify} performs a series of safe steps without | 
|   1072  |   1072   splitting subgoals; see also @{ML clarify_step_tac}. | 
|   1073   No splitting step is applied; for example, the subgoal @{text "A \<and> |         | 
|   1074   B"} is left as a conjunction.  Proof by assumption, Modus Ponens, |         | 
|   1075   etc., may be performed provided they do not instantiate unknowns. |         | 
|   1076   Assumptions of the form @{text "x = t"} may be eliminated.  The safe |         | 
|   1077   wrapper tactical is applied. |         | 
|   1078  |   1073  | 
|   1079   \item @{method clarsimp} acts like @{method clarify}, but also does |   1074   \item @{method clarsimp} acts like @{method clarify}, but also does | 
|   1080   simplification.  Note that if the Simplifier context includes a |   1075   simplification.  Note that if the Simplifier context includes a | 
|   1081   splitter for the premises, the subgoal may still be split. |   1076   splitter for the premises, the subgoal may still be split. | 
|         |   1077  | 
|         |   1078   \end{description} | 
|         |   1079 *} | 
|         |   1080  | 
|         |   1081  | 
|         |   1082 subsection {* Single-step tactics *} | 
|         |   1083  | 
|         |   1084 text {* | 
|         |   1085   \begin{matharray}{rcl} | 
|         |   1086     @{index_ML safe_step_tac: "Proof.context -> int -> tactic"} \\ | 
|         |   1087     @{index_ML inst_step_tac: "Proof.context -> int -> tactic"} \\ | 
|         |   1088     @{index_ML step_tac: "Proof.context -> int -> tactic"} \\ | 
|         |   1089     @{index_ML slow_step_tac: "Proof.context -> int -> tactic"} \\ | 
|         |   1090     @{index_ML clarify_step_tac: "Proof.context -> int -> tactic"} \\ | 
|         |   1091   \end{matharray} | 
|         |   1092  | 
|         |   1093   These are the primitive tactics behind the (semi)automated proof | 
|         |   1094   methods of the Classical Reasoner.  By calling them yourself, you | 
|         |   1095   can execute these procedures one step at a time. | 
|         |   1096  | 
|         |   1097   \begin{description} | 
|         |   1098  | 
|         |   1099   \item @{ML safe_step_tac}~@{text "ctxt i"} performs a safe step on | 
|         |   1100   subgoal @{text i}.  The safe wrapper tacticals are applied to a | 
|         |   1101   tactic that may include proof by assumption or Modus Ponens (taking | 
|         |   1102   care not to instantiate unknowns), or substitution. | 
|         |   1103  | 
|         |   1104   \item @{ML inst_step_tac} is like @{ML safe_step_tac}, but allows | 
|         |   1105   unknowns to be instantiated. | 
|         |   1106  | 
|         |   1107   \item @{ML step_tac}~@{text "ctxt i"} is the basic step of the proof | 
|         |   1108   procedure.  The unsafe wrapper tacticals are applied to a tactic | 
|         |   1109   that tries @{ML safe_tac}, @{ML inst_step_tac}, or applies an unsafe | 
|         |   1110   rule from the context. | 
|         |   1111  | 
|         |   1112   \item @{ML slow_step_tac} resembles @{ML step_tac}, but allows | 
|         |   1113   backtracking between using safe rules with instantiation (@{ML | 
|         |   1114   inst_step_tac}) and using unsafe rules.  The resulting search space | 
|         |   1115   is larger. | 
|         |   1116  | 
|         |   1117   \item @{ML clarify_step_tac}~@{text "ctxt i"} performs a safe step | 
|         |   1118   on subgoal @{text i}.  No splitting step is applied; for example, | 
|         |   1119   the subgoal @{text "A \<and> B"} is left as a conjunction.  Proof by | 
|         |   1120   assumption, Modus Ponens, etc., may be performed provided they do | 
|         |   1121   not instantiate unknowns.  Assumptions of the form @{text "x = t"} | 
|         |   1122   may be eliminated.  The safe wrapper tactical is applied. | 
|   1082  |   1123  | 
|   1083   \end{description} |   1124   \end{description} | 
|   1084 *} |   1125 *} | 
|   1085  |   1126  | 
|   1086  |   1127  |