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