src/HOL/Tools/induct_method.ML
changeset 11035 bad7568e76e0
parent 10871 0ff9caa810b1
equal deleted inserted replaced
11034:568eb11f8d52 11035:bad7568e76e0
     8 
     8 
     9 signature INDUCT_METHOD =
     9 signature INDUCT_METHOD =
    10 sig
    10 sig
    11   val vars_of: term -> term list
    11   val vars_of: term -> term list
    12   val concls_of: thm -> term list
    12   val concls_of: thm -> term list
    13   val rewrite_cterm: thm list -> cterm -> cterm
       
    14   val simp_case_tac: bool -> simpset -> int -> tactic
    13   val simp_case_tac: bool -> simpset -> int -> tactic
    15   val setup: (theory -> theory) list
    14   val setup: (theory -> theory) list
    16 end;
    15 end;
    17 
    16 
    18 structure InductMethod: INDUCT_METHOD =
    17 structure InductMethod: INDUCT_METHOD =
    72   in
    71   in
    73     align "Rule has fewer variables than instantiations given" (vars_of tm) ts
    72     align "Rule has fewer variables than instantiations given" (vars_of tm) ts
    74     |> mapfilter prep_var
    73     |> mapfilter prep_var
    75   end;
    74   end;
    76 
    75 
    77 fun rewrite_cterm rews =
       
    78   #2 o Thm.dest_comb o #prop o Thm.crep_thm o Simplifier.full_rewrite (HOL_basic_ss addsimps rews);
       
    79 
    76 
    80 
    77 
    81 (* simplifying cases rules *)
    78 (* simplifying cases rules *)
    82 
    79 
    83 local
    80 local
   204   ...   induct ... R   - explicit rule
   201   ...   induct ... R   - explicit rule
   205 *)
   202 *)
   206 
   203 
   207 local
   204 local
   208 
   205 
   209 val atomize_cterm = Thm.cterm_fun AutoBind.drop_judgment o rewrite_cterm inductive_atomize;
   206 val atomize_cterm = Thm.cterm_fun AutoBind.drop_judgment o hol_rewrite_cterm inductive_atomize;
   210 val atomize_tac = Tactic.rewrite_goal_tac inductive_atomize;
   207 val atomize_tac = Tactic.rewrite_goal_tac inductive_atomize;
   211 val rulify_cterm = rewrite_cterm inductive_rulify2 o rewrite_cterm inductive_rulify1;
   208 val rulify_cterm = hol_rewrite_cterm inductive_rulify2 o hol_rewrite_cterm inductive_rulify1;
   212 
   209 
   213 val rulify_tac =
   210 val rulify_tac =
   214   Tactic.rewrite_goal_tac inductive_rulify1 THEN'
   211   Tactic.rewrite_goal_tac inductive_rulify1 THEN'
   215   Tactic.rewrite_goal_tac inductive_rulify2 THEN'
   212   Tactic.rewrite_goal_tac inductive_rulify2 THEN'
   216   Tactic.norm_hhf_tac;
   213   Tactic.norm_hhf_tac;