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