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