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