src/Provers/induct_method.ML
changeset 23532 802bdbe08177
parent 22900 f8a7c10e1bd0
child 23591 d32a85385e17
equal deleted inserted replaced
23531:38a304b3fe1e 23532:802bdbe08177
   160   MetaSimplifier.rewrite_term thy Data.atomize []
   160   MetaSimplifier.rewrite_term thy Data.atomize []
   161   #> ObjectLogic.drop_judgment thy;
   161   #> ObjectLogic.drop_judgment thy;
   162 
   162 
   163 val atomize_cterm = MetaSimplifier.rewrite true Data.atomize;
   163 val atomize_cterm = MetaSimplifier.rewrite true Data.atomize;
   164 
   164 
   165 val atomize_tac = Goal.rewrite_goal_tac Data.atomize;
   165 val atomize_tac = Simplifier.rewrite_goal_tac Data.atomize;
   166 
   166 
   167 val inner_atomize_tac =
   167 val inner_atomize_tac =
   168   Goal.rewrite_goal_tac (map Thm.symmetric conjunction_congs) THEN' atomize_tac;
   168   Simplifier.rewrite_goal_tac (map Thm.symmetric conjunction_congs) THEN' atomize_tac;
   169 
   169 
   170 
   170 
   171 (* rulify *)
   171 (* rulify *)
   172 
   172 
   173 fun rulify_term thy =
   173 fun rulify_term thy =
   180     val rulify = rulify_term thy;
   180     val rulify = rulify_term thy;
   181     val (As, B) = Logic.strip_horn (Thm.prop_of thm);
   181     val (As, B) = Logic.strip_horn (Thm.prop_of thm);
   182   in (thy, Logic.list_implies (map rulify As, rulify B)) end;
   182   in (thy, Logic.list_implies (map rulify As, rulify B)) end;
   183 
   183 
   184 val rulify_tac =
   184 val rulify_tac =
   185   Goal.rewrite_goal_tac (Data.rulify @ conjunction_congs) THEN'
   185   Simplifier.rewrite_goal_tac (Data.rulify @ conjunction_congs) THEN'
   186   Goal.rewrite_goal_tac Data.rulify_fallback THEN'
   186   Simplifier.rewrite_goal_tac Data.rulify_fallback THEN'
   187   Goal.conjunction_tac THEN_ALL_NEW
   187   Goal.conjunction_tac THEN_ALL_NEW
   188   (Goal.rewrite_goal_tac [conjunction_imp] THEN' Goal.norm_hhf_tac);
   188   (Simplifier.rewrite_goal_tac [conjunction_imp] THEN' Goal.norm_hhf_tac);
   189 
   189 
   190 
   190 
   191 (* prepare rule *)
   191 (* prepare rule *)
   192 
   192 
   193 fun rule_instance thy inst rule =
   193 fun rule_instance thy inst rule =
   308       SOME concl =>
   308       SOME concl =>
   309         (compose_tac (false, spec_rule (goal_prefix n goal) concl, 1) THEN' rtac asm_rl) i
   309         (compose_tac (false, spec_rule (goal_prefix n goal) concl, 1) THEN' rtac asm_rl) i
   310     | NONE => all_tac)
   310     | NONE => all_tac)
   311   end);
   311   end);
   312 
   312 
   313 fun miniscope_tac p i = PRIMITIVE (Conv.fconv_rule
   313 fun miniscope_tac p =
   314   (Conv.goals_conv (Library.equal i)
   314   CONVERSION (Conv.forall_conv p (MetaSimplifier.rewrite true [Thm.symmetric Drule.norm_hhf_eq]));
   315     (Conv.forall_conv p (MetaSimplifier.rewrite true [Thm.symmetric Drule.norm_hhf_eq]))));
       
   316 
   315 
   317 in
   316 in
   318 
   317 
   319 fun fix_tac _ _ [] = K all_tac
   318 fun fix_tac _ _ [] = K all_tac
   320   | fix_tac ctxt n xs = SUBGOAL (fn (goal, i) =>
   319   | fix_tac ctxt n xs = SUBGOAL (fn (goal, i) =>