src/HOLCF/IOA/meta_theory/Sequence.ML
author mueller
Thu, 12 Jun 1997 16:47:15 +0200
changeset 3433 2de17c994071
parent 3361 1877e333f66c
child 3457 a8ab7c64817c
permissions -rw-r--r--
added deadlock freedom, polished definitions and proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     1
(*  Title:      HOLCF/IOA/meta_theory/Sequence.ML
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
     2
    ID:         $Id$
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     3
    Author:     Olaf M"uller
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
    Copyright   1996  TU Muenchen
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     5
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     6
Theorems about Sequences over flat domains with lifted elements
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     7
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     8
*)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     9
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    10
(* FIX: Put into Fix.ML to adm_lemmas !!! *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    11
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    12
goal thy "!! P. [| adm (%x. P x --> Q x); adm (%x.Q x --> P x) |] \
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    13
\           ==> adm (%x. P x = Q x)";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    14
by (res_inst_tac [("P2","(%x.(P x --> Q x) & (Q x --> P x))")] (adm_cong RS iffD1) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    15
by (Fast_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    16
be adm_conj 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    17
ba 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    18
qed"adm_iff";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    19
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    20
Addsimps [adm_iff];
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    21
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    22
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    23
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    24
Addsimps [andalso_and,andalso_or];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    25
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    26
(* ----------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    27
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    28
section "recursive equations of operators";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    29
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    30
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    31
(*                               Map                                *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    32
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    33
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    34
goal thy "Map f`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    35
by (simp_tac (!simpset addsimps [Map_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    36
qed"Map_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    37
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    38
goal thy "Map f`nil =nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    39
by (simp_tac (!simpset addsimps [Map_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    40
qed"Map_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    41
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    42
goal thy "Map f`(x>>xs)=(f x) >> Map f`xs";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    43
by (simp_tac (!simpset addsimps [Map_def, Cons_def,flift2_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    44
qed"Map_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    45
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    46
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    47
(*                               Filter                             *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    48
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    49
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    50
goal thy "Filter P`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    51
by (simp_tac (!simpset addsimps [Filter_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    52
qed"Filter_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    53
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    54
goal thy "Filter P`nil =nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    55
by (simp_tac (!simpset addsimps [Filter_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    56
qed"Filter_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    57
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    58
goal thy "Filter P`(x>>xs)= (if P x then x>>(Filter P`xs) else Filter P`xs)"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    59
by (simp_tac (!simpset addsimps [Filter_def, Cons_def,flift2_def,If_and_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    60
qed"Filter_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    61
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    62
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    63
(*                               Forall                             *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    64
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    65
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    66
goal thy "Forall P UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    67
by (simp_tac (!simpset addsimps [Forall_def,sforall_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    68
qed"Forall_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    69
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    70
goal thy "Forall P nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    71
by (simp_tac (!simpset addsimps [Forall_def,sforall_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    72
qed"Forall_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    73
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    74
goal thy "Forall P (x>>xs)= (P x & Forall P xs)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    75
by (simp_tac (!simpset addsimps [Forall_def, sforall_def,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    76
                                 Cons_def,flift2_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    77
qed"Forall_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    78
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    79
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    80
(*                               Conc                               *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    81
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    82
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    83
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    84
goal thy "(x>>xs) @@ y = x>>(xs @@y)"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    85
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    86
qed"Conc_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    87
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    88
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    89
(*                               Takewhile                          *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    90
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    91
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    92
goal thy "Takewhile P`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    93
by (simp_tac (!simpset addsimps [Takewhile_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    94
qed"Takewhile_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    95
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    96
goal thy "Takewhile P`nil =nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    97
by (simp_tac (!simpset addsimps [Takewhile_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    98
qed"Takewhile_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    99
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   100
goal thy "Takewhile P`(x>>xs)= (if P x then x>>(Takewhile P`xs) else nil)"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   101
by (simp_tac (!simpset addsimps [Takewhile_def, Cons_def,flift2_def,If_and_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   102
qed"Takewhile_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   103
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   104
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   105
(*                               Dropwhile                          *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   106
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   107
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   108
goal thy "Dropwhile P`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   109
by (simp_tac (!simpset addsimps [Dropwhile_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   110
qed"Dropwhile_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   111
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   112
goal thy "Dropwhile P`nil =nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   113
by (simp_tac (!simpset addsimps [Dropwhile_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   114
qed"Dropwhile_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   115
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   116
goal thy "Dropwhile P`(x>>xs)= (if P x then Dropwhile P`xs else x>>xs)"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   117
by (simp_tac (!simpset addsimps [Dropwhile_def, Cons_def,flift2_def,If_and_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   118
qed"Dropwhile_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   119
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   120
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   121
(*                               Last                               *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   122
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   123
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   124
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   125
goal thy "Last`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   126
by (simp_tac (!simpset addsimps [Last_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   127
qed"Last_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   128
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   129
goal thy "Last`nil =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   130
by (simp_tac (!simpset addsimps [Last_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   131
qed"Last_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   132
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   133
goal thy "Last`(x>>xs)= (if xs=nil then Def x else Last`xs)"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   134
by (simp_tac (!simpset addsimps [Last_def, Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   135
by (res_inst_tac [("x","xs")] seq.cases 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   136
by (asm_simp_tac (!simpset setloop split_tac [expand_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   137
by (REPEAT (Asm_simp_tac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   138
qed"Last_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   139
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   140
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   141
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   142
(*                               Flat                               *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   143
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   144
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   145
goal thy "Flat`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   146
by (simp_tac (!simpset addsimps [Flat_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   147
qed"Flat_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   148
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   149
goal thy "Flat`nil =nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   150
by (simp_tac (!simpset addsimps [Flat_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   151
qed"Flat_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   152
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   153
goal thy "Flat`(x##xs)= x @@ (Flat`xs)"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   154
by (simp_tac (!simpset addsimps [Flat_def, Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   155
qed"Flat_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   156
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   157
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   158
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   159
(*                               Zip                                *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   160
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   161
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   162
goal thy "Zip = (LAM t1 t2. case t1 of \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   163
\               nil   => nil \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   164
\             | x##xs => (case t2 of \ 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   165
\                          nil => UU  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   166
\                        | y##ys => (case x of \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   167
\                                      Undef  => UU \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   168
\                                    | Def a => (case y of \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   169
\                                                  Undef => UU \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   170
\                                                | Def b => Def (a,b)##(Zip`xs`ys)))))";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   171
by (rtac trans 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   172
br fix_eq2 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   173
br Zip_def 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   174
br beta_cfun 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   175
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   176
qed"Zip_unfold";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   177
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   178
goal thy "Zip`UU`y =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   179
by (stac Zip_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   180
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   181
qed"Zip_UU1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   182
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   183
goal thy "!! x. x~=nil ==> Zip`x`UU =UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   184
by (stac Zip_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   185
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   186
by (res_inst_tac [("x","x")] seq.cases 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   187
by (REPEAT (Asm_full_simp_tac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   188
qed"Zip_UU2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   189
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   190
goal thy "Zip`nil`y =nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   191
by (stac Zip_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   192
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   193
qed"Zip_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   194
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   195
goal thy "Zip`(x>>xs)`nil= UU"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   196
by (stac Zip_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   197
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   198
qed"Zip_cons_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   199
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   200
goal thy "Zip`(x>>xs)`(y>>ys)= (x,y) >> Zip`xs`ys"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   201
br trans 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   202
by (stac Zip_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   203
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   204
(* FIX: Why Simp_tac 2 times. Does continuity in simpflication make job sometimes not 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   205
  completely ready ? *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   206
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   207
qed"Zip_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   208
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   209
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   210
Delsimps [sfilter_UU,sfilter_nil,sfilter_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   211
          smap_UU,smap_nil,smap_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   212
          sforall2_UU,sforall2_nil,sforall2_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   213
          slast_UU,slast_nil,slast_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   214
          stakewhile_UU, stakewhile_nil, stakewhile_cons, 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   215
          sdropwhile_UU, sdropwhile_nil, sdropwhile_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   216
          sflat_UU,sflat_nil,sflat_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   217
          szip_UU1,szip_UU2,szip_nil,szip_cons_nil,szip_cons];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   218
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   219
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   220
Addsimps [Filter_UU,Filter_nil,Filter_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   221
          Map_UU,Map_nil,Map_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   222
          Forall_UU,Forall_nil,Forall_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   223
          Last_UU,Last_nil,Last_cons,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   224
          Conc_cons,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   225
          Takewhile_UU, Takewhile_nil, Takewhile_cons, 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   226
          Dropwhile_UU, Dropwhile_nil, Dropwhile_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   227
          Zip_UU1,Zip_UU2,Zip_nil,Zip_cons_nil,Zip_cons];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   228
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   229
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   230
(*
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   231
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   232
Can Filter with HOL predicate directly be defined as fixpoint ?
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   233
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   234
goal thy "Filter2 P = (LAM tr. case tr of  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   235
 \         nil   => nil \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   236
 \       | x##xs => (case x of Undef => UU | Def y => \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   237
\                   (if P y then y>>(Filter2 P`xs) else Filter2 P`xs)))";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   238
by (rtac trans 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   239
br fix_eq2 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   240
br Filter2_def 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   241
br beta_cfun 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   242
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   243
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   244
is also possible, if then else has to be proven continuous and it would be nice if a case for 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   245
Seq would be available.
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   246
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   247
*)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   248
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   249
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   250
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   251
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   252
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   253
section "Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   254
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   255
goal thy "a>>s = (Def a)##s";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   256
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   257
qed"Cons_def2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   258
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   259
goal thy "x = UU | x = nil | (? a s. x = a >> s)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   260
by (simp_tac (!simpset addsimps [Cons_def2]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   261
by (cut_facts_tac [seq.exhaust] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   262
by (fast_tac (HOL_cs addDs [not_Undef_is_Def RS iffD1]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   263
qed"Seq_exhaust";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   264
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   265
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   266
goal thy "!!P. [| x = UU ==> P; x = nil ==> P; !!a s. x = a >> s  ==> P |] ==> P";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   267
by (cut_inst_tac [("x","x")] Seq_exhaust 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   268
be disjE 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   269
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   270
be disjE 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   271
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   272
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   273
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   274
qed"Seq_cases";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   275
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   276
fun Seq_case_tac s i = res_inst_tac [("x",s)] Seq_cases i
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   277
	  THEN hyp_subst_tac i THEN hyp_subst_tac (i+1) THEN hyp_subst_tac (i+2);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   278
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   279
(* on a>>s only simp_tac, as full_simp_tac is uncomplete and often causes errors *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   280
fun Seq_case_simp_tac s i = Seq_case_tac s i THEN Asm_simp_tac (i+2)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   281
                                             THEN Asm_full_simp_tac (i+1)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   282
                                             THEN Asm_full_simp_tac i;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   283
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   284
goal thy "a>>s ~= UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   285
by (stac Cons_def2 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   286
by (resolve_tac seq.con_rews 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   287
br Def_not_UU 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   288
qed"Cons_not_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   289
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   290
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   291
goal thy "~(a>>x) << UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   292
by (rtac notI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   293
by (dtac antisym_less 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   294
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   295
by (asm_full_simp_tac (!simpset addsimps [Cons_not_UU]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   296
qed"Cons_not_less_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   297
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   298
goal thy "~a>>s << nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   299
by (stac Cons_def2 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   300
by (resolve_tac seq.rews 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   301
br Def_not_UU 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   302
qed"Cons_not_less_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   303
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   304
goal thy "a>>s ~= nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   305
by (stac Cons_def2 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   306
by (resolve_tac seq.rews 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   307
qed"Cons_not_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   308
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   309
goal thy "nil ~= a>>s";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   310
by (simp_tac (!simpset addsimps [Cons_def2]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   311
qed"Cons_not_nil2";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   312
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   313
goal thy "(a>>s = b>>t) = (a = b & s = t)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   314
by (simp_tac (HOL_ss addsimps [Cons_def2]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   315
by (stac (hd lift.inject RS sym) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   316
back(); back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   317
by (rtac scons_inject_eq 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   318
by (REPEAT(rtac Def_not_UU 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   319
qed"Cons_inject_eq";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   320
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   321
goal thy "(a>>s<<b>>t) = (a = b & s<<t)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   322
by (simp_tac (!simpset addsimps [Cons_def2]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   323
by (stac (Def_inject_less_eq RS sym) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   324
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   325
by (rtac iffI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   326
(* 1 *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   327
by (etac (hd seq.inverts) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   328
by (REPEAT(rtac Def_not_UU 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   329
(* 2 *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   330
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   331
by (etac conjE 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   332
by (etac monofun_cfun_arg 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   333
qed"Cons_inject_less_eq";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   334
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   335
goal thy "seq_take (Suc n)`(a>>x) = a>> (seq_take n`x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   336
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   337
qed"seq_take_Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   338
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   339
Addsimps [Cons_not_nil2,Cons_inject_eq,Cons_inject_less_eq,seq_take_Cons,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   340
          Cons_not_UU,Cons_not_less_UU,Cons_not_less_nil,Cons_not_nil];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   341
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   342
(* Instead of adding UU_neq_Cons every equation UU~=x could be changed to x~=UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   343
goal thy "UU ~= x>>xs";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   344
by (res_inst_tac [("s1","UU"),("t1","x>>xs")]  (sym RS rev_contrapos) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   345
by (REPEAT (Simp_tac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   346
qed"UU_neq_Cons";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   347
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   348
Addsimps [UU_neq_Cons];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   349
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   350
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   351
(* ----------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   352
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   353
section "induction";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   354
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   355
goal thy "!! P. [| adm P; P UU; P nil; !! a s. P s ==> P (a>>s)|] ==> P x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   356
be seq.ind 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   357
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   358
by (def_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   359
by (asm_full_simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   360
qed"Seq_induct";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   361
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   362
goal thy "!! P.[|P UU;P nil; !! a s. P s ==> P(a>>s) |]  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   363
\               ==> seq_finite x --> P x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   364
be seq_finite_ind 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   365
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   366
by (def_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   367
by (asm_full_simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   368
qed"Seq_FinitePartial_ind";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   369
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   370
goal thy "!! P.[| Finite x; P nil; !! a s. [| Finite s; P s|] ==> P (a>>s) |] ==> P x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   371
be sfinite.induct 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   372
ba 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   373
by (def_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   374
by (asm_full_simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   375
qed"Seq_Finite_ind"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   376
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   377
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   378
(* rws are definitions to be unfolded for admissibility check *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   379
fun Seq_induct_tac s rws i = res_inst_tac [("x",s)] Seq_induct i
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   380
                         THEN (REPEAT_DETERM (CHANGED (Asm_simp_tac (i+1))))
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   381
                         THEN simp_tac (!simpset addsimps rws) i;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   382
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   383
fun Seq_Finite_induct_tac i = etac Seq_Finite_ind i
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   384
                              THEN (REPEAT_DETERM (CHANGED (Asm_simp_tac i)));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   385
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   386
fun pair_tac s = res_inst_tac [("p",s)] PairE
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   387
			  THEN' hyp_subst_tac THEN' Asm_full_simp_tac;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   388
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   389
(* induction on a sequence of pairs with pairsplitting and simplification *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   390
fun pair_induct_tac s rws i = 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   391
           res_inst_tac [("x",s)] Seq_induct i 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   392
           THEN pair_tac "a" (i+3) 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   393
           THEN (REPEAT_DETERM (CHANGED (Simp_tac (i+1)))) 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   394
           THEN simp_tac (!simpset addsimps rws) i;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   395
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   396
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   397
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   398
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   399
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   400
section "HD,TL";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   401
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   402
goal thy "HD`(x>>y) = Def x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   403
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   404
qed"HD_Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   405
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   406
goal thy "TL`(x>>y) = y";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   407
by (simp_tac (!simpset addsimps [Cons_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   408
qed"TL_Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   409
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   410
Addsimps [HD_Cons,TL_Cons];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   411
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   412
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   413
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   414
section "Finite, Partial, Infinite";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   415
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   416
goal thy "Finite (a>>xs) = Finite xs";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   417
by (simp_tac (!simpset addsimps [Cons_def2,Finite_cons]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   418
qed"Finite_Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   419
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   420
Addsimps [Finite_Cons];
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   421
goal thy "!! x. Finite (x::'a Seq) ==> Finite y --> Finite (x@@y)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   422
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   423
qed"FiniteConc_1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   424
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   425
goal thy "!! z. Finite (z::'a Seq) ==> !x y. z= x@@y --> (Finite x & Finite y)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   426
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   427
(* nil*)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   428
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   429
by (Seq_case_simp_tac "x" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   430
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   431
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   432
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   433
(* cons *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   434
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   435
by (Seq_case_simp_tac "x" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   436
by (Seq_case_simp_tac "y" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   437
by (SELECT_GOAL (auto_tac (!claset,!simpset))1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   438
by (eres_inst_tac [("x","sa")] allE 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   439
by (eres_inst_tac [("x","y")] allE 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   440
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   441
qed"FiniteConc_2";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   442
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   443
goal thy "Finite(x@@y) = (Finite (x::'a Seq) & Finite y)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   444
by (rtac iffI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   445
be (FiniteConc_2 RS spec RS spec RS mp) 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   446
br refl 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   447
br (FiniteConc_1 RS mp) 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   448
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   449
qed"FiniteConc";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   450
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   451
Addsimps [FiniteConc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   452
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   453
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   454
goal thy "!! s. Finite s ==> Finite (Map f`s)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   455
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   456
qed"FiniteMap1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   457
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   458
goal thy "!! s. Finite s ==> ! t. (s = Map f`t) --> Finite t";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   459
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   460
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   461
by (Seq_case_simp_tac "t" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   462
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   463
(* main case *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   464
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   465
by (Seq_case_simp_tac "t" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   466
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   467
qed"FiniteMap2";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   468
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   469
goal thy "Finite (Map f`s) = Finite s";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   470
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   471
be (FiniteMap2 RS spec RS mp) 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   472
br refl 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   473
be FiniteMap1 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   474
qed"Map2Finite";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   475
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   476
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   477
goal thy "!! s. Finite s ==> Finite (Filter P`s)";
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   478
by (Seq_Finite_induct_tac 1);
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   479
by (asm_simp_tac (!simpset setloop split_tac [expand_if]) 1);
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   480
qed"FiniteFilter";
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   481
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   482
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   483
(* ----------------------------------------------------------------------------------- *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   484
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   485
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   486
section "admissibility";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   487
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   488
(* Finite x is proven to be adm: Finite_flat shows that there are only chains of length one.
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   489
   Then the assumption that an _infinite_ chain exists (from admI) is set to a contradiction 
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   490
   to Finite_flat *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   491
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   492
goal thy "!! (x:: 'a Seq). Finite x ==> !y. Finite (y:: 'a Seq) & x<<y --> x=y";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   493
by (Seq_Finite_induct_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   494
by (strip_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   495
be conjE 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   496
be nil_less_is_nil 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   497
(* main case *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   498
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   499
by (Seq_case_simp_tac "y" 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   500
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   501
qed_spec_mp"Finite_flat";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   502
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   503
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   504
goal thy "adm(%(x:: 'a Seq).Finite x)";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   505
br admI 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   506
by (eres_inst_tac [("x","0")] allE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   507
back();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   508
be exE 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   509
by (REPEAT (etac conjE 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   510
by (res_inst_tac [("x","0")] allE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   511
ba 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   512
by (eres_inst_tac [("x","j")] allE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   513
by (cut_inst_tac [("x","Y 0"),("y","Y j")] Finite_flat 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   514
(* Generates a contradiction in subgoal 3 *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   515
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   516
qed"adm_Finite";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   517
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   518
Addsimps [adm_Finite];
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   519
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   520
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   521
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   522
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   523
section "Conc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   524
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   525
goal thy "!! x::'a Seq. Finite x ==> ((x @@ y) = (x @@ z)) = (y = z)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   526
by (Seq_Finite_induct_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   527
qed"Conc_cong";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   528
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   529
goal thy "(x @@ y) @@ z = (x::'a Seq) @@ y @@ z";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   530
by (Seq_induct_tac "x" [] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   531
qed"Conc_assoc";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   532
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   533
goal thy "s@@ nil = s";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   534
by (res_inst_tac[("x","s")] seq.ind 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   535
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   536
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   537
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   538
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   539
qed"nilConc";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   540
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   541
Addsimps [nilConc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   542
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   543
(* FIX: should be same as nil_is_Conc2 when all nils are turned to right side !! *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   544
goal thy "(nil = x @@ y) = ((x::'a Seq)= nil & y = nil)";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   545
by (Seq_case_simp_tac "x" 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   546
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   547
qed"nil_is_Conc";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   548
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   549
goal thy "(x @@ y = nil) = ((x::'a Seq)= nil & y = nil)";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   550
by (Seq_case_simp_tac "x" 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   551
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   552
qed"nil_is_Conc2";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   553
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   554
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   555
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   556
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   557
section "Last";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   558
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   559
goal thy "!! s.Finite s ==> s~=nil --> Last`s~=UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   560
by (Seq_Finite_induct_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   561
by (asm_simp_tac (!simpset setloop split_tac [expand_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   562
qed"Finite_Last1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   563
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   564
goal thy "!! s. Finite s ==> Last`s=UU --> s=nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   565
by (Seq_Finite_induct_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   566
by (asm_simp_tac (!simpset setloop split_tac [expand_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   567
by (fast_tac HOL_cs 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   568
qed"Finite_Last2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   569
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   570
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   571
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   572
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   573
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   574
section "Filter, Conc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   575
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   576
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   577
goal thy "Filter P`(Filter Q`s) = Filter (%x. P x & Q x)`s";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   578
by (Seq_induct_tac "s" [Filter_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   579
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   580
qed"FilterPQ";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   581
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   582
goal thy "Filter P`(x @@ y) = (Filter P`x @@ Filter P`y)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   583
by (simp_tac (!simpset addsimps [Filter_def,sfiltersconc]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   584
qed"FilterConc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   585
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   586
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   587
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   588
section "Map";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   589
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   590
goal thy "Map f`(Map g`s) = Map (f o g)`s";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   591
by (Seq_induct_tac "s" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   592
qed"MapMap";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   593
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   594
goal thy "Map f`(x@@y) = (Map f`x) @@ (Map f`y)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   595
by (Seq_induct_tac "x" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   596
qed"MapConc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   597
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   598
goal thy "Filter P`(Map f`x) = Map f`(Filter (P o f)`x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   599
by (Seq_induct_tac "x" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   600
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   601
qed"MapFilter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   602
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   603
goal thy "nil = (Map f`s) --> s= nil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   604
by (Seq_case_simp_tac "s" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   605
qed"nilMap";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   606
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   607
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   608
goal thy "Forall P (Map f`s) = Forall (P o f) s";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   609
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   610
qed"ForallMap";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   611
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   612
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   613
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   614
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   615
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   616
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   617
section "Forall";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   618
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   619
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   620
goal thy "Forall P ys & (! x. P x --> Q x) \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   621
\         --> Forall Q ys";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   622
by (Seq_induct_tac "ys" [Forall_def,sforall_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   623
qed"ForallPForallQ1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   624
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   625
bind_thm ("ForallPForallQ",impI RSN (2,allI RSN (2,conjI RS (ForallPForallQ1 RS mp))));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   626
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   627
goal thy "(Forall P x & Forall P y) --> Forall P (x @@ y)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   628
by (Seq_induct_tac "x" [Forall_def,sforall_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   629
qed"Forall_Conc_impl";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   630
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   631
goal thy "!! x. Finite x ==> Forall P (x @@ y) = (Forall P x & Forall P y)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   632
by (Seq_Finite_induct_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   633
qed"Forall_Conc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   634
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   635
Addsimps [Forall_Conc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   636
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   637
goal thy "Forall P s  --> Forall P (TL`s)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   638
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   639
qed"ForallTL1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   640
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   641
bind_thm ("ForallTL",ForallTL1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   642
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   643
goal thy "Forall P s  --> Forall P (Dropwhile Q`s)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   644
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   645
by (asm_full_simp_tac (!simpset setloop (split_tac [expand_if])) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   646
qed"ForallDropwhile1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   647
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   648
bind_thm ("ForallDropwhile",ForallDropwhile1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   649
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   650
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   651
(* only admissible in t, not if done in s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   652
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   653
goal thy "! s. Forall P s --> t<<s --> Forall P t";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   654
by (Seq_induct_tac "t" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   655
by (strip_tac 1); 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   656
by (Seq_case_simp_tac "sa" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   657
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   658
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   659
qed"Forall_prefix";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   660
 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   661
bind_thm ("Forall_prefixclosed",Forall_prefix RS spec RS mp RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   662
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   663
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   664
goal thy "!! h. [| Finite h; Forall P s; s= h @@ t |] ==> Forall P t";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   665
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   666
qed"Forall_postfixclosed";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   667
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   668
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   669
goal thy "((! x. P x --> (Q x = R x)) & Forall P tr) --> Filter Q`tr = Filter R`tr";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   670
by (Seq_induct_tac "tr" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   671
qed"ForallPFilterQR1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   672
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   673
bind_thm("ForallPFilterQR",allI RS (conjI RS (ForallPFilterQR1 RS mp)));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   674
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   675
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   676
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   677
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   678
section "Forall, Filter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   679
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   680
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   681
goal thy "Forall P (Filter P`x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   682
by (simp_tac (!simpset addsimps [Filter_def,Forall_def,forallPsfilterP]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   683
qed"ForallPFilterP";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   684
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   685
(* holds also in other direction, then equal to forallPfilterP *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   686
goal thy "Forall P x --> Filter P`x = x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   687
by (Seq_induct_tac "x" [Forall_def,sforall_def,Filter_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   688
qed"ForallPFilterPid1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   689
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   690
bind_thm(" ForallPFilterPid",ForallPFilterPid1 RS mp);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   691
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   692
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   693
(* holds also in other direction *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   694
goal thy "!! ys . Finite ys ==> \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   695
\   Forall (%x. ~P x) ys --> Filter P`ys = nil ";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   696
by (Seq_Finite_induct_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   697
qed"ForallnPFilterPnil1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   698
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   699
bind_thm ("ForallnPFilterPnil",ForallnPFilterPnil1 RS mp);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   700
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   701
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   702
(* holds also in other direction *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   703
goal thy   "!! P. ~Finite ys & Forall (%x. ~P x) ys \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   704
\                  --> Filter P`ys = UU ";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   705
by (Seq_induct_tac "ys" [Forall_def,sforall_def] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   706
qed"ForallnPFilterPUU1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   707
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   708
bind_thm ("ForallnPFilterPUU",conjI RS (ForallnPFilterPUU1 RS mp));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   709
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   710
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   711
(* inverse of ForallnPFilterPnil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   712
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   713
goal thy "!! ys . Filter P`ys = nil --> \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   714
\   (Forall (%x. ~P x) ys & Finite ys)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   715
by (res_inst_tac[("x","ys")] Seq_induct 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   716
(* adm *)
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   717
(* FIX: not admissible, search other proof!! *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   718
br adm_all 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   719
(* base cases *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   720
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   721
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   722
(* main case *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   723
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   724
qed"FilternPnilForallP1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   725
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   726
bind_thm ("FilternPnilForallP",FilternPnilForallP1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   727
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   728
(* inverse of ForallnPFilterPUU. proved by 2 lemmas because of adm problems *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   729
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   730
goal thy "!! ys. Finite ys ==> Filter P`ys ~= UU";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   731
by (Seq_Finite_induct_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   732
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   733
qed"FilterUU_nFinite_lemma1";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   734
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   735
goal thy "~ Forall (%x. ~P x) ys --> Filter P`ys ~= UU";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   736
by (Seq_induct_tac "ys" [Forall_def,sforall_def] 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   737
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   738
qed"FilterUU_nFinite_lemma2";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   739
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   740
goal thy   "!! P. Filter P`ys = UU ==> \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   741
\                (Forall (%x. ~P x) ys  & ~Finite ys)";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   742
by (rtac conjI 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   743
by (cut_inst_tac [] (FilterUU_nFinite_lemma2 RS mp COMP rev_contrapos) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   744
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   745
by (blast_tac (!claset addSDs [FilterUU_nFinite_lemma1]) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   746
qed"FilternPUUForallP";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   747
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   748
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   749
goal thy  "!! Q P.[| Forall Q ys; Finite ys; !!x. Q x ==> ~P x|] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   750
\   ==> Filter P`ys = nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   751
be ForallnPFilterPnil 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   752
be ForallPForallQ 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   753
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   754
qed"ForallQFilterPnil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   755
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   756
goal thy "!! Q P. [| ~Finite ys; Forall Q ys;  !!x. Q x ==> ~P x|] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   757
\   ==> Filter P`ys = UU ";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   758
be ForallnPFilterPUU 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   759
be ForallPForallQ 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   760
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   761
qed"ForallQFilterPUU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   762
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   763
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   764
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   765
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   766
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   767
section "Takewhile, Forall, Filter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   768
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   769
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   770
goal thy "Forall P (Takewhile P`x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   771
by (simp_tac (!simpset addsimps [Forall_def,Takewhile_def,sforallPstakewhileP]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   772
qed"ForallPTakewhileP";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   773
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   774
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   775
goal thy"!! P. [| !!x. Q x==> P x |] ==> Forall P (Takewhile Q`x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   776
br ForallPForallQ 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   777
br ForallPTakewhileP 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   778
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   779
qed"ForallPTakewhileQ";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   780
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   781
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   782
goal thy  "!! Q P.[| Finite (Takewhile Q`ys); !!x. Q x ==> ~P x |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   783
\   ==> Filter P`(Takewhile Q`ys) = nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   784
be ForallnPFilterPnil 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   785
br ForallPForallQ 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   786
br ForallPTakewhileP 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   787
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   788
qed"FilterPTakewhileQnil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   789
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   790
goal thy "!! Q P. [| !!x. Q x ==> P x |] ==> \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   791
\            Filter P`(Takewhile Q`ys) = (Takewhile Q`ys)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   792
br ForallPFilterPid 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   793
br ForallPForallQ 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   794
br ForallPTakewhileP 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   795
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   796
qed"FilterPTakewhileQid";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   797
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   798
Addsimps [ForallPTakewhileP,ForallPTakewhileQ,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   799
          FilterPTakewhileQnil,FilterPTakewhileQid];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   800
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   801
goal thy "Takewhile P`(Takewhile P`s) = Takewhile P`s";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   802
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   803
by (asm_full_simp_tac (!simpset setloop (split_tac [expand_if])) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   804
qed"Takewhile_idempotent";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   805
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   806
goal thy "Forall P s --> Takewhile (%x.Q x | (~P x))`s = Takewhile Q`s";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   807
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   808
qed"ForallPTakewhileQnP";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   809
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   810
goal thy "Forall P s --> Dropwhile (%x.Q x | (~P x))`s = Dropwhile Q`s";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   811
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   812
qed"ForallPDropwhileQnP";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   813
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   814
Addsimps [ForallPTakewhileQnP RS mp, ForallPDropwhileQnP RS mp];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   815
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   816
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   817
goal thy "Forall P s --> Takewhile P`(s @@ t) = s @@ (Takewhile P`t)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   818
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   819
qed"TakewhileConc1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   820
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   821
bind_thm("TakewhileConc",TakewhileConc1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   822
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   823
goal thy "!! s.Finite s ==> Forall P s --> Dropwhile P`(s @@ t) = Dropwhile P`t";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   824
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   825
qed"DropwhileConc1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   826
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   827
bind_thm("DropwhileConc",DropwhileConc1 RS mp);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   828
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   829
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   830
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   831
(* ----------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   832
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   833
section "coinductive characterizations of Filter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   834
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   835
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   836
goal thy "HD`(Filter P`y) = Def x \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   837
\         --> y = ((Takewhile (%x. ~P x)`y) @@ (x >> TL`(Dropwhile (%a.~P a)`y)))  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   838
\             & Finite (Takewhile (%x. ~ P x)`y)  & P x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   839
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   840
(* FIX: pay attention: is only admissible with chain-finite package to be added to 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   841
        adm test *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   842
by (Seq_induct_tac "y" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   843
br adm_all 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   844
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   845
by (case_tac "P a" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   846
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   847
br impI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   848
by (hyp_subst_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   849
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   850
(* ~ P a *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   851
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   852
br impI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   853
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   854
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   855
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   856
ba 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   857
qed"divide_Seq_lemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   858
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   859
goal thy "!! x. (x>>xs) << Filter P`y  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   860
\   ==> y = ((Takewhile (%a. ~ P a)`y) @@ (x >> TL`(Dropwhile (%a.~P a)`y))) \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   861
\      & Finite (Takewhile (%a. ~ P a)`y)  & P x";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   862
br (divide_Seq_lemma RS mp) 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   863
by (dres_inst_tac [("fo","HD"),("xa","x>>xs")]  monofun_cfun_arg 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   864
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   865
qed"divide_Seq";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   866
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   867
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   868
goal thy "~Forall P y --> (? x. HD`(Filter (%a. ~P a)`y) = Def x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   869
(* FIX: pay attention: is only admissible with chain-finite package to be added to 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   870
        adm test *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   871
by (Seq_induct_tac "y" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   872
br adm_all 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   873
by (case_tac "P a" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   874
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   875
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   876
qed"nForall_HDFilter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   877
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   878
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   879
goal thy "!!y. ~Forall P y  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   880
\  ==> ? x. y= (Takewhile P`y @@ (x >> TL`(Dropwhile P`y))) & \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   881
\      Finite (Takewhile P`y) & (~ P x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   882
bd (nForall_HDFilter RS mp) 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   883
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   884
by (res_inst_tac [("x","x")] exI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   885
by (cut_inst_tac [("P1","%x. ~ P x")] (divide_Seq_lemma RS mp) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   886
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   887
qed"divide_Seq2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   888
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   889
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   890
goal thy  "!! y. ~Forall P y \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   891
\  ==> ? x bs rs. y= (bs @@ (x>>rs)) & Finite bs & Forall P bs & (~ P x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   892
by (cut_inst_tac [] divide_Seq2 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   893
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   894
qed"divide_Seq3";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   895
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   896
Addsimps [FilterPQ,FilterConc,Conc_cong];
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   897
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   898
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   899
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   900
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   901
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   902
section "take_lemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   903
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   904
goal thy "(!n. seq_take n`x = seq_take n`x') = (x = x')";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   905
by (rtac iffI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   906
br seq.take_lemma 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   907
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   908
qed"seq_take_lemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   909
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   910
goal thy 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   911
"  ! n. ((! k. k < n --> seq_take k`y1 = seq_take k`y2) \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   912
\   --> seq_take n`(x @@ (t>>y1)) =  seq_take n`(x @@ (t>>y2)))";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   913
by (Seq_induct_tac "x" [] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   914
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   915
by (res_inst_tac [("n","n")] natE 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   916
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   917
by (res_inst_tac [("n","n")] natE 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   918
auto();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   919
qed"take_reduction1";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   920
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   921
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   922
goal thy "!! n.[| x=y; s=t;!! k.k<n ==> seq_take k`y1 = seq_take k`y2|] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   923
\ ==> seq_take n`(x @@ (s>>y1)) =  seq_take n`(y @@ (t>>y2))";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   924
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   925
by (auto_tac (!claset addSIs [take_reduction1 RS spec RS mp],!simpset));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   926
qed"take_reduction";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   927
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   928
(* ------------------------------------------------------------------
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   929
          take-lemma and take_reduction for << instead of = 
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   930
   ------------------------------------------------------------------ *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   931
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   932
goal thy 
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   933
"  ! n. ((! k. k < n --> seq_take k`y1 << seq_take k`y2) \
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   934
\   --> seq_take n`(x @@ (t>>y1)) <<  seq_take n`(x @@ (t>>y2)))";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   935
by (Seq_induct_tac "x" [] 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   936
by (strip_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   937
by (res_inst_tac [("n","n")] natE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   938
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   939
by (res_inst_tac [("n","n")] natE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   940
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   941
qed"take_reduction_less1";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   942
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   943
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   944
goal thy "!! n.[| x=y; s=t;!! k.k<n ==> seq_take k`y1 << seq_take k`y2|] \
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   945
\ ==> seq_take n`(x @@ (s>>y1)) <<  seq_take n`(y @@ (t>>y2))";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   946
by (auto_tac (!claset addSIs [take_reduction_less1 RS spec RS mp],!simpset));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   947
qed"take_reduction_less";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   948
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   949
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   950
val prems = goalw thy [seq.take_def]
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   951
"(!! n. seq_take n`s1 << seq_take n`s2)  ==> s1<<s2";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   952
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   953
by (res_inst_tac [("t","s1")] (seq.reach RS subst)  1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   954
by (res_inst_tac [("t","s2")] (seq.reach RS subst)  1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   955
by (rtac (fix_def2 RS ssubst ) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   956
by (rtac (contlub_cfun_fun RS ssubst) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   957
by (rtac is_chain_iterate 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   958
by (rtac (contlub_cfun_fun RS ssubst) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   959
by (rtac is_chain_iterate 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   960
by (rtac lub_mono 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   961
by (rtac (is_chain_iterate RS ch2ch_fappL) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   962
by (rtac (is_chain_iterate RS ch2ch_fappL) 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   963
by (rtac allI 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   964
by (resolve_tac prems 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   965
qed"take_lemma_less1";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   966
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   967
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   968
goal thy "(!n. seq_take n`x << seq_take n`x') = (x << x')";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   969
by (rtac iffI 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   970
br take_lemma_less1 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   971
auto();
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   972
be monofun_cfun_arg 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   973
qed"take_lemma_less";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   974
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   975
(* ------------------------------------------------------------------
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   976
          take-lemma proof principles
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   977
   ------------------------------------------------------------------ *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   978
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   979
goal thy "!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   980
\           !! s1 s2 y. [| Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2)|] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   981
\                         ==> (f (s1 @@ y>>s2)) = (g (s1 @@ y>>s2)) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   982
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   983
by (case_tac "Forall Q x" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   984
by (auto_tac (!claset addSDs [divide_Seq3],!simpset));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   985
qed"take_lemma_principle1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   986
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   987
goal thy "!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   988
\           !! s1 s2 y. [| Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2)|] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   989
\                         ==> ! n. seq_take n`(f (s1 @@ y>>s2)) \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   990
\                                = seq_take n`(g (s1 @@ y>>s2)) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   991
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   992
by (case_tac "Forall Q x" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   993
by (auto_tac (!claset addSDs [divide_Seq3],!simpset));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   994
br seq.take_lemma 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   995
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   996
qed"take_lemma_principle2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   997
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   998
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   999
(* Note: in the following proofs the ordering of proof steps is very 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1000
         important, as otherwise either (Forall Q s1) would be in the IH as
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1001
         assumption (then rule useless) or it is not possible to strengthen 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1002
         the IH by doing a forall closure of the sequence t (then rule also useless).
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1003
         This is also the reason why the induction rule (less_induct or nat_induct) has to 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1004
         to be imbuilt into the rule, as induction has to be done early and the take lemma 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1005
         has to be used in the trivial direction afterwards for the (Forall Q x) case.  *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1006
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1007
goal thy 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1008
"!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1009
\        !! s1 s2 y n. [| ! t. A t --> seq_take n`(f t) = seq_take n`(g t);\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1010
\                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1011
\                         ==>   seq_take (Suc n)`(f (s1 @@ y>>s2)) \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1012
\                             = seq_take (Suc n)`(g (s1 @@ y>>s2)) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1013
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1014
br impI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1015
br seq.take_lemma 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1016
br mp 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1017
ba 2;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1018
by (res_inst_tac [("x","x")] spec 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1019
br nat_induct 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1020
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1021
br allI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1022
by (case_tac "Forall Q xa" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1023
by (SELECT_GOAL (auto_tac (!claset addSIs [seq_take_lemma RS iffD2 RS spec],
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1024
                           !simpset)) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1025
by (auto_tac (!claset addSDs [divide_Seq3],!simpset));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1026
qed"take_lemma_induct";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1027
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1028
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1029
goal thy 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1030
"!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1031
\        !! s1 s2 y n. [| ! t m. m < n --> A t --> seq_take m`(f t) = seq_take m`(g t);\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1032
\                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1033
\                         ==>   seq_take n`(f (s1 @@ y>>s2)) \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1034
\                             = seq_take n`(g (s1 @@ y>>s2)) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1035
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1036
br impI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1037
br seq.take_lemma 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1038
br mp 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1039
ba 2;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1040
by (res_inst_tac [("x","x")] spec 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1041
br less_induct 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1042
br allI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1043
by (case_tac "Forall Q xa" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1044
by (SELECT_GOAL (auto_tac (!claset addSIs [seq_take_lemma RS iffD2 RS spec],
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1045
                           !simpset)) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1046
by (auto_tac (!claset addSDs [divide_Seq3],!simpset));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1047
qed"take_lemma_less_induct";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1048
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1049
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1050
(*
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1051
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1052
goal thy 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1053
"!! Q. [|!! s h1 h2. [| Forall Q s; A s h1 h2|] ==> (f s h1 h2) = (g s h1 h2) ; \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1054
\  !! s1 s2 y n. [| ! t h1 h2 m. m < n --> (A t h1 h2) --> seq_take m`(f t h1 h2) = seq_take m`(g t h1 h2);\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1055
\                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) h1 h2|] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1056
\                         ==>   seq_take n`(f (s1 @@ y>>s2) h1 h2) \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1057
\                             = seq_take n`(g (s1 @@ y>>s2) h1 h2) |] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1058
\              ==> ! h1 h2. (A x h1 h2) --> (f x h1 h2)=(g x h1 h2)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1059
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1060
br seq.take_lemma 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1061
br mp 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1062
ba 2;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1063
by (res_inst_tac [("x","h2a")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1064
by (res_inst_tac [("x","h1a")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1065
by (res_inst_tac [("x","x")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1066
br less_induct 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1067
br allI 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1068
by (case_tac "Forall Q xa" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1069
by (SELECT_GOAL (auto_tac (!claset addSIs [seq_take_lemma RS iffD2 RS spec],
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1070
                           !simpset)) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1071
by (auto_tac (!claset addSDs [divide_Seq3],!simpset));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1072
qed"take_lemma_less_induct";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1073
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1074
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1075
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1076
goal thy 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1077
"!! Q. [|!! s. Forall Q s ==> P ((f s) = (g s)) ; \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1078
\        !! s1 s2 y n. [| ! t m. m < n --> P (seq_take m`(f t) = seq_take m`(g t));\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1079
\                         Forall Q s1; Finite s1; ~ Q y|] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1080
\                         ==>   P (seq_take n`(f (s1 @@ y>>s2)) \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1081
\                                   = seq_take n`(g (s1 @@ y>>s2))) |] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1082
\              ==> P ((f x)=(g x))";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1083
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1084
by (res_inst_tac [("t","f x = g x"),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1085
                  ("s","!n. seq_take n`(f x) = seq_take n`(g x)")] subst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1086
br seq_take_lemma 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1087
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1088
wie ziehe ich n durch P, d.h. evtl. ns in P muessen umbenannt werden.....
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1089
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1090
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1091
FIX
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1092
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1093
br less_induct 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1094
br allI 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1095
by (case_tac "Forall Q xa" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1096
by (SELECT_GOAL (auto_tac (!claset addSIs [seq_take_lemma RS iffD2 RS spec],
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1097
                           !simpset)) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1098
by (auto_tac (!claset addSDs [divide_Seq3],!simpset));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1099
qed"take_lemma_less_induct";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1100
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1101
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1102
*)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1103
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1104
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1105
goal thy 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1106
"!! Q. [| A UU  ==> (f UU) = (g UU) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1107
\         A nil ==> (f nil) = (g nil) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1108
\         !! s y n. [| ! t. A t --> seq_take n`(f t) = seq_take n`(g t);\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1109
\                    A (y>>s) |]   \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1110
\                    ==>   seq_take (Suc n)`(f (y>>s)) \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1111
\                        = seq_take (Suc n)`(g (y>>s)) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1112
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1113
br impI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1114
br seq.take_lemma 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1115
br mp 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1116
ba 2;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1117
by (res_inst_tac [("x","x")] spec 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1118
br nat_induct 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1119
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1120
br allI 1;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1121
by (Seq_case_simp_tac "xa" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1122
qed"take_lemma_in_eq_out";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1123
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1124
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1125
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1126
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1127
section "alternative take_lemma proofs";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1128
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1129
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1130
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1131
(*              Alternative Proof of FilterPQ                      *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1132
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1133
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1134
Delsimps [FilterPQ];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1135
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1136
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1137
(* In general: How to do this case without the same adm problems 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1138
   as for the entire proof ? *) 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1139
goal thy "Forall (%x.~(P x & Q x)) s \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1140
\         --> Filter P`(Filter Q`s) =\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1141
\             Filter (%x. P x & Q x)`s";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1142
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1143
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1144
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1145
qed"Filter_lemma1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1146
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1147
goal thy "!! s. Finite s ==>  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1148
\         (Forall (%x. (~P x) | (~ Q x)) s  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1149
\         --> Filter P`(Filter Q`s) = nil)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1150
by (Seq_Finite_induct_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1151
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1152
qed"Filter_lemma2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1153
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1154
goal thy "!! s. Finite s ==>  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1155
\         Forall (%x. (~P x) | (~ Q x)) s  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1156
\         --> Filter (%x.P x & Q x)`s = nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1157
by (Seq_Finite_induct_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1158
by (asm_full_simp_tac (!simpset setloop split_tac [expand_if] ) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1159
qed"Filter_lemma3";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1160
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1161
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1162
goal thy "Filter P`(Filter Q`s) = Filter (%x. P x & Q x)`s";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1163
by (res_inst_tac [("A1","%x.True") 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1164
                 ,("Q1","%x.~(P x & Q x)"),("x1","s")]
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1165
                 (take_lemma_induct RS mp) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1166
(* FIX: better support for A = %.True *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1167
by (Fast_tac 3);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1168
by (asm_full_simp_tac (!simpset addsimps [Filter_lemma1]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1169
by (asm_full_simp_tac (!simpset addsimps [Filter_lemma2,Filter_lemma3] 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1170
                                setloop split_tac [expand_if]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1171
qed"FilterPQ_takelemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1172
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1173
Addsimps [FilterPQ];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1174
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1175
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1176
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1177
(*              Alternative Proof of MapConc                       *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1178
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1179
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1180
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1181
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1182
goal thy "Map f`(x@@y) = (Map f`x) @@ (Map f`y)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1183
by (res_inst_tac [("A1","%x.True"),("x1","x")] (take_lemma_in_eq_out RS mp) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1184
auto();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1185
qed"MapConc_takelemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1186
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1187