src/HOLCF/ex/Hoare.ML
changeset 3842 b55686a7b22c
parent 3324 6b26b886ff69
child 3843 162f95673705
equal deleted inserted replaced
3841:22bbc1676768 3842:b55686a7b22c
    18         (contr_tac 1),
    18         (contr_tac 1),
    19         (fast_tac HOL_cs 1)
    19         (fast_tac HOL_cs 1)
    20         ]);
    20         ]);
    21 
    21 
    22 val hoare_lemma3 = prove_goal HOLCF.thy 
    22 val hoare_lemma3 = prove_goal HOLCF.thy 
    23 " (!k.b1`(iterate k g x) = TT) | (? k. b1`(iterate k g x)~=TT)"
    23 " (!k. b1`(iterate k g x) = TT) | (? k. b1`(iterate k g x)~=TT)"
    24  (fn prems =>
    24  (fn prems =>
    25         [
    25         [
    26         (fast_tac HOL_cs 1)
    26         (fast_tac HOL_cs 1)
    27         ]);
    27         ]);
    28 
    28 
   175  p`(iterate ?k3 g ?x1) = p`?x1" : thm
   175  p`(iterate ?k3 g ?x1) = p`?x1" : thm
   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),