src/Pure/tactic.ML
changeset 15696 1da4ce092c0b
parent 15671 8df681866dc9
child 15797 a63605582573
equal deleted inserted replaced
15695:f072119afa4e 15696:1da4ce092c0b
    68   val metacut_tac       : thm -> int -> tactic
    68   val metacut_tac       : thm -> int -> tactic
    69   val net_bimatch_tac   : (bool*thm) list -> int -> tactic
    69   val net_bimatch_tac   : (bool*thm) list -> int -> tactic
    70   val net_biresolve_tac : (bool*thm) list -> int -> tactic
    70   val net_biresolve_tac : (bool*thm) list -> int -> tactic
    71   val net_match_tac     : thm list -> int -> tactic
    71   val net_match_tac     : thm list -> int -> tactic
    72   val net_resolve_tac   : thm list -> int -> tactic
    72   val net_resolve_tac   : thm list -> int -> tactic
       
    73   val norm_hhf_plain    : thm -> thm
    73   val norm_hhf_rule     : thm -> thm
    74   val norm_hhf_rule     : thm -> thm
    74   val norm_hhf_tac      : int -> tactic
    75   val norm_hhf_tac      : int -> tactic
    75   val prune_params_tac  : tactic
    76   val prune_params_tac  : tactic
    76   val rename_params_tac : string list -> int -> tactic
    77   val rename_params_tac : string list -> int -> tactic
    77   val rename_tac        : string -> int -> tactic
    78   val rename_tac        : string -> int -> tactic
   530 
   531 
   531 (*Rewrite subgoals only, not main goal. *)
   532 (*Rewrite subgoals only, not main goal. *)
   532 fun rewrite_goals_tac defs = PRIMITIVE (rewrite_goals_rule defs);
   533 fun rewrite_goals_tac defs = PRIMITIVE (rewrite_goals_rule defs);
   533 fun rewtac def = rewrite_goals_tac [def];
   534 fun rewtac def = rewrite_goals_tac [def];
   534 
   535 
       
   536 fun norm_hhf_plain th =
       
   537   if Drule.is_norm_hhf (prop_of th) then th
       
   538   else rewrite_rule [Drule.norm_hhf_eq] th;
       
   539 
   535 fun norm_hhf_rule th =
   540 fun norm_hhf_rule th =
   536  (if Drule.is_norm_hhf (prop_of th) then th
   541   th |> norm_hhf_plain |> Drule.gen_all;
   537   else rewrite_rule [Drule.norm_hhf_eq] th) |> Drule.gen_all;
       
   538 
   542 
   539 val norm_hhf_tac =
   543 val norm_hhf_tac =
   540   rtac Drule.asm_rl  (*cheap approximation -- thanks to builtin Logic.flatten_params*)
   544   rtac Drule.asm_rl  (*cheap approximation -- thanks to builtin Logic.flatten_params*)
   541   THEN' SUBGOAL (fn (t, i) =>
   545   THEN' SUBGOAL (fn (t, i) =>
   542     if Drule.is_norm_hhf t then all_tac
   546     if Drule.is_norm_hhf t then all_tac