src/HOL/Tools/BNF/bnf_fp_def_sugar_tactics.ML
changeset 67399 eab6ce8368fa
parent 64636 a42dbe9d2c1f
child 69593 3dda49e08b9d
equal deleted inserted replaced
67398:5eb932e604a2 67399:eab6ce8368fa
    72 open BNF_Tactics
    72 open BNF_Tactics
    73 open BNF_Util
    73 open BNF_Util
    74 open BNF_FP_Util
    74 open BNF_FP_Util
    75 
    75 
    76 val case_sum_transfer = @{thm case_sum_transfer};
    76 val case_sum_transfer = @{thm case_sum_transfer};
    77 val case_sum_transfer_eq = @{thm case_sum_transfer[of "op =" _ "op =", simplified sum.rel_eq]};
    77 val case_sum_transfer_eq = @{thm case_sum_transfer[of "(=)" _ "(=)", simplified sum.rel_eq]};
    78 val case_prod_transfer = @{thm case_prod_transfer};
    78 val case_prod_transfer = @{thm case_prod_transfer};
    79 val case_prod_transfer_eq = @{thm case_prod_transfer[of "op =" "op =", simplified prod.rel_eq]};
    79 val case_prod_transfer_eq = @{thm case_prod_transfer[of "(=)" "(=)", simplified prod.rel_eq]};
    80 
    80 
    81 val basic_simp_thms = @{thms simp_thms(7,8,12,14,22,24)};
    81 val basic_simp_thms = @{thms simp_thms(7,8,12,14,22,24)};
    82 val more_simp_thms = basic_simp_thms @ @{thms simp_thms(11,15,16,21)};
    82 val more_simp_thms = basic_simp_thms @ @{thms simp_thms(11,15,16,21)};
    83 val simp_thms' = @{thms simp_thms(6,7,8,11,12,15,16,22,24)};
    83 val simp_thms' = @{thms simp_thms(6,7,8,11,12,15,16,22,24)};
    84 
    84 
   250     val num_pgs = length pgs;
   250     val num_pgs = length pgs;
   251     fun prem_no_of x = 1 + find_index (curry (op =) x) pgs;
   251     fun prem_no_of x = 1 + find_index (curry (op =) x) pgs;
   252 
   252 
   253     val Inl_Inr_Pair_tac = REPEAT_DETERM o (resolve_tac ctxt
   253     val Inl_Inr_Pair_tac = REPEAT_DETERM o (resolve_tac ctxt
   254       [mk_rel_funDN 1 @{thm Inl_transfer},
   254       [mk_rel_funDN 1 @{thm Inl_transfer},
   255        mk_rel_funDN 1 @{thm Inl_transfer[of "op =" "op =", simplified sum.rel_eq]},
   255        mk_rel_funDN 1 @{thm Inl_transfer[of "(=)" "(=)", simplified sum.rel_eq]},
   256        mk_rel_funDN 1 @{thm Inr_transfer},
   256        mk_rel_funDN 1 @{thm Inr_transfer},
   257        mk_rel_funDN 1 @{thm Inr_transfer[of "op =" "op =", simplified sum.rel_eq]},
   257        mk_rel_funDN 1 @{thm Inr_transfer[of "(=)" "(=)", simplified sum.rel_eq]},
   258        mk_rel_funDN 2 @{thm Pair_transfer},
   258        mk_rel_funDN 2 @{thm Pair_transfer},
   259        mk_rel_funDN 2 @{thm Pair_transfer[of "op =" "op =", simplified prod.rel_eq]}]);
   259        mk_rel_funDN 2 @{thm Pair_transfer[of "(=)" "(=)", simplified prod.rel_eq]}]);
   260 
   260 
   261     fun mk_unfold_If_tac total pos =
   261     fun mk_unfold_If_tac total pos =
   262       HEADGOAL (Inl_Inr_Pair_tac THEN'
   262       HEADGOAL (Inl_Inr_Pair_tac THEN'
   263         rtac ctxt (mk_rel_funDN 3 @{thm If_transfer}) THEN'
   263         rtac ctxt (mk_rel_funDN 3 @{thm If_transfer}) THEN'
   264         select_prem_tac ctxt total (dtac ctxt asm_rl) pos THEN'
   264         select_prem_tac ctxt total (dtac ctxt asm_rl) pos THEN'