equal
deleted
inserted
replaced
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 |