src/Doc/Implementation/Tactic.thy
changeset 58956 a816aa3ff391
parent 58950 d07464875dd4
child 58957 c9e744ea8a38
equal deleted inserted replaced
58955:1694bad18568 58956:a816aa3ff391
   490   beware of clashes!
   490   beware of clashes!
   491 \<close>
   491 \<close>
   492 
   492 
   493 text %mlref \<open>
   493 text %mlref \<open>
   494   \begin{mldecls}
   494   \begin{mldecls}
   495   @{index_ML compose_tac: "(bool * thm * int) -> int -> tactic"} \\
   495   @{index_ML compose_tac: "Proof.context -> (bool * thm * int) -> int -> tactic"} \\
   496   @{index_ML Drule.compose: "thm * int * thm -> thm"} \\
   496   @{index_ML Drule.compose: "thm * int * thm -> thm"} \\
   497   @{index_ML_op COMP: "thm * thm -> thm"} \\
   497   @{index_ML_op COMP: "thm * thm -> thm"} \\
   498   \end{mldecls}
   498   \end{mldecls}
   499 
   499 
   500   \begin{description}
   500   \begin{description}
   501 
   501 
   502   \item @{ML compose_tac}~@{text "(flag, rule, m) i"} refines subgoal
   502   \item @{ML compose_tac}~@{text "ctxt (flag, rule, m) i"} refines subgoal
   503   @{text "i"} using @{text "rule"}, without lifting.  The @{text
   503   @{text "i"} using @{text "rule"}, without lifting.  The @{text
   504   "rule"} is taken to have the form @{text "\<psi>\<^sub>1 \<Longrightarrow> \<dots> \<psi>\<^sub>m \<Longrightarrow> \<psi>"}, where
   504   "rule"} is taken to have the form @{text "\<psi>\<^sub>1 \<Longrightarrow> \<dots> \<psi>\<^sub>m \<Longrightarrow> \<psi>"}, where
   505   @{text "\<psi>"} need not be atomic; thus @{text "m"} determines the
   505   @{text "\<psi>"} need not be atomic; thus @{text "m"} determines the
   506   number of new subgoals.  If @{text "flag"} is @{text "true"} then it
   506   number of new subgoals.  If @{text "flag"} is @{text "true"} then it
   507   performs elim-resolution --- it solves the first premise of @{text
   507   performs elim-resolution --- it solves the first premise of @{text