src/HOLCF/ex/Hoare.ML
changeset 13454 01e2496dee05
parent 10835 f4745d77e620
child 16218 ea49a9c7ff7c
equal deleted inserted replaced
13453:af96f2568406 13454:01e2496dee05
    84 
    84 
    85 (** --------- proves about iterations of p and q ---------- **)
    85 (** --------- proves about iterations of p and q ---------- **)
    86 
    86 
    87 Goal "(ALL m. m< Suc k --> b1$(iterate m g x)=TT) -->\
    87 Goal "(ALL m. m< Suc k --> b1$(iterate m g x)=TT) -->\
    88 \  p$(iterate k g x)=p$x";
    88 \  p$(iterate k g x)=p$x";
    89 by (nat_ind_tac "k" 1);
    89 by (induct_tac "k" 1);
    90 by (Simp_tac 1);
    90 by (Simp_tac 1);
    91 by (Simp_tac 1);
    91 by (Simp_tac 1);
    92 by (strip_tac 1);
    92 by (strip_tac 1);
    93 by (res_inst_tac [("s","p$(iterate k g x)")] trans 1);
    93 by (res_inst_tac [("s","p$(iterate n g x)")] trans 1);
    94 by (rtac trans 1);
    94 by (rtac trans 1);
    95 by (rtac (p_def3 RS sym) 2);
    95 by (rtac (p_def3 RS sym) 2);
    96 by (res_inst_tac [("s","TT"),("t","b1$(iterate k g x)")] ssubst 1);
    96 by (res_inst_tac [("s","TT"),("t","b1$(iterate n g x)")] ssubst 1);
    97 by (rtac mp 1);
    97 by (rtac mp 1);
    98 by (etac spec 1);
    98 by (etac spec 1);
    99 by (simp_tac (simpset() addsimps [less_Suc_eq]) 1);
    99 by (simp_tac (simpset() addsimps [less_Suc_eq]) 1);
   100 by (simp_tac HOLCF_ss 1);
   100 by (simp_tac HOLCF_ss 1);
   101 by (etac mp 1);
   101 by (etac mp 1);
   106 by (Simp_tac 1);
   106 by (Simp_tac 1);
   107 qed "hoare_lemma9";
   107 qed "hoare_lemma9";
   108 
   108 
   109 Goal "(ALL m. m< Suc k --> b1$(iterate m g x)=TT) --> \
   109 Goal "(ALL m. m< Suc k --> b1$(iterate m g x)=TT) --> \
   110 \ q$(iterate k g x)=q$x";
   110 \ q$(iterate k g x)=q$x";
   111 by (nat_ind_tac "k" 1);
   111 by (induct_tac "k" 1);
   112 by (Simp_tac 1);
   112 by (Simp_tac 1);
   113 by (simp_tac (simpset() addsimps [less_Suc_eq]) 1);
   113 by (simp_tac (simpset() addsimps [less_Suc_eq]) 1);
   114 by (strip_tac 1);
   114 by (strip_tac 1);
   115 by (res_inst_tac [("s","q$(iterate k g x)")] trans 1);
   115 by (res_inst_tac [("s","q$(iterate n g x)")] trans 1);
   116 by (rtac trans 1);
   116 by (rtac trans 1);
   117 by (rtac (q_def3 RS sym) 2);
   117 by (rtac (q_def3 RS sym) 2);
   118 by (res_inst_tac [("s","TT"),("t","b1$(iterate k g x)")] ssubst 1);
   118 by (res_inst_tac [("s","TT"),("t","b1$(iterate n g x)")] ssubst 1);
   119 by (fast_tac HOL_cs 1);
   119 by (fast_tac HOL_cs 1);
   120 by (simp_tac HOLCF_ss 1);
   120 by (simp_tac HOLCF_ss 1);
   121 by (etac mp 1);
   121 by (etac mp 1);
   122 by (strip_tac 1);
   122 by (strip_tac 1);
   123 by (fast_tac (HOL_cs addSDs [less_Suc_eq RS iffD1]) 1);
   123 by (fast_tac (HOL_cs addSDs [less_Suc_eq RS iffD1]) 1);