equal
deleted
inserted
replaced
52 val mod_add_left_eq = @{thm "mod_add_left_eq"} RS sym; |
52 val mod_add_left_eq = @{thm "mod_add_left_eq"} RS sym; |
53 val mod_add_right_eq = @{thm "mod_add_right_eq"} RS sym; |
53 val mod_add_right_eq = @{thm "mod_add_right_eq"} RS sym; |
54 val nat_div_add_eq = @{thm "div_add1_eq"} RS sym; |
54 val nat_div_add_eq = @{thm "div_add1_eq"} RS sym; |
55 val int_div_add_eq = @{thm "zdiv_zadd1_eq"} RS sym; |
55 val int_div_add_eq = @{thm "zdiv_zadd1_eq"} RS sym; |
56 |
56 |
57 fun prepare_for_mir thy q fm = |
57 fun prepare_for_mir q fm = |
58 let |
58 let |
59 val ps = Logic.strip_params fm |
59 val ps = Logic.strip_params fm |
60 val hs = map HOLogic.dest_Trueprop (Logic.strip_assums_hyp fm) |
60 val hs = map HOLogic.dest_Trueprop (Logic.strip_assums_hyp fm) |
61 val c = HOLogic.dest_Trueprop (Logic.strip_assums_concl fm) |
61 val c = HOLogic.dest_Trueprop (Logic.strip_assums_concl fm) |
62 fun mk_all ((s, T), (P,n)) = |
62 fun mk_all ((s, T), (P,n)) = |
87 THEN' (REPEAT_DETERM o split_tac [@{thm "split_min"}, @{thm "split_max"}, @{thm "abs_split"}]) |
87 THEN' (REPEAT_DETERM o split_tac [@{thm "split_min"}, @{thm "split_max"}, @{thm "abs_split"}]) |
88 THEN' SUBGOAL (fn (g, i) => |
88 THEN' SUBGOAL (fn (g, i) => |
89 let |
89 let |
90 val thy = Proof_Context.theory_of ctxt |
90 val thy = Proof_Context.theory_of ctxt |
91 (* Transform the term*) |
91 (* Transform the term*) |
92 val (t,np,nh) = prepare_for_mir thy q g |
92 val (t,np,nh) = prepare_for_mir q g |
93 (* Some simpsets for dealing with mod div abs and nat*) |
93 (* Some simpsets for dealing with mod div abs and nat*) |
94 val mod_div_simpset = HOL_basic_ss |
94 val mod_div_simpset = HOL_basic_ss |
95 addsimps [refl, mod_add_eq, |
95 addsimps [refl, mod_add_eq, |
96 @{thm mod_self}, |
96 @{thm mod_self}, |
97 @{thm div_0}, @{thm mod_0}, |
97 @{thm div_0}, @{thm mod_0}, |