src/HOLCF/ex/Hoare.ML
changeset 3044 3e3087aa69e7
parent 2642 3c3a84cc85a9
child 3324 6b26b886ff69
equal deleted inserted replaced
3043:63a77d6b7eca 3044:3e3087aa69e7
   128         [
   128         [
   129         (nat_ind_tac "k" 1),
   129         (nat_ind_tac "k" 1),
   130         (Simp_tac 1),
   130         (Simp_tac 1),
   131         (Simp_tac 1),
   131         (Simp_tac 1),
   132         (strip_tac 1),
   132         (strip_tac 1),
   133         (res_inst_tac [("s","p`(iterate k1 g x)")] trans 1),
   133         (res_inst_tac [("s","p`(iterate k g x)")] trans 1),
   134         (rtac trans 1),
   134         (rtac trans 1),
   135         (rtac (p_def3 RS sym) 2),
   135         (rtac (p_def3 RS sym) 2),
   136         (res_inst_tac [("s","TT"),("t","b1`(iterate k1 g x)")] ssubst 1),
   136         (res_inst_tac [("s","TT"),("t","b1`(iterate k g x)")] ssubst 1),
   137         (rtac mp 1),
   137         (rtac mp 1),
   138         (etac spec 1),
   138         (etac spec 1),
   139         (simp_tac (!simpset addsimps [less_Suc_eq]) 1),
   139         (simp_tac (!simpset addsimps [less_Suc_eq]) 1),
   140         (simp_tac HOLCF_ss 1),
   140         (simp_tac HOLCF_ss 1),
   141         (etac mp 1),
   141         (etac mp 1),
   143         (rtac mp 1),
   143         (rtac mp 1),
   144         (etac spec 1),
   144         (etac spec 1),
   145         (etac less_trans 1),
   145         (etac less_trans 1),
   146         (Simp_tac 1)
   146         (Simp_tac 1)
   147         ]);
   147         ]);
   148 trace_simp := false;
   148 
   149 val hoare_lemma24 = prove_goal Hoare.thy 
   149 val hoare_lemma24 = prove_goal Hoare.thy 
   150 "(! m. m< Suc k --> b1`(iterate m g x)=TT) --> \
   150 "(! m. m< Suc k --> b1`(iterate m g x)=TT) --> \
   151 \ q`(iterate k g x)=q`x"
   151 \ q`(iterate k g x)=q`x"
   152  (fn prems =>
   152  (fn prems =>
   153         [
   153         [
   154         (nat_ind_tac "k" 1),
   154         (nat_ind_tac "k" 1),
   155         (Simp_tac 1),
   155         (Simp_tac 1),
   156 (simp_tac (!simpset addsimps [less_Suc_eq]) 1),
   156 (simp_tac (!simpset addsimps [less_Suc_eq]) 1),
   157         (strip_tac 1),
   157         (strip_tac 1),
   158         (res_inst_tac [("s","q`(iterate k1 g x)")] trans 1),
   158         (res_inst_tac [("s","q`(iterate k g x)")] trans 1),
   159         (rtac trans 1),
   159         (rtac trans 1),
   160         (rtac (q_def3 RS sym) 2),
   160         (rtac (q_def3 RS sym) 2),
   161         (res_inst_tac [("s","TT"),("t","b1`(iterate k1 g x)")] ssubst 1),
   161         (res_inst_tac [("s","TT"),("t","b1`(iterate k g x)")] ssubst 1),
   162         (fast_tac HOL_cs 1),
   162         (fast_tac HOL_cs 1),
   163         (simp_tac HOLCF_ss 1),
   163         (simp_tac HOLCF_ss 1),
   164         (etac mp 1),
   164         (etac mp 1),
   165         (strip_tac 1),
   165         (strip_tac 1),
   166         (fast_tac (HOL_cs addSDs [less_Suc_eq RS iffD1]) 1)]);
   166         (fast_tac (HOL_cs addSDs [less_Suc_eq RS iffD1]) 1)]);