src/HOLCF/ex/Hoare.ML
changeset 4716 a291e858061c
parent 4098 71e05eb27fb6
child 5192 704dd3a6d47d
equal deleted inserted replaced
4715:245d70532eed 4716:a291e858061c
   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),