src/HOLCF/IOA/meta_theory/Sequence.ML
author nipkow
Tue, 09 Jan 2001 15:36:30 +0100
changeset 10835 f4745d77e620
parent 9877 b2a62260f8ac
child 12028 52aa183c15bb
permissions -rw-r--r--
` -> $
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
10835
nipkow
parents: 9877
diff changeset
    21
Goal "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
10835
nipkow
parents: 9877
diff changeset
    25
Goal "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
10835
nipkow
parents: 9877
diff changeset
    29
Goal "Map f$(x>>xs)=(f x) >> Map f$xs";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    30
by (simp_tac (simpset() addsimps [Map_def, Consq_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
10835
nipkow
parents: 9877
diff changeset
    37
Goal "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
10835
nipkow
parents: 9877
diff changeset
    41
Goal "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
10835
nipkow
parents: 9877
diff changeset
    45
Goal "Filter P$(x>>xs)= (if P x then x>>(Filter P$xs) else Filter P$xs)"; 
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    46
by (simp_tac (simpset() addsimps [Filter_def, Consq_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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    53
Goal "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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    57
Goal "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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    61
Goal "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,
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    63
                                 Consq_def,flift2_def]) 1);
3071
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    71
Goal "(x>>xs) @@ y = x>>(xs @@y)"; 
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    72
by (simp_tac (simpset() addsimps [Consq_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
10835
nipkow
parents: 9877
diff changeset
    79
Goal "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
10835
nipkow
parents: 9877
diff changeset
    83
Goal "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
10835
nipkow
parents: 9877
diff changeset
    87
Goal "Takewhile P$(x>>xs)= (if P x then x>>(Takewhile P$xs) else nil)"; 
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    88
by (simp_tac (simpset() addsimps [Takewhile_def, Consq_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
10835
nipkow
parents: 9877
diff changeset
    95
Goal "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
10835
nipkow
parents: 9877
diff changeset
    99
Goal "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
10835
nipkow
parents: 9877
diff changeset
   103
Goal "Dropwhile P$(x>>xs)= (if P x then Dropwhile P$xs else x>>xs)"; 
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   104
by (simp_tac (simpset() addsimps [Dropwhile_def, Consq_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
10835
nipkow
parents: 9877
diff changeset
   112
Goal "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
10835
nipkow
parents: 9877
diff changeset
   116
Goal "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
10835
nipkow
parents: 9877
diff changeset
   120
Goal "Last$(x>>xs)= (if xs=nil then Def x else Last$xs)"; 
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   121
by (simp_tac (simpset() addsimps [Last_def, Consq_def]) 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
   122
by (res_inst_tac [("x","xs")] seq.casedist 1);
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4721
diff changeset
   123
by (Asm_simp_tac 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
10835
nipkow
parents: 9877
diff changeset
   132
Goal "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
10835
nipkow
parents: 9877
diff changeset
   136
Goal "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
10835
nipkow
parents: 9877
diff changeset
   140
Goal "Flat$(x##xs)= x @@ (Flat$xs)"; 
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   141
by (simp_tac (simpset() addsimps [Flat_def, Consq_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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   149
Goal "Zip = (LAM t1 t2. case t1 of \
3071
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 \
10835
nipkow
parents: 9877
diff changeset
   157
\                                                | Def b => Def (a,b)##(Zip$xs$ys)))))";
3071
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
10835
nipkow
parents: 9877
diff changeset
   165
Goal "Zip$UU$y =UU";
3071
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
10835
nipkow
parents: 9877
diff changeset
   170
Goal "x~=nil ==> Zip$x$UU =UU";
3071
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
10835
nipkow
parents: 9877
diff changeset
   177
Goal "Zip$nil$y =nil";
3071
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
10835
nipkow
parents: 9877
diff changeset
   182
Goal "Zip$(x>>xs)$nil= UU"; 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   183
by (stac Zip_unfold 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   184
by (simp_tac (simpset() addsimps [Consq_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
10835
nipkow
parents: 9877
diff changeset
   187
Goal "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);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   191
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   192
qed"Zip_cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   193
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   194
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   195
Delsimps [sfilter_UU,sfilter_nil,sfilter_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   196
          smap_UU,smap_nil,smap_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   197
          sforall2_UU,sforall2_nil,sforall2_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   198
          slast_UU,slast_nil,slast_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   199
          stakewhile_UU, stakewhile_nil, stakewhile_cons, 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   200
          sdropwhile_UU, sdropwhile_nil, sdropwhile_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   201
          sflat_UU,sflat_nil,sflat_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   202
          szip_UU1,szip_UU2,szip_nil,szip_cons_nil,szip_cons];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   203
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   204
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   205
Addsimps [Filter_UU,Filter_nil,Filter_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   206
          Map_UU,Map_nil,Map_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   207
          Forall_UU,Forall_nil,Forall_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   208
          Last_UU,Last_nil,Last_cons,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   209
          Conc_cons,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   210
          Takewhile_UU, Takewhile_nil, Takewhile_cons, 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   211
          Dropwhile_UU, Dropwhile_nil, Dropwhile_cons,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   212
          Zip_UU1,Zip_UU2,Zip_nil,Zip_cons_nil,Zip_cons];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   213
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   214
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   215
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   216
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   217
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   218
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   219
section "Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   220
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   221
Goal "a>>s = (Def a)##s";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   222
by (simp_tac (simpset() addsimps [Consq_def]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   223
qed"Consq_def2";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   224
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   225
Goal "x = UU | x = nil | (? a s. x = a >> s)";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   226
by (simp_tac (simpset() addsimps [Consq_def2]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   227
by (cut_facts_tac [seq.exhaust] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   228
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
   229
qed"Seq_exhaust";
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   232
Goal "!!P. [| x = UU ==> P; x = nil ==> P; !!a s. x = a >> s  ==> P |] ==> P";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   233
by (cut_inst_tac [("x","x")] Seq_exhaust 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   234
by (etac disjE 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   235
by (Asm_full_simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   236
by (etac disjE 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   237
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   238
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   239
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   240
qed"Seq_cases";
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
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
   243
	  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
   244
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   245
(* 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
   246
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
   247
                                             THEN Asm_full_simp_tac (i+1)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   248
                                             THEN Asm_full_simp_tac i;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   249
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   250
Goal "a>>s ~= UU";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   251
by (stac Consq_def2 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   252
by (resolve_tac seq.con_rews 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   253
by (rtac Def_not_UU 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   254
qed"Cons_not_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   255
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   256
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   257
Goal "~(a>>x) << UU";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   258
by (rtac notI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   259
by (dtac antisym_less 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   260
by (Simp_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   261
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
   262
qed"Cons_not_less_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   263
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   264
Goal "~a>>s << nil";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   265
by (stac Consq_def2 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   266
by (resolve_tac seq.rews 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   267
by (rtac Def_not_UU 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   268
qed"Cons_not_less_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   269
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   270
Goal "a>>s ~= nil";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   271
by (stac Consq_def2 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   272
by (resolve_tac seq.rews 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   273
qed"Cons_not_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   274
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   275
Goal "nil ~= a>>s";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   276
by (simp_tac (simpset() addsimps [Consq_def2]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   277
qed"Cons_not_nil2";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   278
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   279
Goal "(a>>s = b>>t) = (a = b & s = t)";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   280
by (simp_tac (HOL_ss addsimps [Consq_def2]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   281
by (stac (hd lift.inject RS sym) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   282
back(); back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   283
by (rtac scons_inject_eq 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   284
by (REPEAT(rtac Def_not_UU 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   285
qed"Cons_inject_eq";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   286
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   287
Goal "(a>>s<<b>>t) = (a = b & s<<t)";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   288
by (simp_tac (simpset() addsimps [Consq_def2]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   289
by (stac (Def_inject_less_eq RS sym) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   290
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   291
by (rtac iffI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   292
(* 1 *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   293
by (etac (hd seq.inverts) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   294
by (REPEAT(rtac Def_not_UU 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   295
(* 2 *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   296
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   297
by (etac conjE 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   298
by (etac monofun_cfun_arg 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   299
qed"Cons_inject_less_eq";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   300
10835
nipkow
parents: 9877
diff changeset
   301
Goal "seq_take (Suc n)$(a>>x) = a>> (seq_take n$x)";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   302
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   303
qed"seq_take_Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   304
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   305
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
   306
          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
   307
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   308
(* Instead of adding UU_neq_Cons every equation UU~=x could be changed to x~=UU *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   309
Goal "UU ~= x>>xs";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   310
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
   311
by (REPEAT (Simp_tac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   312
qed"UU_neq_Cons";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   313
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   314
Addsimps [UU_neq_Cons];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   315
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   316
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   317
(* ----------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   318
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   319
section "induction";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   320
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   321
Goal "!! 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
   322
by (etac seq.ind 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   323
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   324
by (def_tac 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   325
by (asm_full_simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   326
qed"Seq_induct";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   327
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   328
Goal "!! P.[|P UU;P nil; !! a s. P s ==> P(a>>s) |]  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   329
\               ==> seq_finite x --> P x";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   330
by (etac seq_finite_ind 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   331
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   332
by (def_tac 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   333
by (asm_full_simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   334
qed"Seq_FinitePartial_ind";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   335
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   336
Goal "!! 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
   337
by (etac sfinite.induct 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   338
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   339
by (def_tac 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   340
by (asm_full_simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   341
qed"Seq_Finite_ind"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   342
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   343
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   344
(* rws are definitions to be unfolded for admissibility check *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   345
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
   346
                         THEN (REPEAT_DETERM (CHANGED (Asm_simp_tac (i+1))))
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   347
                         THEN simp_tac (simpset() addsimps rws) i;
3071
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
fun Seq_Finite_induct_tac i = etac Seq_Finite_ind i
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   350
                              THEN (REPEAT_DETERM (CHANGED (Asm_simp_tac i)));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   351
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   352
fun pair_tac s = res_inst_tac [("p",s)] PairE
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   353
			  THEN' hyp_subst_tac THEN' Asm_full_simp_tac;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   354
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   355
(* induction on a sequence of pairs with pairsplitting and simplification *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   356
fun pair_induct_tac s rws i = 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   357
           res_inst_tac [("x",s)] Seq_induct i 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   358
           THEN pair_tac "a" (i+3) 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   359
           THEN (REPEAT_DETERM (CHANGED (Simp_tac (i+1)))) 
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   360
           THEN simp_tac (simpset() addsimps rws) i;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   361
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   362
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
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   366
section "HD,TL";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   367
10835
nipkow
parents: 9877
diff changeset
   368
Goal "HD$(x>>y) = Def x";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   369
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   370
qed"HD_Cons";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   371
10835
nipkow
parents: 9877
diff changeset
   372
Goal "TL$(x>>y) = y";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   373
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   374
qed"TL_Cons";
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
Addsimps [HD_Cons,TL_Cons];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   377
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   378
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   379
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   380
section "Finite, Partial, Infinite";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   381
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   382
Goal "Finite (a>>xs) = Finite xs";
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
   383
by (simp_tac (simpset() addsimps [Consq_def2,Finite_cons]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   384
qed"Finite_Cons";
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
Addsimps [Finite_Cons];
6161
paulson
parents: 5976
diff changeset
   387
Goal "Finite (x::'a Seq) ==> Finite y --> Finite (x@@y)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   388
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   389
qed"FiniteConc_1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   390
6161
paulson
parents: 5976
diff changeset
   391
Goal "Finite (z::'a Seq) ==> !x y. z= x@@y --> (Finite x & Finite y)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   392
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   393
(* nil*)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   394
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   395
by (Seq_case_simp_tac "x" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   396
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   397
(* cons *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   398
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   399
by (Seq_case_simp_tac "x" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   400
by (Seq_case_simp_tac "y" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   401
by (SELECT_GOAL (auto_tac (claset(),simpset()))1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   402
by (eres_inst_tac [("x","sa")] allE 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   403
by (eres_inst_tac [("x","y")] allE 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   404
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   405
qed"FiniteConc_2";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   406
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   407
Goal "Finite(x@@y) = (Finite (x::'a Seq) & Finite y)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   408
by (rtac iffI 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   409
by (etac (FiniteConc_2 RS spec RS spec RS mp) 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   410
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   411
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
   412
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   413
qed"FiniteConc";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   414
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   415
Addsimps [FiniteConc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   416
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   417
10835
nipkow
parents: 9877
diff changeset
   418
Goal "Finite s ==> Finite (Map f$s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   419
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   420
qed"FiniteMap1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   421
10835
nipkow
parents: 9877
diff changeset
   422
Goal "Finite s ==> ! t. (s = Map f$t) --> Finite t";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   423
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   424
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   425
by (Seq_case_simp_tac "t" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   426
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   427
(* main case *)
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   428
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   429
by (Seq_case_simp_tac "t" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   430
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   431
qed"FiniteMap2";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   432
10835
nipkow
parents: 9877
diff changeset
   433
Goal "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
   434
by Auto_tac;
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   435
by (etac (FiniteMap2 RS spec RS mp) 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   436
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   437
by (etac FiniteMap1 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   438
qed"Map2Finite";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   439
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   440
10835
nipkow
parents: 9877
diff changeset
   441
Goal "Finite s ==> Finite (Filter P$s)";
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   442
by (Seq_Finite_induct_tac 1);
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   443
qed"FiniteFilter";
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   444
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   445
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   446
(* ----------------------------------------------------------------------------------- *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   447
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   448
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   449
section "admissibility";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   450
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   451
(* 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
   452
   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
   453
   to Finite_flat *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   454
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   455
Goal "!! (x:: 'a Seq). Finite x ==> !y. Finite (y:: 'a Seq) & x<<y --> x=y";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   456
by (Seq_Finite_induct_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   457
by (strip_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   458
by (etac conjE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   459
by (etac nil_less_is_nil 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   460
(* main case *)
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   461
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   462
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
   463
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   464
qed_spec_mp"Finite_flat";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   465
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   466
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   467
Goal "adm(%(x:: 'a Seq).Finite x)";
3461
7bf1e7c40a0c amdI -> admI2
nipkow
parents: 3457
diff changeset
   468
by (rtac admI2 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   469
by (eres_inst_tac [("x","0")] allE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   470
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   471
by (etac exE 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   472
by (REPEAT (etac conjE 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   473
by (res_inst_tac [("x","0")] allE 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   474
by (assume_tac 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   475
by (eres_inst_tac [("x","j")] allE 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   476
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
   477
(* 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
   478
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   479
qed"adm_Finite";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   480
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   481
Addsimps [adm_Finite];
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   482
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   483
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   484
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   485
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   486
section "Conc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   487
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   488
Goal "!! x::'a Seq. Finite x ==> ((x @@ y) = (x @@ z)) = (y = z)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   489
by (Seq_Finite_induct_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   490
qed"Conc_cong";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   491
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   492
Goal "(x @@ y) @@ z = (x::'a Seq) @@ y @@ z";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   493
by (Seq_induct_tac "x" [] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   494
qed"Conc_assoc";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   495
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   496
Goal "s@@ nil = s";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   497
by (res_inst_tac[("x","s")] seq.ind 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   498
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   499
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   500
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   501
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   502
qed"nilConc";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   503
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   504
Addsimps [nilConc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   505
5976
44290b71a85f tuning to assimiliate it with PhD;
mueller
parents: 5291
diff changeset
   506
(* should be same as nil_is_Conc2 when all nils are turned to right side !! *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   507
Goal "(nil = x @@ y) = ((x::'a Seq)= nil & y = nil)";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   508
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
   509
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   510
qed"nil_is_Conc";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   511
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   512
Goal "(x @@ y = nil) = ((x::'a Seq)= nil & y = nil)";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   513
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
   514
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   515
qed"nil_is_Conc2";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   516
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   517
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   518
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   519
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   520
section "Last";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   521
10835
nipkow
parents: 9877
diff changeset
   522
Goal "Finite s ==> s~=nil --> Last$s~=UU";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   523
by (Seq_Finite_induct_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   524
qed"Finite_Last1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   525
10835
nipkow
parents: 9877
diff changeset
   526
Goal "Finite s ==> Last$s=UU --> s=nil";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   527
by (Seq_Finite_induct_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   528
by (fast_tac HOL_cs 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   529
qed"Finite_Last2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   530
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   531
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   532
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   533
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   534
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   535
section "Filter, Conc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   536
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   537
10835
nipkow
parents: 9877
diff changeset
   538
Goal "Filter P$(Filter Q$s) = Filter (%x. P x & Q x)$s";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   539
by (Seq_induct_tac "s" [Filter_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   540
qed"FilterPQ";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   541
10835
nipkow
parents: 9877
diff changeset
   542
Goal "Filter P$(x @@ y) = (Filter P$x @@ Filter P$y)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   543
by (simp_tac (simpset() addsimps [Filter_def,sfiltersconc]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   544
qed"FilterConc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   545
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
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   548
section "Map";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   549
10835
nipkow
parents: 9877
diff changeset
   550
Goal "Map f$(Map g$s) = Map (f o g)$s";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   551
by (Seq_induct_tac "s" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   552
qed"MapMap";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   553
10835
nipkow
parents: 9877
diff changeset
   554
Goal "Map f$(x@@y) = (Map f$x) @@ (Map f$y)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   555
by (Seq_induct_tac "x" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   556
qed"MapConc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   557
10835
nipkow
parents: 9877
diff changeset
   558
Goal "Filter P$(Map f$x) = Map f$(Filter (P o f)$x)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   559
by (Seq_induct_tac "x" [] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   560
qed"MapFilter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   561
10835
nipkow
parents: 9877
diff changeset
   562
Goal "nil = (Map f$s) --> s= nil";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   563
by (Seq_case_simp_tac "s" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   564
qed"nilMap";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   565
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   566
10835
nipkow
parents: 9877
diff changeset
   567
Goal "Forall P (Map f$s) = Forall (P o f) s";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   568
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   569
qed"ForallMap";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   570
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   571
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   572
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   573
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   574
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   575
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   576
section "Forall";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   577
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   578
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   579
Goal "Forall P ys & (! x. P x --> Q x) \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   580
\         --> Forall Q ys";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   581
by (Seq_induct_tac "ys" [Forall_def,sforall_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   582
qed"ForallPForallQ1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   583
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   584
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
   585
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   586
Goal "(Forall P x & Forall P y) --> Forall P (x @@ y)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   587
by (Seq_induct_tac "x" [Forall_def,sforall_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   588
qed"Forall_Conc_impl";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   589
6161
paulson
parents: 5976
diff changeset
   590
Goal "Finite x ==> Forall P (x @@ y) = (Forall P x & Forall P y)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   591
by (Seq_Finite_induct_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   592
qed"Forall_Conc";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   593
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   594
Addsimps [Forall_Conc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   595
10835
nipkow
parents: 9877
diff changeset
   596
Goal "Forall P s  --> Forall P (TL$s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   597
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   598
qed"ForallTL1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   599
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   600
bind_thm ("ForallTL",ForallTL1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   601
10835
nipkow
parents: 9877
diff changeset
   602
Goal "Forall P s  --> Forall P (Dropwhile Q$s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   603
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   604
qed"ForallDropwhile1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   605
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   606
bind_thm ("ForallDropwhile",ForallDropwhile1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   607
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   608
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   609
(* only admissible in t, not if done in s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   610
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   611
Goal "! s. Forall P s --> t<<s --> Forall P t";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   612
by (Seq_induct_tac "t" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   613
by (strip_tac 1); 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   614
by (Seq_case_simp_tac "sa" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   615
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
   616
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   617
qed"Forall_prefix";
4681
a331c1f5a23e expand_if is now by default part of the simpset.
nipkow
parents: 4477
diff changeset
   618
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   619
bind_thm ("Forall_prefixclosed",Forall_prefix RS spec RS mp RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   620
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   621
6161
paulson
parents: 5976
diff changeset
   622
Goal "[| 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
   623
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   624
qed"Forall_postfixclosed";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   625
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   626
10835
nipkow
parents: 9877
diff changeset
   627
Goal "((! x. P x --> (Q x = R x)) & Forall P tr) --> Filter Q$tr = Filter R$tr";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   628
by (Seq_induct_tac "tr" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   629
qed"ForallPFilterQR1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   630
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   631
bind_thm("ForallPFilterQR",allI RS (conjI RS (ForallPFilterQR1 RS mp)));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   632
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   633
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   634
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   635
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   636
section "Forall, Filter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   637
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   638
10835
nipkow
parents: 9877
diff changeset
   639
Goal "Forall P (Filter P$x)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   640
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
   641
qed"ForallPFilterP";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   642
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   643
(* holds also in other direction, then equal to forallPfilterP *)
10835
nipkow
parents: 9877
diff changeset
   644
Goal "Forall P x --> Filter P$x = x";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   645
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
   646
qed"ForallPFilterPid1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   647
4034
5bb30bedbdc2 Removed spurious blank.
nipkow
parents: 3898
diff changeset
   648
bind_thm("ForallPFilterPid",ForallPFilterPid1 RS mp);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   649
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   650
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   651
(* holds also in other direction *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   652
Goal "!! ys . Finite ys ==> \
10835
nipkow
parents: 9877
diff changeset
   653
\   Forall (%x. ~P x) ys --> Filter P$ys = nil ";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   654
by (Seq_Finite_induct_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   655
qed"ForallnPFilterPnil1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   656
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   657
bind_thm ("ForallnPFilterPnil",ForallnPFilterPnil1 RS mp);
3071
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
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   660
(* holds also in other direction *)
6161
paulson
parents: 5976
diff changeset
   661
Goal   "~Finite ys & Forall (%x. ~P x) ys \
10835
nipkow
parents: 9877
diff changeset
   662
\                  --> Filter P$ys = UU ";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   663
by (Seq_induct_tac "ys" [Forall_def,sforall_def] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   664
qed"ForallnPFilterPUU1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   665
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   666
bind_thm ("ForallnPFilterPUU",conjI RS (ForallnPFilterPUU1 RS mp));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   667
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   668
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   669
(* inverse of ForallnPFilterPnil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   670
10835
nipkow
parents: 9877
diff changeset
   671
Goal "!! ys . Filter P$ys = nil --> \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   672
\   (Forall (%x. ~P x) ys & Finite ys)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   673
by (res_inst_tac[("x","ys")] Seq_induct 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   674
(* adm *)
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   675
(* FIX: not admissible, search other proof!! *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   676
by (rtac adm_all 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   677
(* base cases *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   678
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   679
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   680
(* main case *)
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4721
diff changeset
   681
by (Asm_full_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   682
qed"FilternPnilForallP1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   683
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   684
bind_thm ("FilternPnilForallP",FilternPnilForallP1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   685
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   686
(* inverse of ForallnPFilterPUU. proved by 2 lemmas because of adm problems *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   687
10835
nipkow
parents: 9877
diff changeset
   688
Goal "Finite ys ==> Filter P$ys ~= UU";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   689
by (Seq_Finite_induct_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   690
qed"FilterUU_nFinite_lemma1";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   691
10835
nipkow
parents: 9877
diff changeset
   692
Goal "~ Forall (%x. ~P x) ys --> Filter P$ys ~= UU";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   693
by (Seq_induct_tac "ys" [Forall_def,sforall_def] 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   694
qed"FilterUU_nFinite_lemma2";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   695
10835
nipkow
parents: 9877
diff changeset
   696
Goal   "Filter P$ys = UU ==> \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   697
\                (Forall (%x. ~P x) ys  & ~Finite ys)";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   698
by (rtac conjI 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   699
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
   700
by Auto_tac;
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   701
by (blast_tac (claset() addSDs [FilterUU_nFinite_lemma1]) 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   702
qed"FilternPUUForallP";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   703
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   704
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   705
Goal  "!! Q P.[| Forall Q ys; Finite ys; !!x. Q x ==> ~P x|] \
10835
nipkow
parents: 9877
diff changeset
   706
\   ==> Filter P$ys = nil";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   707
by (etac ForallnPFilterPnil 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   708
by (etac ForallPForallQ 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   709
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   710
qed"ForallQFilterPnil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   711
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   712
Goal "!! Q P. [| ~Finite ys; Forall Q ys;  !!x. Q x ==> ~P x|] \
10835
nipkow
parents: 9877
diff changeset
   713
\   ==> Filter P$ys = UU ";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   714
by (etac ForallnPFilterPUU 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   715
by (etac ForallPForallQ 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   716
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   717
qed"ForallQFilterPUU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   718
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   719
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   720
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   721
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   722
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   723
section "Takewhile, Forall, Filter";
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
10835
nipkow
parents: 9877
diff changeset
   726
Goal "Forall P (Takewhile P$x)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   727
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
   728
qed"ForallPTakewhileP";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   729
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   730
10835
nipkow
parents: 9877
diff changeset
   731
Goal"!! P. [| !!x. Q x==> P x |] ==> Forall P (Takewhile Q$x)";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   732
by (rtac ForallPForallQ 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   733
by (rtac ForallPTakewhileP 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   734
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   735
qed"ForallPTakewhileQ";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   736
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   737
10835
nipkow
parents: 9877
diff changeset
   738
Goal  "!! Q P.[| Finite (Takewhile Q$ys); !!x. Q x ==> ~P x |] \
nipkow
parents: 9877
diff changeset
   739
\   ==> Filter P$(Takewhile Q$ys) = nil";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   740
by (etac ForallnPFilterPnil 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   741
by (rtac ForallPForallQ 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   742
by (rtac ForallPTakewhileP 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   743
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   744
qed"FilterPTakewhileQnil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   745
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   746
Goal "!! Q P. [| !!x. Q x ==> P x |] ==> \
10835
nipkow
parents: 9877
diff changeset
   747
\            Filter P$(Takewhile Q$ys) = (Takewhile Q$ys)";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   748
by (rtac ForallPFilterPid 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   749
by (rtac ForallPForallQ 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   750
by (rtac ForallPTakewhileP 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   751
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   752
qed"FilterPTakewhileQid";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   753
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   754
Addsimps [ForallPTakewhileP,ForallPTakewhileQ,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   755
          FilterPTakewhileQnil,FilterPTakewhileQid];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   756
10835
nipkow
parents: 9877
diff changeset
   757
Goal "Takewhile P$(Takewhile P$s) = Takewhile P$s";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   758
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   759
qed"Takewhile_idempotent";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   760
10835
nipkow
parents: 9877
diff changeset
   761
Goal "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
   762
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   763
qed"ForallPTakewhileQnP";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   764
10835
nipkow
parents: 9877
diff changeset
   765
Goal "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
   766
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   767
qed"ForallPDropwhileQnP";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   768
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   769
Addsimps [ForallPTakewhileQnP RS mp, ForallPDropwhileQnP RS mp];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   770
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   771
10835
nipkow
parents: 9877
diff changeset
   772
Goal "Forall P s --> Takewhile P$(s @@ t) = s @@ (Takewhile P$t)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   773
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   774
qed"TakewhileConc1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   775
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   776
bind_thm("TakewhileConc",TakewhileConc1 RS mp);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   777
10835
nipkow
parents: 9877
diff changeset
   778
Goal "Finite s ==> Forall P s --> Dropwhile P$(s @@ t) = Dropwhile P$t";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   779
by (Seq_Finite_induct_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   780
qed"DropwhileConc1";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   781
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   782
bind_thm("DropwhileConc",DropwhileConc1 RS mp);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   783
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   784
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   785
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   786
(* ----------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   787
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   788
section "coinductive characterizations of Filter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   789
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   790
10835
nipkow
parents: 9877
diff changeset
   791
Goal "HD$(Filter P$y) = Def x \
nipkow
parents: 9877
diff changeset
   792
\         --> y = ((Takewhile (%x. ~P x)$y) @@ (x >> TL$(Dropwhile (%a.~P a)$y)))  \
nipkow
parents: 9877
diff changeset
   793
\             & Finite (Takewhile (%x. ~ P x)$y)  & P x";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   794
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   795
(* FIX: pay attention: is only admissible with chain-finite package to be added to 
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   796
        adm test and Finite f x admissibility *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   797
by (Seq_induct_tac "y" [] 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   798
by (rtac adm_all 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   799
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   800
by (case_tac "P a" 1);
4681
a331c1f5a23e expand_if is now by default part of the simpset.
nipkow
parents: 4477
diff changeset
   801
 by (Asm_full_simp_tac 1); 
a331c1f5a23e expand_if is now by default part of the simpset.
nipkow
parents: 4477
diff changeset
   802
 by (Blast_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   803
(* ~ P a *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   804
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   805
qed"divide_Seq_lemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   806
10835
nipkow
parents: 9877
diff changeset
   807
Goal "(x>>xs) << Filter P$y  \
nipkow
parents: 9877
diff changeset
   808
\   ==> y = ((Takewhile (%a. ~ P a)$y) @@ (x >> TL$(Dropwhile (%a.~P a)$y))) \
nipkow
parents: 9877
diff changeset
   809
\      & Finite (Takewhile (%a. ~ P a)$y)  & P x";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   810
by (rtac (divide_Seq_lemma RS mp) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   811
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
   812
by (Asm_full_simp_tac 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   813
qed"divide_Seq";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   814
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   815
 
10835
nipkow
parents: 9877
diff changeset
   816
Goal "~Forall P y --> (? x. HD$(Filter (%a. ~P a)$y) = Def x)";
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   817
(* 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
   818
        adm test *)
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   819
by (Seq_induct_tac "y" [Forall_def,sforall_def] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   820
qed"nForall_HDFilter";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   821
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   822
6161
paulson
parents: 5976
diff changeset
   823
Goal "~Forall P y  \
10835
nipkow
parents: 9877
diff changeset
   824
\  ==> ? x. y= (Takewhile P$y @@ (x >> TL$(Dropwhile P$y))) & \
nipkow
parents: 9877
diff changeset
   825
\      Finite (Takewhile P$y) & (~ P x)";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   826
by (dtac (nForall_HDFilter RS mp) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   827
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   828
by (res_inst_tac [("x","x")] exI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   829
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
   830
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   831
qed"divide_Seq2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   832
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   833
6161
paulson
parents: 5976
diff changeset
   834
Goal  "~Forall P y \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   835
\  ==> ? 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
   836
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
   837
(*Auto_tac no longer proves it*)
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   838
by (REPEAT (fast_tac (claset() addss (simpset())) 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   839
qed"divide_Seq3";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   840
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   841
Addsimps [FilterPQ,FilterConc,Conc_cong];
3071
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
(* ------------------------------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   845
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   846
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   847
section "take_lemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   848
10835
nipkow
parents: 9877
diff changeset
   849
Goal "(!n. seq_take n$x = seq_take n$x') = (x = x')";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   850
by (rtac iffI 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
   851
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
   852
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   853
qed"seq_take_lemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   854
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   855
Goal 
10835
nipkow
parents: 9877
diff changeset
   856
"  ! n. ((! k. k < n --> seq_take k$y1 = seq_take k$y2) \
nipkow
parents: 9877
diff changeset
   857
\   --> seq_take n$(x @@ (t>>y1)) =  seq_take n$(x @@ (t>>y2)))";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   858
by (Seq_induct_tac "x" [] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   859
by (strip_tac 1);
8439
17e62ef34ec8 renamed cases_tac to case_tac;
wenzelm
parents: 8417
diff changeset
   860
by (case_tac "n" 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   861
by Auto_tac;
8439
17e62ef34ec8 renamed cases_tac to case_tac;
wenzelm
parents: 8417
diff changeset
   862
by (case_tac "n" 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   863
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   864
qed"take_reduction1";
3071
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
10835
nipkow
parents: 9877
diff changeset
   867
Goal "!! n.[| x=y; s=t; !! k. k<n ==> seq_take k$y1 = seq_take k$y2|] \
nipkow
parents: 9877
diff changeset
   868
\ ==> 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
   869
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   870
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
   871
qed"take_reduction";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   872
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   873
(* ------------------------------------------------------------------
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   874
          take-lemma and take_reduction for << instead of = 
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   875
   ------------------------------------------------------------------ *)
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   876
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   877
Goal 
10835
nipkow
parents: 9877
diff changeset
   878
"  ! n. ((! k. k < n --> seq_take k$y1 << seq_take k$y2) \
nipkow
parents: 9877
diff changeset
   879
\   --> seq_take n$(x @@ (t>>y1)) <<  seq_take n$(x @@ (t>>y2)))";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   880
by (Seq_induct_tac "x" [] 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   881
by (strip_tac 1);
8439
17e62ef34ec8 renamed cases_tac to case_tac;
wenzelm
parents: 8417
diff changeset
   882
by (case_tac "n" 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   883
by Auto_tac;
8439
17e62ef34ec8 renamed cases_tac to case_tac;
wenzelm
parents: 8417
diff changeset
   884
by (case_tac "n" 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4098
diff changeset
   885
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   886
qed"take_reduction_less1";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   887
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   888
10835
nipkow
parents: 9877
diff changeset
   889
Goal "!! n.[| x=y; s=t;!! k. k<n ==> seq_take k$y1 << seq_take k$y2|] \
nipkow
parents: 9877
diff changeset
   890
\ ==> seq_take n$(x @@ (s>>y1)) <<  seq_take n$(y @@ (t>>y2))";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   891
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
   892
qed"take_reduction_less";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   893
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
val prems = goalw thy [seq.take_def]
10835
nipkow
parents: 9877
diff changeset
   896
"(!! n. seq_take n$s1 << seq_take n$s2)  ==> s1<<s2";
3361
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
by (res_inst_tac [("t","s1")] (seq.reach RS subst)  1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   899
by (res_inst_tac [("t","s2")] (seq.reach RS subst)  1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   900
by (rtac (fix_def2 RS ssubst ) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   901
by (stac contlub_cfun_fun 1);
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4716
diff changeset
   902
by (rtac chain_iterate 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   903
by (stac contlub_cfun_fun 1);
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4716
diff changeset
   904
by (rtac chain_iterate 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   905
by (rtac lub_mono 1);
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 5192
diff changeset
   906
by (rtac (chain_iterate RS ch2ch_Rep_CFunL) 1);
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 5192
diff changeset
   907
by (rtac (chain_iterate RS ch2ch_Rep_CFunL) 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   908
by (rtac allI 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   909
by (resolve_tac prems 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   910
qed"take_lemma_less1";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   911
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   912
10835
nipkow
parents: 9877
diff changeset
   913
Goal "(!n. seq_take n$x << seq_take n$x') = (x << x')";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   914
by (rtac iffI 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   915
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
   916
by Auto_tac;
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   917
by (etac monofun_cfun_arg 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   918
qed"take_lemma_less";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   919
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   920
(* ------------------------------------------------------------------
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   921
          take-lemma proof principles
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   922
   ------------------------------------------------------------------ *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   923
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   924
Goal "!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   925
\           !! 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
   926
\                         ==> (f (s1 @@ y>>s2)) = (g (s1 @@ y>>s2)) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   927
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   928
by (case_tac "Forall Q x" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   929
by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   930
qed"take_lemma_principle1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   931
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   932
Goal "!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   933
\           !! s1 s2 y. [| Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2)|] \
10835
nipkow
parents: 9877
diff changeset
   934
\                         ==> ! n. seq_take n$(f (s1 @@ y>>s2)) \
nipkow
parents: 9877
diff changeset
   935
\                                = seq_take n$(g (s1 @@ y>>s2)) |] \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   936
\              ==> A x --> (f x)=(g x)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   937
by (case_tac "Forall Q x" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   938
by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
   939
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
   940
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   941
qed"take_lemma_principle2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   942
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   943
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   944
(* 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
   945
         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
   946
         assumption (then rule useless) or it is not possible to strengthen 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   947
         the IH by doing a forall closure of the sequence t (then rule also useless).
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 8439
diff changeset
   948
         This is also the reason why the induction rule (nat_less_induct or nat_induct) has to 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   949
         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
   950
         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
   951
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   952
Goal 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   953
"!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
10835
nipkow
parents: 9877
diff changeset
   954
\        !! s1 s2 y n. [| ! t. A t --> seq_take n$(f t) = seq_take n$(g t);\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   955
\                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
10835
nipkow
parents: 9877
diff changeset
   956
\                         ==>   seq_take (Suc n)$(f (s1 @@ y>>s2)) \
nipkow
parents: 9877
diff changeset
   957
\                             = seq_take (Suc n)$(g (s1 @@ y>>s2)) |] \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   958
\              ==> A x --> (f x)=(g x)";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   959
by (rtac impI 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
   960
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   961
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   962
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   963
by (res_inst_tac [("x","x")] spec 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   964
by (rtac nat_induct 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   965
by (Simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   966
by (rtac allI 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   967
by (case_tac "Forall Q xa" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   968
by (SELECT_GOAL (auto_tac (claset() addSIs [seq_take_lemma RS iffD2 RS spec],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   969
                           simpset())) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   970
by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   971
qed"take_lemma_induct";
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   974
Goal 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   975
"!! Q. [|!! s. [| Forall Q s; A s |] ==> (f s) = (g s) ; \
10835
nipkow
parents: 9877
diff changeset
   976
\        !! s1 s2 y n. [| ! t m. m < n --> A t --> seq_take m$(f t) = seq_take m$(g t);\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   977
\                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
10835
nipkow
parents: 9877
diff changeset
   978
\                         ==>   seq_take n$(f (s1 @@ y>>s2)) \
nipkow
parents: 9877
diff changeset
   979
\                             = seq_take n$(g (s1 @@ y>>s2)) |] \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   980
\              ==> A x --> (f x)=(g x)";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   981
by (rtac impI 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
   982
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   983
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   984
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   985
by (res_inst_tac [("x","x")] spec 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 8439
diff changeset
   986
by (rtac nat_less_induct 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_less_induct";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   993
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   994
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   995
(*
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
   996
local
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
   997
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
   998
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
   999
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1000
fun add_frees tsig =
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1001
  let
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1002
    fun add (Free (x, T), vars) =
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1003
          if Type.of_sort tsig (T, HOLogic.termS) then x ins vars
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1004
          else vars
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1005
      | add (Abs (_, _, t), vars) = add (t, vars)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1006
      | add (t $ u, vars) = add (t, add (u, vars))
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1007
      | add (_, vars) = vars;
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1008
   in add end;
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1009
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1010
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1011
in
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1012
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1013
(*Generalizes over all free variables, with the named var outermost.*)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1014
fun all_frees_tac x i thm =
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1015
  let
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1016
    val tsig = #tsig (Sign.rep_sg (#sign (rep_thm thm)));
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1017
    val frees = add_frees tsig (nth_elem (i - 1, prems_of thm), [x]);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1018
    val frees' = sort (op >) (frees \ x) @ [x];
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1019
  in
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1020
    foldl (qnt_tac i) (all_tac, frees') thm
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1021
  end;
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1022
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1023
end;
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3461
diff changeset
  1024
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1025
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1026
Goal 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1027
"!! Q. [|!! s h1 h2. [| Forall Q s; A s h1 h2|] ==> (f s h1 h2) = (g s h1 h2) ; \
10835
nipkow
parents: 9877
diff changeset
  1028
\  !! 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);\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1029
\                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) h1 h2|] \
10835
nipkow
parents: 9877
diff changeset
  1030
\                         ==>   seq_take n$(f (s1 @@ y>>s2) h1 h2) \
nipkow
parents: 9877
diff changeset
  1031
\                             = seq_take n$(g (s1 @@ y>>s2) h1 h2) |] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1032
\              ==> ! 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
  1033
by (strip_tac 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
  1034
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1035
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1036
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1037
by (res_inst_tac [("x","h2a")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1038
by (res_inst_tac [("x","h1a")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1039
by (res_inst_tac [("x","x")] spec 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 8439
diff changeset
  1040
by (rtac nat_less_induct 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1041
by (rtac allI 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1042
by (case_tac "Forall Q xa" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1043
by (SELECT_GOAL (auto_tac (claset() addSIs [seq_take_lemma RS iffD2 RS spec],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1044
                           simpset())) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1045
by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1046
qed"take_lemma_less_induct";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1047
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1048
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1049
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1050
Goal 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1051
"!! Q. [|!! s. Forall Q s ==> P ((f s) = (g s)) ; \
10835
nipkow
parents: 9877
diff changeset
  1052
\        !! s1 s2 y n. [| ! t m. m < n --> P (seq_take m$(f t) = seq_take m$(g t));\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1053
\                         Forall Q s1; Finite s1; ~ Q y|] \
10835
nipkow
parents: 9877
diff changeset
  1054
\                         ==>   P (seq_take n$(f (s1 @@ y>>s2)) \
nipkow
parents: 9877
diff changeset
  1055
\                                   = seq_take n$(g (s1 @@ y>>s2))) |] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1056
\              ==> P ((f x)=(g x))";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1057
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1058
by (res_inst_tac [("t","f x = g x"),
10835
nipkow
parents: 9877
diff changeset
  1059
                  ("s","!n. seq_take n$(f x) = seq_take n$(g x)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1060
by (rtac seq_take_lemma 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1061
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1062
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
  1063
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1064
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1065
FIX
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1066
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 8439
diff changeset
  1067
by (rtac nat_less_induct 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1068
by (rtac allI 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1069
by (case_tac "Forall Q xa" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1070
by (SELECT_GOAL (auto_tac (claset() addSIs [seq_take_lemma RS iffD2 RS spec],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1071
                           simpset())) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1072
by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1073
qed"take_lemma_less_induct";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1074
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1075
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1076
*)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1077
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1078
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1079
Goal 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1080
"!! Q. [| A UU  ==> (f UU) = (g UU) ; \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1081
\         A nil ==> (f nil) = (g nil) ; \
10835
nipkow
parents: 9877
diff changeset
  1082
\         !! s y n. [| ! t. A t --> seq_take n$(f t) = seq_take n$(g t);\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1083
\                    A (y>>s) |]   \
10835
nipkow
parents: 9877
diff changeset
  1084
\                    ==>   seq_take (Suc n)$(f (y>>s)) \
nipkow
parents: 9877
diff changeset
  1085
\                        = seq_take (Suc n)$(g (y>>s)) |] \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1086
\              ==> A x --> (f x)=(g x)";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1087
by (rtac impI 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 4034
diff changeset
  1088
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1089
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1090
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1091
by (res_inst_tac [("x","x")] spec 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1092
by (rtac nat_induct 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1093
by (Simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1094
by (rtac allI 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1095
by (Seq_case_simp_tac "xa" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1096
qed"take_lemma_in_eq_out";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1097
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1098
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1099
(* ------------------------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1100
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1101
section "alternative take_lemma proofs";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1102
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1103
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1104
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1105
(*              Alternative Proof of FilterPQ                      *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1106
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1107
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1108
Delsimps [FilterPQ];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1109
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1110
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1111
(* 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
  1112
   as for the entire proof ? *) 
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1113
Goal "Forall (%x.~(P x & Q x)) s \
10835
nipkow
parents: 9877
diff changeset
  1114
\         --> Filter P$(Filter Q$s) =\
nipkow
parents: 9877
diff changeset
  1115
\             Filter (%x. P x & Q x)$s";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1116
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1117
by (Seq_induct_tac "s" [Forall_def,sforall_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1118
qed"Filter_lemma1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1119
6161
paulson
parents: 5976
diff changeset
  1120
Goal "Finite s ==>  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1121
\         (Forall (%x. (~P x) | (~ Q x)) s  \
10835
nipkow
parents: 9877
diff changeset
  1122
\         --> Filter P$(Filter Q$s) = nil)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1123
by (Seq_Finite_induct_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1124
qed"Filter_lemma2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1125
6161
paulson
parents: 5976
diff changeset
  1126
Goal "Finite s ==>  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1127
\         Forall (%x. (~P x) | (~ Q x)) s  \
10835
nipkow
parents: 9877
diff changeset
  1128
\         --> Filter (%x. P x & Q x)$s = nil";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1129
by (Seq_Finite_induct_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1130
qed"Filter_lemma3";
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
10835
nipkow
parents: 9877
diff changeset
  1133
Goal "Filter P$(Filter Q$s) = Filter (%x. P x & Q x)$s";
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3662
diff changeset
  1134
by (res_inst_tac [("A1","%x. True") 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1135
                 ,("Q1","%x.~(P x & Q x)"),("x1","s")]
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1136
                 (take_lemma_induct RS mp) 1);
5976
44290b71a85f tuning to assimiliate it with PhD;
mueller
parents: 5291
diff changeset
  1137
(* better support for A = %x. True *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1138
by (Fast_tac 3);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1139
by (asm_full_simp_tac (simpset() addsimps [Filter_lemma1]) 1);
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4721
diff changeset
  1140
by (asm_full_simp_tac (simpset() addsimps [Filter_lemma2,Filter_lemma3]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1141
qed"FilterPQ_takelemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1142
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1143
Addsimps [FilterPQ];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1144
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1145
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
(*              Alternative Proof of MapConc                       *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1148
(* --------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1149
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
  1150
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1151
10835
nipkow
parents: 9877
diff changeset
  1152
Goal "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
  1153
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
  1154
    (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
  1155
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1156
qed"MapConc_takelemma";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1157
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1158