src/Tools/induct.ML
changeset 60313 2a0b42cd58fb
parent 60097 d20ca79d50e4
child 60455 0c4077939278
equal deleted inserted replaced
60312:ee6f9a97205d 60313:2a0b42cd58fb
   615             val xs = rename_params (Logic.strip_params A);
   615             val xs = rename_params (Logic.strip_params A);
   616             val xs' =
   616             val xs' =
   617               (case filter (fn x' => x' = x) xs of
   617               (case filter (fn x' => x' = x) xs of
   618                 [] => xs | [_] => xs | _ => index 1 xs);
   618                 [] => xs | [_] => xs | _ => index 1 xs);
   619           in Logic.list_rename_params xs' A end;
   619           in Logic.list_rename_params xs' A end;
   620         fun rename_prop p =
   620         fun rename_prop prop =
   621           let val (As, C) = Logic.strip_horn p
   621           let val (As, C) = Logic.strip_horn prop
   622           in Logic.list_implies (map rename_asm As, C) end;
   622           in Logic.list_implies (map rename_asm As, C) end;
   623         val cp' = cterm_fun rename_prop (Thm.cprop_of thm);
   623         val thm' = Thm.renamed_prop (rename_prop (Thm.prop_of thm)) thm;
   624         val thm' = Thm.equal_elim (Thm.reflexive cp') thm;
       
   625       in [Rule_Cases.save thm thm'] end
   624       in [Rule_Cases.save thm thm'] end
   626   | special_rename_params _ _ ths = ths;
   625   | special_rename_params _ _ ths = ths;
   627 
   626 
   628 
   627 
   629 (* arbitrary_tac *)
   628 (* arbitrary_tac *)