src/Pure/tactic.ML
changeset 13650 31bd2a8cdbe2
parent 13559 51c3ac47d127
child 13925 761af5c2fd59
equal deleted inserted replaced
13649:0f562a70c07d 13650:31bd2a8cdbe2
    27       (bool*thm)list -> (int*(bool*thm)) Net.net * (int*(bool*thm)) Net.net
    27       (bool*thm)list -> (int*(bool*thm)) Net.net * (int*(bool*thm)) Net.net
    28   val compose_inst_tac  : (string*string)list -> (bool*thm*int) ->
    28   val compose_inst_tac  : (string*string)list -> (bool*thm*int) ->
    29                           int -> tactic
    29                           int -> tactic
    30   val compose_tac       : (bool * thm * int) -> int -> tactic
    30   val compose_tac       : (bool * thm * int) -> int -> tactic
    31   val cut_facts_tac     : thm list -> int -> tactic
    31   val cut_facts_tac     : thm list -> int -> tactic
       
    32   val cut_rules_tac     : thm list -> int -> tactic
    32   val cut_inst_tac      : (string*string)list -> thm -> int -> tactic
    33   val cut_inst_tac      : (string*string)list -> thm -> int -> tactic
    33   val datac             : thm -> int -> int -> tactic
    34   val datac             : thm -> int -> int -> tactic
    34   val defer_tac         : int -> tactic
    35   val defer_tac         : int -> tactic
    35   val distinct_subgoals_tac     : tactic
    36   val distinct_subgoals_tac     : tactic
    36   val dmatch_tac        : thm list -> int -> tactic
    37   val dmatch_tac        : thm list -> int -> tactic
   344 (*Recognizes theorems that are not rules, but simple propositions*)
   345 (*Recognizes theorems that are not rules, but simple propositions*)
   345 fun is_fact rl =
   346 fun is_fact rl =
   346     case prems_of rl of
   347     case prems_of rl of
   347         [] => true  |  _::_ => false;
   348         [] => true  |  _::_ => false;
   348 
   349 
   349 (*"Cut" all facts from theorem list into the goal as assumptions. *)
   350 (*"Cut" a list of rules into the goal.  Their premises will become new
   350 fun cut_facts_tac ths i =
   351   subgoals.*)
   351     EVERY (map (fn th => metacut_tac th i) (filter is_fact ths));
   352 fun cut_rules_tac ths i = EVERY (map (fn th => metacut_tac th i) ths);
       
   353 
       
   354 (*As above, but inserts only facts (unconditional theorems);
       
   355   generates no additional subgoals. *)
       
   356 fun cut_facts_tac ths = cut_rules_tac  (filter is_fact ths);
   352 
   357 
   353 (*Introduce the given proposition as a lemma and subgoal*)
   358 (*Introduce the given proposition as a lemma and subgoal*)
   354 fun subgoal_tac sprop =
   359 fun subgoal_tac sprop =
   355   DETERM o res_inst_tac [("psi", sprop)] cut_rl THEN' SUBGOAL (fn (prop, _) =>
   360   DETERM o res_inst_tac [("psi", sprop)] cut_rl THEN' SUBGOAL (fn (prop, _) =>
   356     let val concl' = Logic.strip_assums_concl prop in
   361     let val concl' = Logic.strip_assums_concl prop in