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' |