# HG changeset patch # User oheimb # Date 965736924 -7200 # Node ID dcdcfb0545e0b6e631f44c4e51c558fcbdcdf04a # Parent e8b05a2a4b72d8f046a33da0ac5d72d94ca5b3a4 moved Hoare_example to Examples; other minor improvements diff -r e8b05a2a4b72 -r dcdcfb0545e0 src/HOL/IMP/Examples.ML --- a/src/HOL/IMP/Examples.ML Tue Aug 08 13:23:45 2000 +0200 +++ b/src/HOL/IMP/Examples.ML Tue Aug 08 14:15:24 2000 +0200 @@ -6,7 +6,30 @@ Addsimps[update_def]; -section "Examples"; +section "An example due to Tony Hoare"; + +Goal "[| !x. P x --> Q x; -c-> t |] ==> \ +\ !c. w = While P c --> -c-> u --> -c-> u"; +by (etac evalc.induct 1); +by (Auto_tac); +val lemma1 = result() RS spec RS mp RS mp; + +Goal "[| !x. P x --> Q x; -c-> u |] ==> \ +\ !c. w = While Q c --> -c-> u"; +by (etac evalc.induct 1); +by (ALLGOALS Asm_simp_tac); +by (Blast_tac 1); +by (case_tac "P s" 1); +by (Auto_tac); +val lemma2 = result() RS spec RS mp; + +Goal "!x. P x --> Q x ==> \ +\ ( -c-> t) = ( -c-> t)"; +by (blast_tac (claset() addIs [lemma1,lemma2]) 1); +qed "Hoare_example"; + + +section "Factorial"; val step = resolve_tac evalc.intrs 1; val simp = Asm_simp_tac 1; @@ -15,22 +38,26 @@ by (ftac not_sym 1); by step; by step; +by simp; by step; by simp; by step; by step; +by simp; by step; by simp; by step; by simp; by step; by step; +by simp; by step; by simp; by step; by simp; by step; by step; +by simp; by step; by simp; by step; diff -r e8b05a2a4b72 -r dcdcfb0545e0 src/HOL/IMP/Natural.ML --- a/src/HOL/IMP/Natural.ML Tue Aug 08 13:23:45 2000 +0200 +++ b/src/HOL/IMP/Natural.ML Tue Aug 08 14:15:24 2000 +0200 @@ -26,25 +26,3 @@ (*blast_tac needs Unify.search_bound, trace_bound ::= 40*) by (ALLGOALS (best_tac (claset() addEs [evalc_WHILE_case]))); qed_spec_mp "com_det"; - -(** An example due to Tony Hoare **) - -Goal "[| !x. P x --> Q x; -c-> t |] ==> \ -\ !c. w = While P c --> -c-> u --> -c-> u"; -by (etac evalc.induct 1); -by (Auto_tac); -val lemma1 = result() RS spec RS mp RS mp; - -Goal "[| !x. P x --> Q x; -c-> u |] ==> \ -\ !c. w = While Q c --> -c-> u"; -by (etac evalc.induct 1); -by (ALLGOALS Asm_simp_tac); -by (Blast_tac 1); -by (case_tac "P s" 1); -by (Auto_tac); -val lemma2 = result() RS spec RS mp; - -Goal "!x. P x --> Q x ==> \ -\ ( -c-> t) = ( -c-> t)"; -by (blast_tac (claset() addIs [lemma1,lemma2]) 1); -qed "Hoare_example"; diff -r e8b05a2a4b72 -r dcdcfb0545e0 src/HOL/IMP/Transition.ML --- a/src/HOL/IMP/Transition.ML Tue Aug 08 13:23:45 2000 +0200 +++ b/src/HOL/IMP/Transition.ML Tue Aug 08 14:15:24 2000 +0200 @@ -24,13 +24,6 @@ AddIs evalc1.intrs; -Goal "(SKIP,s) -m-> (SKIP,t) ==> s = t & m = 0"; -by (etac rel_pow_E2 1); -by (Asm_full_simp_tac 1); -by (Fast_tac 1); -val hlemma = result(); - - Goal "!s t u c d. (c,s) -n-> (SKIP,t) --> (d,t) -*-> (SKIP,u) --> \ \ (c;d, s) -*-> (SKIP, u)"; by (induct_tac "n" 1); @@ -38,7 +31,6 @@ by (fast_tac (claset() addIs [rtrancl_into_rtrancl2]addSDs [rel_pow_Suc_D2])1); qed_spec_mp "lemma1"; - Goal " -c-> s1 ==> (c,s) -*-> (SKIP,s1)"; by (etac evalc.induct 1); @@ -63,6 +55,12 @@ qed "evalc_impl_evalc1"; +Goal "(SKIP,s) -m-> (SKIP,t) ==> s = t & m = 0"; +by (etac rel_pow_E2 1); +by (Asm_full_simp_tac 1); +by (Fast_tac 1); +val hlemma = result(); + Goal "!c d s u. (c;d,s) -n-> (SKIP,u) --> \ \ (? t m. (c,s) -*-> (SKIP,t) & (d,t) -m-> (SKIP,u) & m <= n)"; by (induct_tac "n" 1); @@ -210,7 +208,7 @@ Goal "!c1 s. (c1;c2,s) -n-> (SKIP,t) --> \ \ (? i1 i2 u. (c1,s) -i1-> (SKIP,u) & (c2,u) -i2-> (SKIP,t) & i1