equal
deleted
inserted
replaced
87 \ b := 1; \ |
87 \ b := 1; \ |
88 \ WHILE a ~= 0 \ |
88 \ WHILE a ~= 0 \ |
89 \ INV {fac A = b * fac a} \ |
89 \ INV {fac A = b * fac a} \ |
90 \ DO b := b*a; a := a-1 OD \ |
90 \ DO b := b*a; a := a-1 OD \ |
91 \ {b = fac A}"; |
91 \ {b = fac A}"; |
92 by (hoare_tac Asm_full_simp_tac 1); |
92 by (hoare_tac (asm_full_simp_tac (simpset() addsplits [nat_diff_split])) 1); |
93 by (Clarify_tac 1); |
93 by Auto_tac; |
94 by (case_tac "a" 1); |
|
95 by (ALLGOALS (asm_simp_tac |
|
96 (simpset() addsimps [add_mult_distrib,add_mult_distrib2,mult_assoc]))); |
|
97 qed "factorial"; |
94 qed "factorial"; |
98 |
95 |
99 (** Square root **) |
96 (** Square root **) |
100 |
97 |
101 (* the easy way: *) |
98 (* the easy way: *) |
197 \ {leq A u & (!k. u<k & k<l --> A!k = pivot) & geq A l}"; |
194 \ {leq A u & (!k. u<k & k<l --> A!k = pivot) & geq A l}"; |
198 (* expand and delete abbreviations first *) |
195 (* expand and delete abbreviations first *) |
199 by (asm_simp_tac HOL_basic_ss 1); |
196 by (asm_simp_tac HOL_basic_ss 1); |
200 by (REPEAT (etac thin_rl 1)); |
197 by (REPEAT (etac thin_rl 1)); |
201 by (hoare_tac Asm_full_simp_tac 1); |
198 by (hoare_tac Asm_full_simp_tac 1); |
202 by (SELECT_GOAL (auto_tac (claset(), simpset() addsimps [neq_Nil_conv])) 1); |
199 by (force_tac (claset(), simpset() addsimps [neq_Nil_conv]) 1); |
203 by (blast_tac (claset() addSEs [less_SucE] addIs [Suc_leI]) 1); |
200 by (blast_tac (claset() addSEs [less_SucE] addIs [Suc_leI]) 1); |
204 by (blast_tac (claset() addSEs [less_SucE] addIs [less_imp_diff_less] |
201 by (blast_tac (claset() addSEs [less_SucE] addIs [less_imp_diff_less] |
205 addDs [pred_less_imp_le RS le_imp_less_Suc] ) 1); |
202 addDs [pred_less_imp_le RS le_imp_less_Suc] ) 1); |
206 by (SELECT_GOAL (auto_tac (claset(), simpset() addsimps [nth_list_update])) 1); |
203 by (force_tac (claset(), simpset() addsimps [nth_list_update]) 1); |
207 by (SELECT_GOAL (auto_tac (claset() addIs [order_antisym], simpset())) 1); |
204 by (auto_tac (claset() addIs [order_antisym], simpset())); |
208 qed "Partition"; |
205 qed "Partition"; |