equal
deleted
inserted
replaced
176 |
176 |
177 *) |
177 *) |
178 |
178 |
179 val hoare_lemma11 = prove_goal Hoare.thy |
179 val hoare_lemma11 = prove_goal Hoare.thy |
180 "(? n. b1`(iterate n g x) ~= TT) ==>\ |
180 "(? n. b1`(iterate n g x) ~= TT) ==>\ |
181 \ k=Least(%n. b1`(iterate n g x) ~= TT) & b1`(iterate k g x)=FF \ |
181 \ k=(LEAST n. b1`(iterate n g x) ~= TT) & b1`(iterate k g x)=FF \ |
182 \ --> p`x = iterate k g x" |
182 \ --> p`x = iterate k g x" |
183 (fn prems => |
183 (fn prems => |
184 [ |
184 [ |
185 (cut_facts_tac prems 1), |
185 (cut_facts_tac prems 1), |
186 (res_inst_tac [("n","k")] natE 1), |
186 (res_inst_tac [("n","k")] natE 1), |
189 (strip_tac 1), |
189 (strip_tac 1), |
190 (etac conjE 1), |
190 (etac conjE 1), |
191 (rtac trans 1), |
191 (rtac trans 1), |
192 (rtac p_def3 1), |
192 (rtac p_def3 1), |
193 (asm_simp_tac HOLCF_ss 1), |
193 (asm_simp_tac HOLCF_ss 1), |
194 (eres_inst_tac |
|
195 [("s","0"),("t","Least(%n. b1`(iterate n g x) ~= TT)")] subst 1), |
|
196 (Simp_tac 1), |
|
197 (hyp_subst_tac 1), |
194 (hyp_subst_tac 1), |
198 (strip_tac 1), |
195 (strip_tac 1), |
199 (etac conjE 1), |
196 (etac conjE 1), |
200 (rtac trans 1), |
197 (rtac trans 1), |
201 (etac (hoare_lemma10 RS sym) 1), |
198 (etac (hoare_lemma10 RS sym) 1), |