src/HOLCF/ex/Hoare.ML
author oheimb
Fri, 31 Jan 1997 16:56:32 +0100
changeset 2570 24d7e8fb8261
parent 2033 639de962ded4
child 2642 3c3a84cc85a9
permissions -rw-r--r--
added Classlib.* and Witness.*, moved (and updated) Coind.*, Dagstuhl.*, Dlist.*, Dnat.*, Focus_ex.* and Stream.* from HOLCF/explicit_domains to here adapted several proofs; now they work again. Hope that the following strange errors (when committing) do not matter: rlog error: RCS/Classlib.ML,v: No such file or directory rlog error: RCS/Classlib.thy,v: No such file or directory rlog error: RCS/Coind.ML,v: No such file or directory rlog error: RCS/Coind.thy,v: No such file or directory rlog error: RCS/Dagstuhl.ML,v: No such file or directory rlog error: RCS/Dagstuhl.thy,v: No such file or directory rlog error: RCS/Dlist.ML,v: No such file or directory rlog error: RCS/Dlist.thy,v: No such file or directory rlog error: RCS/Dnat.ML,v: No such file or directory rlog error: RCS/Dnat.thy,v: No such file or directory rlog error: RCS/Focus_ex.ML,v: No such file or directory rlog error: RCS/Focus_ex.thy,v: No such file or directory rlog error: RCS/Stream.ML,v: No such file or directory rlog error: RCS/Stream.thy,v: No such file or directory rlog error: RCS/Witness.ML,v: No such file or directory rlog error: RCS/Witness.thy,v: No such file or directory
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
     1
(*  Title:      HOLCF/ex/hoare.ML
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
     3
    Author:     Franz Regensburger
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
     4
    Copyright   1993 Technische Universitaet Muenchen
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
     5
*)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
     6
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
     7
open Hoare;
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
     8
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
     9
(* --------- pure HOLCF logic, some little lemmas ------ *)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    10
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    11
val hoare_lemma2 = prove_goal HOLCF.thy "b~=TT ==> b=FF | b=UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    12
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    13
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    14
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    15
        (rtac (Exh_tr RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    16
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    17
        (etac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    18
        (contr_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    19
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    20
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    21
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
    22
val hoare_lemma3 = prove_goal HOLCF.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    23
" (!k.b1`(iterate k g x) = TT) | (? k. b1`(iterate k g x)~=TT)"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    24
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    25
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    26
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    27
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    28
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
    29
val hoare_lemma4 = prove_goal HOLCF.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    30
"(? k. b1`(iterate k g x) ~= TT) ==> \
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    31
\ ? k. b1`(iterate k g x) = FF | b1`(iterate k g x) = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    32
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    33
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    34
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    35
        (etac exE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    36
        (rtac exI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    37
        (rtac hoare_lemma2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    38
        (atac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    39
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    40
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
    41
val hoare_lemma5 = prove_goal HOLCF.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    42
"[|(? k. b1`(iterate k g x) ~= TT);\
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
    43
\   k=Least(%n. b1`(iterate n g x) ~= TT)|] ==> \
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    44
\ b1`(iterate k g x)=FF | b1`(iterate k g x)=UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    45
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    46
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    47
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    48
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    49
        (rtac hoare_lemma2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    50
        (etac exE 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
    51
        (etac LeastI 1)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    52
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    53
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    54
val hoare_lemma6 = prove_goal HOLCF.thy "b=UU ==> b~=TT"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    55
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    56
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    57
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    58
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    59
        (resolve_tac dist_eq_tr 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    60
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    61
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    62
val hoare_lemma7 = prove_goal HOLCF.thy "b=FF ==> b~=TT"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    63
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    64
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    65
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    66
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    67
        (resolve_tac dist_eq_tr 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    68
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    69
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
    70
val hoare_lemma8 = prove_goal HOLCF.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    71
"[|(? k. b1`(iterate k g x) ~= TT);\
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
    72
\   k=Least(%n. b1`(iterate n g x) ~= TT)|] ==> \
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    73
\ !m. m < k --> b1`(iterate m g x)=TT"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    74
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    75
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    76
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    77
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    78
        (etac exE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    79
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    80
        (res_inst_tac [("p","b1`(iterate m g x)")] trE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    81
        (atac 2),
1619
cb62d89b7adb Now use _irrefl instead of _anti_refl
paulson
parents: 1461
diff changeset
    82
        (rtac (le_less_trans RS less_irrefl) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    83
        (atac 2),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
    84
        (rtac Least_le 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    85
        (etac hoare_lemma6 1),
1619
cb62d89b7adb Now use _irrefl instead of _anti_refl
paulson
parents: 1461
diff changeset
    86
        (rtac (le_less_trans RS less_irrefl) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    87
        (atac 2),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
    88
        (rtac Least_le 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    89
        (etac hoare_lemma7 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    90
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    91
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    92
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
    93
val hoare_lemma28 = prove_goal HOLCF.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
    94
"b1`(y::'a)=(UU::tr) ==> b1`UU = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
    95
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    96
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    97
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    98
        (etac (flat_tr RS flat_codom RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
    99
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   100
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   101
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   102
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   103
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   104
(* ----- access to definitions ----- *)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   105
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   106
val p_def3 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   107
"p`x = If b1`x then p`(g`x) else x fi"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   108
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   109
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   110
        (fix_tac3 p_def 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   111
        (Simp_tac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   112
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   113
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   114
val q_def3 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   115
"q`x = If b1`x orelse b2`x then q`(g`x) else x fi"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   116
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   117
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   118
        (fix_tac3 q_def 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   119
        (Simp_tac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   120
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   121
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   122
(** --------- proves about iterations of p and q ---------- **)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   123
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   124
val hoare_lemma9 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   125
"(! m. m< Suc k --> b1`(iterate m g x)=TT) -->\
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   126
\  p`(iterate k g x)=p`x"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   127
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   128
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   129
        (nat_ind_tac "k" 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   130
        (Simp_tac 1),
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   131
        (Simp_tac 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   132
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   133
        (res_inst_tac [("s","p`(iterate k1 g x)")] trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   134
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   135
        (rtac (p_def3 RS sym) 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   136
        (res_inst_tac [("s","TT"),("t","b1`(iterate k1 g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   137
        (rtac mp 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   138
        (etac spec 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   139
        (simp_tac (!simpset addsimps [less_Suc_eq]) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   140
        (simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   141
        (etac mp 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   142
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   143
        (rtac mp 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   144
        (etac spec 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   145
        (etac less_trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   146
        (Simp_tac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   147
        ]);
1267
bca91b4e1710 added local simpsets
clasohm
parents: 1168
diff changeset
   148
trace_simp := false;
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   149
val hoare_lemma24 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   150
"(! m. m< Suc k --> b1`(iterate m g x)=TT) --> \
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   151
\ q`(iterate k g x)=q`x"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   152
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   153
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   154
        (nat_ind_tac "k" 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   155
        (Simp_tac 1),
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   156
(simp_tac (!simpset addsimps [less_Suc_eq]) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   157
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   158
        (res_inst_tac [("s","q`(iterate k1 g x)")] trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   159
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   160
        (rtac (q_def3 RS sym) 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   161
        (res_inst_tac [("s","TT"),("t","b1`(iterate k1 g x)")] ssubst 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   162
        (fast_tac HOL_cs 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   163
        (simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   164
        (etac mp 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   165
        (strip_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   166
        (fast_tac (HOL_cs addSDs [less_Suc_eq RS iffD1]) 1)]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   167
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   168
(* -------- results about p for case (? k. b1`(iterate k g x)~=TT) ------- *)
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   169
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   170
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   171
val hoare_lemma10 = (hoare_lemma8 RS (hoare_lemma9 RS mp));
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   172
(* 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   173
val hoare_lemma10 = "[| ? k. b1`(iterate k g ?x1) ~= TT;
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   174
    Suc ?k3 = Least(%n. b1`(iterate n g ?x1) ~= TT) |] ==>
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   175
 p`(iterate ?k3 g ?x1) = p`?x1" : thm
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   176
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   177
*)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   178
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   179
val hoare_lemma11 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   180
"(? n.b1`(iterate n g x) ~= TT) ==>\
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   181
\ k=Least(%n.b1`(iterate n g x) ~= TT) & b1`(iterate k g x)=FF \
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   182
\ --> p`x = iterate k g x"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   183
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   184
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   185
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   186
        (res_inst_tac [("n","k")] natE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   187
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   188
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   189
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   190
        (etac conjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   191
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   192
        (rtac p_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   193
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   194
        (eres_inst_tac
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   195
           [("s","0"),("t","Least(%n. b1`(iterate n g x) ~= TT)")] subst 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   196
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   197
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   198
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   199
        (etac conjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   200
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   201
        (etac (hoare_lemma10 RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   202
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   203
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   204
        (rtac p_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   205
        (res_inst_tac [("s","TT"),("t","b1`(iterate xa g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   206
        (rtac (hoare_lemma8 RS spec RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   207
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   208
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   209
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   210
        (simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   211
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   212
        (rtac p_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   213
        (simp_tac (!simpset delsimps [iterate_Suc]
1267
bca91b4e1710 added local simpsets
clasohm
parents: 1168
diff changeset
   214
                            addsimps [iterate_Suc RS sym]) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   215
        (eres_inst_tac [("s","FF")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   216
        (simp_tac HOLCF_ss 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   217
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   218
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   219
val hoare_lemma12 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   220
"(? n. b1`(iterate n g x) ~= TT) ==>\
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   221
\ k=Least(%n. b1`(iterate n g x)~=TT) & b1`(iterate k g x)=UU \
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   222
\ --> p`x = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   223
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   224
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   225
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   226
        (res_inst_tac [("n","k")] natE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   227
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   228
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   229
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   230
        (etac conjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   231
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   232
        (rtac p_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   233
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   234
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   235
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   236
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   237
        (etac conjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   238
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   239
        (rtac (hoare_lemma10 RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   240
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   241
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   242
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   243
        (rtac p_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   244
        (res_inst_tac [("s","TT"),("t","b1`(iterate xa g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   245
        (rtac (hoare_lemma8 RS spec RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   246
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   247
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   248
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   249
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   250
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   251
        (rtac p_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   252
        (asm_simp_tac HOLCF_ss 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   253
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   254
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   255
(* -------- results about p for case  (! k. b1`(iterate k g x)=TT) ------- *)
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   256
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   257
val fernpass_lemma = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   258
"(! k. b1`(iterate k g x)=TT) ==> !k.p`(iterate k g x) = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   259
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   260
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   261
        (cut_facts_tac prems 1),
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents: 2033
diff changeset
   262
        (rtac (p_def RS def_fix_ind) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   263
        (rtac adm_all 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   264
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   265
        (rtac adm_eq 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   266
        (cont_tacR 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   267
        (rtac allI 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   268
        (stac strict_fapp1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   269
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   270
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   271
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   272
        (res_inst_tac [("s","TT"),("t","b1`(iterate k g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   273
        (etac spec 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   274
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   275
        (rtac (iterate_Suc RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   276
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   277
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   278
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   279
val hoare_lemma16 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   280
"(! k. b1`(iterate k g x)=TT) ==> p`x = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   281
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   282
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   283
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   284
        (res_inst_tac [("F1","g"),("t","x")] (iterate_0 RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   285
        (etac (fernpass_lemma RS spec) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   286
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   287
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   288
(* -------- results about q for case  (! k. b1`(iterate k g x)=TT) ------- *)
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   289
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   290
val hoare_lemma17 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   291
"(! k. b1`(iterate k g x)=TT) ==> !k.q`(iterate k g x) = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   292
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   293
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   294
        (cut_facts_tac prems 1),
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents: 2033
diff changeset
   295
        (rtac (q_def RS def_fix_ind) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   296
        (rtac adm_all 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   297
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   298
        (rtac adm_eq 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   299
        (cont_tacR 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   300
        (rtac allI 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   301
        (stac strict_fapp1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   302
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   303
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   304
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   305
        (res_inst_tac [("s","TT"),("t","b1`(iterate k g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   306
        (etac spec 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   307
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   308
        (rtac (iterate_Suc RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   309
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   310
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   311
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   312
val hoare_lemma18 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   313
"(! k. b1`(iterate k g x)=TT) ==> q`x = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   314
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   315
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   316
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   317
        (res_inst_tac [("F1","g"),("t","x")] (iterate_0 RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   318
        (etac (hoare_lemma17 RS spec) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   319
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   320
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   321
val hoare_lemma19 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   322
"(!k. (b1::'a->tr)`(iterate k g x)=TT) ==> b1`(UU::'a) = UU | (!y.b1`(y::'a)=TT)"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   323
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   324
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   325
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   326
        (rtac (flat_tr RS flat_codom) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   327
        (res_inst_tac [("t","x1")] (iterate_0 RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   328
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   329
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   330
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   331
val hoare_lemma20 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   332
"(! y. b1`(y::'a)=TT) ==> !k.q`(iterate k g (x::'a)) = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   333
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   334
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   335
        (cut_facts_tac prems 1),
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents: 2033
diff changeset
   336
        (rtac (q_def RS def_fix_ind) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   337
        (rtac adm_all 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   338
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   339
        (rtac adm_eq 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   340
        (cont_tacR 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   341
        (rtac allI 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   342
        (stac strict_fapp1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   343
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   344
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   345
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   346
        (res_inst_tac [("s","TT"),("t","b1`(iterate k g (x::'a))")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   347
        (etac spec 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   348
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   349
        (rtac (iterate_Suc RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   350
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   351
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   352
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   353
val hoare_lemma21 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   354
"(! y. b1`(y::'a)=TT) ==> q`(x::'a) = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   355
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   356
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   357
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   358
        (res_inst_tac [("F1","g"),("t","x")] (iterate_0 RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   359
        (etac (hoare_lemma20 RS spec) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   360
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   361
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   362
val hoare_lemma22 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   363
"b1`(UU::'a)=UU ==> q`(UU::'a) = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   364
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   365
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   366
        (cut_facts_tac prems 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   367
        (stac q_def3 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   368
        (asm_simp_tac HOLCF_ss 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   369
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   370
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   371
(* -------- results about q for case (? k. b1`(iterate k g x) ~= TT) ------- *)
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   372
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   373
val hoare_lemma25 = (hoare_lemma8 RS (hoare_lemma24 RS mp) );
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   374
(* 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   375
val hoare_lemma25 = "[| ? k. b1`(iterate k g ?x1) ~= TT;
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   376
    Suc ?k3 = Least(%n. b1`(iterate n g ?x1) ~= TT) |] ==>
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   377
 q`(iterate ?k3 g ?x1) = q`?x1" : thm
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   378
*)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   379
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   380
val hoare_lemma26 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   381
"(? n. b1`(iterate n g x)~=TT) ==>\
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   382
\ k=Least(%n. b1`(iterate n g x) ~= TT) & b1`(iterate k g x) =FF \
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   383
\ --> q`x = q`(iterate k g x)"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   384
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   385
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   386
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   387
        (res_inst_tac [("n","k")] natE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   388
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   389
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   390
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   391
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   392
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   393
        (etac conjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   394
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   395
        (rtac (hoare_lemma25 RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   396
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   397
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   398
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   399
        (rtac q_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   400
        (res_inst_tac [("s","TT"),("t","b1`(iterate xa g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   401
        (rtac (hoare_lemma8 RS spec RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   402
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   403
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   404
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   405
        (simp_tac HOLCF_ss 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   406
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   407
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   408
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   409
val hoare_lemma27 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   410
"(? n. b1`(iterate n g x) ~= TT) ==>\
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1619
diff changeset
   411
\ k=Least(%n. b1`(iterate n g x)~=TT) & b1`(iterate k g x)=UU \
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   412
\ --> q`x = UU"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   413
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   414
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   415
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   416
        (res_inst_tac [("n","k")] natE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   417
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   418
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   419
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   420
        (etac conjE 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   421
        (stac q_def3 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   422
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   423
        (hyp_subst_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   424
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   425
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   426
        (etac conjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   427
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   428
        (rtac (hoare_lemma25 RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   429
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   430
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   431
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   432
        (rtac q_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   433
        (res_inst_tac [("s","TT"),("t","b1`(iterate xa g x)")] ssubst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   434
        (rtac (hoare_lemma8 RS spec RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   435
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   436
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   437
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   438
        (asm_simp_tac HOLCF_ss 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   439
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   440
        (rtac q_def3 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   441
        (asm_simp_tac HOLCF_ss 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   442
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   443
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   444
(* ------- (! k. b1`(iterate k g x)=TT) ==> q o p = q   ----- *)
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   445
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   446
val hoare_lemma23 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   447
"(! k. b1`(iterate k g x)=TT) ==> q`(p`x) = q`x"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   448
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   449
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   450
        (cut_facts_tac prems 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   451
        (stac hoare_lemma16 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   452
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   453
        (rtac (hoare_lemma19 RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   454
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   455
        (stac hoare_lemma18 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   456
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   457
        (stac hoare_lemma22 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   458
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   459
        (rtac refl 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   460
        (stac hoare_lemma21 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   461
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   462
        (stac hoare_lemma21 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   463
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   464
        (rtac refl 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   465
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   466
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   467
(* ------------  ? k. b1~(iterate k g x) ~= TT ==> q o p = q   ----- *)
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   468
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   469
val hoare_lemma29 = prove_goal Hoare.thy 
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 1043
diff changeset
   470
"? k. b1`(iterate k g x) ~= TT ==> q`(p`x) = q`x"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   471
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   472
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   473
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   474
        (rtac (hoare_lemma5 RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   475
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   476
        (rtac refl 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   477
        (stac (hoare_lemma11 RS mp) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   478
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   479
        (rtac conjI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   480
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   481
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   482
        (rtac (hoare_lemma26 RS mp RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   483
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   484
        (rtac conjI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   485
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   486
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   487
        (rtac refl 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   488
        (stac (hoare_lemma12 RS mp) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   489
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   490
        (rtac conjI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   491
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   492
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   493
        (stac hoare_lemma22 1),
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   494
        (stac hoare_lemma28 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   495
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   496
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   497
        (rtac sym 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   498
        (stac (hoare_lemma27 RS mp) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   499
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   500
        (rtac conjI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   501
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   502
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   503
        (rtac refl 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   504
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   505
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   506
(* ------ the main prove q o p = q ------ *)
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   507
1043
ffa68eb2730b adjusted HOLCF for new hyp_subst_tac
regensbu
parents: 892
diff changeset
   508
val hoare_main = prove_goal Hoare.thy "q oo p = q"
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   509
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   510
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   511
        (rtac ext_cfun 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   512
        (stac cfcomp2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   513
        (rtac (hoare_lemma3 RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   514
        (etac hoare_lemma23 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   515
        (etac hoare_lemma29 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1274
diff changeset
   516
        ]);
244
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   517
929fc2c63bd0 HOLCF examples
nipkow
parents:
diff changeset
   518