src/Pure/tactic.ML
changeset 60793 bbcd4ab6d26e
parent 60776 2164e7b47454
child 67721 5348bea4accd
equal deleted inserted replaced
60792:722cb21ab680 60793:bbcd4ab6d26e
    19   val eresolve0_tac: thm list -> int -> tactic
    19   val eresolve0_tac: thm list -> int -> tactic
    20   val eresolve_tac: Proof.context -> thm list -> int -> tactic
    20   val eresolve_tac: Proof.context -> thm list -> int -> tactic
    21   val forward_tac: Proof.context -> thm list -> int -> tactic
    21   val forward_tac: Proof.context -> thm list -> int -> tactic
    22   val dresolve0_tac: thm list -> int -> tactic
    22   val dresolve0_tac: thm list -> int -> tactic
    23   val dresolve_tac: Proof.context -> thm list -> int -> tactic
    23   val dresolve_tac: Proof.context -> thm list -> int -> tactic
    24   val atac: int -> tactic
       
    25   val rtac: thm -> int -> tactic
       
    26   val dtac: thm -> int -> tactic
       
    27   val etac: thm -> int -> tactic
       
    28   val ares_tac: Proof.context -> thm list -> int -> tactic
    24   val ares_tac: Proof.context -> thm list -> int -> tactic
    29   val solve_tac: Proof.context -> thm list -> int -> tactic
    25   val solve_tac: Proof.context -> thm list -> int -> tactic
    30   val bimatch_tac: Proof.context -> (bool * thm) list -> int -> tactic
    26   val bimatch_tac: Proof.context -> (bool * thm) list -> int -> tactic
    31   val match_tac: Proof.context -> thm list -> int -> tactic
    27   val match_tac: Proof.context -> thm list -> int -> tactic
    32   val ematch_tac: Proof.context -> thm list -> int -> tactic
    28   val ematch_tac: Proof.context -> thm list -> int -> tactic
    97 (*** The following fail if the goal number is out of range:
    93 (*** The following fail if the goal number is out of range:
    98      thus (REPEAT (resolve_tac rules i)) stops once subgoal i disappears. *)
    94      thus (REPEAT (resolve_tac rules i)) stops once subgoal i disappears. *)
    99 
    95 
   100 (*Solve subgoal i by assumption*)
    96 (*Solve subgoal i by assumption*)
   101 fun assume_tac ctxt i = PRIMSEQ (Thm.assumption (SOME ctxt) i);
    97 fun assume_tac ctxt i = PRIMSEQ (Thm.assumption (SOME ctxt) i);
   102 fun atac i = PRIMSEQ (Thm.assumption NONE i);
       
   103 
    98 
   104 (*Solve subgoal i by assumption, using no unification*)
    99 (*Solve subgoal i by assumption, using no unification*)
   105 fun eq_assume_tac i = PRIMITIVE (Thm.eq_assumption i);
   100 fun eq_assume_tac i = PRIMITIVE (Thm.eq_assumption i);
   106 
   101 
   107 
   102 
   132 fun forward_tac ctxt rls = resolve_tac ctxt (map make_elim rls) THEN' assume_tac ctxt;
   127 fun forward_tac ctxt rls = resolve_tac ctxt (map make_elim rls) THEN' assume_tac ctxt;
   133 
   128 
   134 (*Like forward_tac, but deletes the assumption after use.*)
   129 (*Like forward_tac, but deletes the assumption after use.*)
   135 fun dresolve0_tac rls = eresolve0_tac (map make_elim rls);
   130 fun dresolve0_tac rls = eresolve0_tac (map make_elim rls);
   136 fun dresolve_tac ctxt rls = eresolve_tac ctxt (map make_elim rls);
   131 fun dresolve_tac ctxt rls = eresolve_tac ctxt (map make_elim rls);
   137 
       
   138 (*Shorthand versions: for resolution with a single theorem*)
       
   139 fun rtac rl =  resolve0_tac [rl];
       
   140 fun dtac rl = dresolve0_tac [rl];
       
   141 fun etac rl = eresolve0_tac [rl];
       
   142 
   132 
   143 (*Use an assumption or some rules*)
   133 (*Use an assumption or some rules*)
   144 fun ares_tac ctxt rules = assume_tac ctxt ORELSE' resolve_tac ctxt rules;
   134 fun ares_tac ctxt rules = assume_tac ctxt ORELSE' resolve_tac ctxt rules;
   145 
   135 
   146 fun solve_tac ctxt rules = resolve_tac ctxt rules THEN_ALL_NEW assume_tac ctxt;
   136 fun solve_tac ctxt rules = resolve_tac ctxt rules THEN_ALL_NEW assume_tac ctxt;