src/HOL/Tools/Lifting/lifting_def_code_dt.ML
changeset 61841 4d3527b94f2a
parent 61466 9a468c3a1fa1
child 62514 aae510e9a698
equal deleted inserted replaced
61840:a3793600cb93 61841:4d3527b94f2a
   405 
   405 
   406     val unfold_lift_sel_rsp = @{lemma "(\<And>x. P1 x \<Longrightarrow> P2 (f x)) \<Longrightarrow> (rel_fun (eq_onp P1) (eq_onp P2)) f f"
   406     val unfold_lift_sel_rsp = @{lemma "(\<And>x. P1 x \<Longrightarrow> P2 (f x)) \<Longrightarrow> (rel_fun (eq_onp P1) (eq_onp P2)) f f"
   407       by (simp add: eq_onp_same_args rel_fun_eq_onp_rel)}
   407       by (simp add: eq_onp_same_args rel_fun_eq_onp_rel)}
   408 
   408 
   409     fun lift_sel_tac exhaust_rule dt_rules wits ctxt i =
   409     fun lift_sel_tac exhaust_rule dt_rules wits ctxt i =
   410         (Method.insert_tac wits THEN' 
   410         (Method.insert_tac ctxt wits THEN' 
   411          eq_onp_to_top_tac ctxt THEN' (* normalize *)
   411          eq_onp_to_top_tac ctxt THEN' (* normalize *)
   412          rtac ctxt unfold_lift_sel_rsp THEN'
   412          rtac ctxt unfold_lift_sel_rsp THEN'
   413          case_tac exhaust_rule ctxt THEN_ALL_NEW (
   413          case_tac exhaust_rule ctxt THEN_ALL_NEW (
   414         EVERY' [hyp_subst_tac ctxt, (* does not kill wits because = was rewritten to eq_onp top *)
   414         EVERY' [hyp_subst_tac ctxt, (* does not kill wits because = was rewritten to eq_onp top *)
   415         Raw_Simplifier.rewrite_goal_tac ctxt (map safe_mk_meta_eq dt_rules), 
   415         Raw_Simplifier.rewrite_goal_tac ctxt (map safe_mk_meta_eq dt_rules), 
   557         val pred = quot_thm_rel quot_thm |> dest_comb |> snd;
   557         val pred = quot_thm_rel quot_thm |> dest_comb |> snd;
   558         val (pred, lthy) = yield_singleton (Variable.import_terms true) pred lthy;
   558         val (pred, lthy) = yield_singleton (Variable.import_terms true) pred lthy;
   559         val TFrees = Term.add_tfreesT qty []
   559         val TFrees = Term.add_tfreesT qty []
   560 
   560 
   561         fun non_empty_typedef_tac non_empty_pred ctxt i =
   561         fun non_empty_typedef_tac non_empty_pred ctxt i =
   562           (Method.insert_tac [non_empty_pred] THEN' 
   562           (Method.insert_tac ctxt [non_empty_pred] THEN' 
   563             SELECT_GOAL (Local_Defs.unfold_tac ctxt [mem_Collect_eq]) THEN' assume_tac ctxt) i
   563             SELECT_GOAL (Local_Defs.unfold_tac ctxt [mem_Collect_eq]) THEN' assume_tac ctxt) i
   564         val uTname = unique_Tname (rty, qty)
   564         val uTname = unique_Tname (rty, qty)
   565         val Tdef_set = HOLogic.mk_Collect ("x", rty, pred $ Free("x", rty));
   565         val Tdef_set = HOLogic.mk_Collect ("x", rty, pred $ Free("x", rty));
   566         val ((_, tcode_dt), lthy) = conceal_naming_result (typedef (Binding.concealed uTname, TFrees, NoSyn)
   566         val ((_, tcode_dt), lthy) = conceal_naming_result (typedef (Binding.concealed uTname, TFrees, NoSyn)
   567           Tdef_set NONE (fn lthy => HEADGOAL (non_empty_typedef_tac non_empty_pred lthy))) lthy;
   567           Tdef_set NONE (fn lthy => HEADGOAL (non_empty_typedef_tac non_empty_pred lthy))) lthy;