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