src/HOLCF/IOA/meta_theory/CompoTraces.ML
author wenzelm
Fri, 02 Sep 2005 17:23:59 +0200
changeset 17233 41eee2e7b465
parent 15531 08c8dad8e399
child 17876 b9c92f384109
permissions -rw-r--r--
converted specifications to Isar theories;
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/CompoTraces.ML
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
     2
    ID:         $Id$
12218
wenzelm
parents: 12028
diff changeset
     3
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
     4
*)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     5
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14981
diff changeset
     6
simpset_ref () := simpset() setmksym (K NONE);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
     7
3071
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
                   section "mksch rewrite rules";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    10
(* ---------------------------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    11
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
    12
bind_thm ("mksch_unfold", fix_prover2 (the_context ()) mksch_def
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    13
"mksch A B = (LAM tr schA schB. case tr of \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    14
\       nil => nil\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    15
\    | x##xs => \
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
    16
\      (case x of  \
12028
52aa183c15bb replaced Undef by UU;
wenzelm
parents: 11655
diff changeset
    17
\        UU => UU  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    18
\      | Def y => \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    19
\         (if y:act A then \
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
    20
\             (if y:act B then \
10835
nipkow
parents: 10230
diff changeset
    21
\                   ((Takewhile (%a. a:int A)$schA) \
nipkow
parents: 10230
diff changeset
    22
\                         @@(Takewhile (%a. a:int B)$schB) \
nipkow
parents: 10230
diff changeset
    23
\                              @@(y>>(mksch A B$xs   \
nipkow
parents: 10230
diff changeset
    24
\                                       $(TL$(Dropwhile (%a. a:int A)$schA))  \
nipkow
parents: 10230
diff changeset
    25
\                                       $(TL$(Dropwhile (%a. a:int B)$schB))  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    26
\                    )))   \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    27
\              else  \
10835
nipkow
parents: 10230
diff changeset
    28
\                 ((Takewhile (%a. a:int A)$schA)  \
nipkow
parents: 10230
diff changeset
    29
\                      @@ (y>>(mksch A B$xs  \
nipkow
parents: 10230
diff changeset
    30
\                              $(TL$(Dropwhile (%a. a:int A)$schA))  \
nipkow
parents: 10230
diff changeset
    31
\                              $schB)))  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    32
\              )   \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    33
\          else    \
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
    34
\             (if y:act B then  \
10835
nipkow
parents: 10230
diff changeset
    35
\                 ((Takewhile (%a. a:int B)$schB)  \
nipkow
parents: 10230
diff changeset
    36
\                       @@ (y>>(mksch A B$xs   \
nipkow
parents: 10230
diff changeset
    37
\                              $schA   \
nipkow
parents: 10230
diff changeset
    38
\                              $(TL$(Dropwhile (%a. a:int B)$schB))  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    39
\                              )))  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    40
\             else  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    41
\               UU  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    42
\             )  \
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
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    46
10835
nipkow
parents: 10230
diff changeset
    47
Goal "mksch A B$UU$schA$schB = UU";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    48
by (stac mksch_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    49
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    50
qed"mksch_UU";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    51
10835
nipkow
parents: 10230
diff changeset
    52
Goal "mksch A B$nil$schA$schB = nil";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    53
by (stac mksch_unfold 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    54
by (Simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    55
qed"mksch_nil";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    56
6161
paulson
parents: 5068
diff changeset
    57
Goal "[|x:act A;x~:act B|]  \
10835
nipkow
parents: 10230
diff changeset
    58
\   ==> mksch A B$(x>>tr)$schA$schB = \
nipkow
parents: 10230
diff changeset
    59
\         (Takewhile (%a. a:int A)$schA) \
nipkow
parents: 10230
diff changeset
    60
\         @@ (x>>(mksch A B$tr$(TL$(Dropwhile (%a. a:int A)$schA)) \
nipkow
parents: 10230
diff changeset
    61
\                             $schB))";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    62
by (rtac trans 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    63
by (stac mksch_unfold 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    64
by (asm_full_simp_tac (simpset() addsimps [Consq_def,If_and_if]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    65
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    66
qed"mksch_cons1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    67
6161
paulson
parents: 5068
diff changeset
    68
Goal "[|x~:act A;x:act B|] \
10835
nipkow
parents: 10230
diff changeset
    69
\   ==> mksch A B$(x>>tr)$schA$schB = \
nipkow
parents: 10230
diff changeset
    70
\        (Takewhile (%a. a:int B)$schB)  \
nipkow
parents: 10230
diff changeset
    71
\         @@ (x>>(mksch A B$tr$schA$(TL$(Dropwhile (%a. a:int B)$schB))  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    72
\                            ))";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    73
by (rtac trans 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    74
by (stac mksch_unfold 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    75
by (asm_full_simp_tac (simpset() addsimps [Consq_def,If_and_if]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    76
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    77
qed"mksch_cons2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    78
6161
paulson
parents: 5068
diff changeset
    79
Goal "[|x:act A;x:act B|] \
10835
nipkow
parents: 10230
diff changeset
    80
\   ==> mksch A B$(x>>tr)$schA$schB = \
nipkow
parents: 10230
diff changeset
    81
\            (Takewhile (%a. a:int A)$schA) \
nipkow
parents: 10230
diff changeset
    82
\         @@ ((Takewhile (%a. a:int B)$schB)  \
nipkow
parents: 10230
diff changeset
    83
\         @@ (x>>(mksch A B$tr$(TL$(Dropwhile (%a. a:int A)$schA)) \
nipkow
parents: 10230
diff changeset
    84
\                            $(TL$(Dropwhile (%a. a:int B)$schB))))  \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    85
\             )";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    86
by (rtac trans 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    87
by (stac mksch_unfold 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    88
by (asm_full_simp_tac (simpset() addsimps [Consq_def,If_and_if]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    89
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    90
qed"mksch_cons3";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    91
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    92
val compotr_simps =[mksch_UU,mksch_nil, mksch_cons1,mksch_cons2,mksch_cons3];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    93
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    94
Addsimps compotr_simps;
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    95
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    96
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    97
(* ------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    98
(*                      The following lemmata aim for                 *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    99
(*               COMPOSITIONALITY   on    TRACE     Level             *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   100
(* ------------------------------------------------------------------ *)
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
(* ---------------------------------------------------------------------------- *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   104
                      section"Lemmata for ==>";
3071
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
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   107
(* Consequence out of ext1_ext2_is_not_act1(2), which in turn are consequences out of
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   108
   the compatibility of IOA, in particular out of the condition that internals are
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   109
   really hidden. *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   110
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   111
Goal "(eB & ~eA --> ~A) -->       \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   112
\         (A & (eA | eB)) = (eA & A)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   113
by (Fast_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   114
qed"compatibility_consequence1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   115
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   116
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   117
(* very similar to above, only the commutativity of | is used to make a slight change *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   118
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   119
Goal "(eB & ~eA --> ~A) -->       \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   120
\         (A & (eB | eA)) = (eA & A)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   121
by (Fast_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   122
qed"compatibility_consequence2";
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
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   125
(* ---------------------------------------------------------------------------- *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   126
                      section"Lemmata for <==";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   127
(* ---------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   128
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   129
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   130
(* Lemma for substitution of looping assumption in another specific assumption *)
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   131
val [p1,p2] = goal (the_context ()) "[| f << (g x) ; x=(h x) |] ==> f << g (h x)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   132
by (cut_facts_tac [p1] 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   133
by (etac (p2 RS subst) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   134
qed"subst_lemma1";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   135
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   136
(* Lemma for substitution of looping assumption in another specific assumption *)
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   137
val [p1,p2] = goal (the_context ()) "[| (f x) = y >> g; x=(h x) |] ==> (f (h x)) = y >> g";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   138
by (cut_facts_tac [p1] 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   139
by (etac (p2 RS subst) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   140
qed"subst_lemma2";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   141
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   142
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   143
Goal "!!A B. compatible A B ==> \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   144
\   ! schA schB. Forall (%x. x:act (A||B)) tr \
10835
nipkow
parents: 10230
diff changeset
   145
\   --> Forall (%x. x:act (A||B)) (mksch A B$tr$schA$schB)";
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   146
by (Seq_induct_tac "tr" [Forall_def,sforall_def,mksch_def] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   147
by (safe_tac set_cs);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   148
by (asm_full_simp_tac (simpset() addsimps [actions_of_par]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   149
by (case_tac "a:act A" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   150
by (case_tac "a:act B" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   151
(* a:A, a:B *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   152
by (Asm_full_simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   153
by (rtac (Forall_Conc_impl RS mp) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   154
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ,intA_is_not_actB,int_is_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   155
by (rtac (Forall_Conc_impl RS mp) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   156
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ,intA_is_not_actB,int_is_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   157
(* a:A,a~:B *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   158
by (Asm_full_simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   159
by (rtac (Forall_Conc_impl RS mp) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   160
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ,intA_is_not_actB,int_is_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   161
by (case_tac "a:act B" 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   162
(* a~:A, a:B *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   163
by (Asm_full_simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   164
by (rtac (Forall_Conc_impl RS mp) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   165
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ,intA_is_not_actB,int_is_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   166
(* a~:A,a~:B *)
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   167
by Auto_tac;
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   168
qed_spec_mp"ForallAorB_mksch";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   169
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   170
Goal "!!A B. compatible B A  ==> \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   171
\   ! schA schB.  (Forall (%x. x:act B & x~:act A) tr \
10835
nipkow
parents: 10230
diff changeset
   172
\   --> Forall (%x. x:act B & x~:act A) (mksch A B$tr$schA$schB))";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   173
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   174
by (Seq_induct_tac "tr" [Forall_def,sforall_def,mksch_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   175
by (safe_tac set_cs);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   176
by (rtac (Forall_Conc_impl RS mp) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   177
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   178
                            intA_is_not_actB,int_is_act]) 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   179
qed_spec_mp "ForallBnAmksch";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   180
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   181
Goal "!!A B. compatible A B ==> \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   182
\   ! schA schB.  (Forall (%x. x:act A & x~:act B) tr \
10835
nipkow
parents: 10230
diff changeset
   183
\   --> Forall (%x. x:act A & x~:act B) (mksch A B$tr$schA$schB))";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   184
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   185
by (Seq_induct_tac "tr" [Forall_def,sforall_def,mksch_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   186
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   187
by (Asm_full_simp_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   188
by (rtac (Forall_Conc_impl RS mp) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   189
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   190
                       intA_is_not_actB,int_is_act]) 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   191
qed_spec_mp"ForallAnBmksch";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   192
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   193
(* safe-tac makes too many case distinctions with this lemma in the next proof *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   194
Delsimps [FiniteConc];
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   195
6161
paulson
parents: 5068
diff changeset
   196
Goal "[| Finite tr; is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   197
\   ! x y. Forall (%x. x:act A) x & Forall (%x. x:act B) y & \
10835
nipkow
parents: 10230
diff changeset
   198
\          Filter (%a. a:ext A)$x = Filter (%a. a:act A)$tr & \
nipkow
parents: 10230
diff changeset
   199
\          Filter (%a. a:ext B)$y = Filter (%a. a:act B)$tr &\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   200
\          Forall (%x. x:ext (A||B)) tr \
10835
nipkow
parents: 10230
diff changeset
   201
\          --> Finite (mksch A B$tr$x$y)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   202
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   203
by (etac Seq_Finite_ind  1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   204
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   205
(* main case *)
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4813
diff changeset
   206
by (Asm_full_simp_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   207
by (safe_tac set_cs);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   208
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   209
(* a: act A; a: act B *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   210
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   211
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   212
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   213
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   214
(* Finite (tw iA x) and Finite (tw iB y) *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   215
by (asm_full_simp_tac (simpset() addsimps
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   216
          [not_ext_is_int_or_not_act,FiniteConc]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   217
(* now for conclusion IH applicable, but assumptions have to be transformed *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   218
by (dres_inst_tac [("x","x"),
10835
nipkow
parents: 10230
diff changeset
   219
                   ("g","Filter (%a. a:act A)$s")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   220
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   221
by (dres_inst_tac [("x","y"),
10835
nipkow
parents: 10230
diff changeset
   222
                   ("g","Filter (%a. a:act B)$s")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   223
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   224
(* IH *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   225
by (asm_full_simp_tac (simpset()
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   226
        addsimps [not_ext_is_int_or_not_act,ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   227
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   228
(* a: act B; a~: act A *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   229
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   230
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   231
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   232
(* Finite (tw iB y) *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   233
by (asm_full_simp_tac (simpset() addsimps
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   234
          [not_ext_is_int_or_not_act,FiniteConc]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   235
(* now for conclusion IH applicable, but assumptions have to be transformed *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   236
by (dres_inst_tac [("x","y"),
10835
nipkow
parents: 10230
diff changeset
   237
                   ("g","Filter (%a. a:act B)$s")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   238
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   239
(* IH *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   240
by (asm_full_simp_tac (simpset()
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   241
       addsimps [not_ext_is_int_or_not_act,ForallTL,ForallDropwhile]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   242
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   243
(* a~: act B; a: act A *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   244
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   245
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   246
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   247
(* Finite (tw iA x) *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   248
by (asm_full_simp_tac (simpset() addsimps
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   249
          [not_ext_is_int_or_not_act,FiniteConc]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   250
(* now for conclusion IH applicable, but assumptions have to be transformed *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   251
by (dres_inst_tac [("x","x"),
10835
nipkow
parents: 10230
diff changeset
   252
                   ("g","Filter (%a. a:act A)$s")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   253
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   254
(* IH *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   255
by (asm_full_simp_tac (simpset()
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   256
       addsimps [not_ext_is_int_or_not_act,ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   257
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   258
(* a~: act B; a~: act A *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   259
by (fast_tac (claset() addSIs [ext_is_act]
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   260
                      addss (simpset() addsimps [externals_of_par]) ) 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   261
qed_spec_mp"FiniteL_mksch";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   262
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   263
Addsimps [FiniteConc];
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   264
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   265
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   266
(* otherwise subst_lemma2 does not fit exactly, just to avoid a subst_lemma3 *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   267
Delsimps [FilterConc];
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   268
6161
paulson
parents: 5068
diff changeset
   269
Goal " [| Finite bs; is_asig(asig_of A); is_asig(asig_of B);compatible A B|] ==>  \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   270
\! y. Forall (%x. x:act B) y & Forall (%x. x:act B & x~:act A) bs &\
10835
nipkow
parents: 10230
diff changeset
   271
\    Filter (%a. a:ext B)$y = Filter (%a. a:act B)$(bs @@ z) \
nipkow
parents: 10230
diff changeset
   272
\    --> (? y1 y2.  (mksch A B$(bs @@ z)$x$y) = (y1 @@ (mksch A B$z$x$y2)) & \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   273
\                   Forall (%x. x:act B & x~:act A) y1 & \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   274
\                   Finite y1 & y = (y1 @@ y2) & \
10835
nipkow
parents: 10230
diff changeset
   275
\                   Filter (%a. a:ext B)$y1 = bs)";
4473
803d1e302af1 Decremented subscript because of change to iffD1
paulson
parents: 4423
diff changeset
   276
by (forw_inst_tac [("A1","A")] (compat_commute RS iffD1) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   277
by (etac Seq_Finite_ind  1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   278
by (REPEAT (rtac allI 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   279
by (rtac impI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   280
by (res_inst_tac [("x","nil")] exI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   281
by (res_inst_tac [("x","y")] exI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   282
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   283
(* main case *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   284
by (REPEAT (rtac allI 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   285
by (rtac impI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   286
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   287
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   288
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   289
(* divide_Seq on s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   290
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   291
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   292
(* transform assumption f eB y = f B (s@z) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   293
by (dres_inst_tac [("x","y"),
10835
nipkow
parents: 10230
diff changeset
   294
                   ("g","Filter (%a. a:act B)$(s@@z)")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   295
by (assume_tac 1);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   296
Addsimps [FilterConc];
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   297
by (asm_full_simp_tac (simpset() addsimps [not_ext_is_int_or_not_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   298
(* apply IH *)
10835
nipkow
parents: 10230
diff changeset
   299
by (eres_inst_tac [("x","TL$(Dropwhile (%a. a:int B)$y)")] allE 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   300
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile])1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   301
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   302
by (REPEAT (etac conjE 1));
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   303
by (Asm_full_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   304
(* for replacing IH in conclusion *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   305
by (rotate_tac ~2 1);
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   306
by (Asm_full_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   307
(* instantiate y1a and y2a *)
10835
nipkow
parents: 10230
diff changeset
   308
by (res_inst_tac [("x","Takewhile (%a. a:int B)$y @@ a>>y1")] exI 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   309
by (res_inst_tac [("x","y2")] exI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   310
(* elminate all obligations up to two depending on Conc_assoc *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   311
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, intA_is_not_actB,
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   312
             int_is_act,int_is_not_ext]) 1);
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   313
by (simp_tac (simpset() addsimps [Conc_assoc]) 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   314
qed_spec_mp "reduceA_mksch1";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   315
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   316
bind_thm("reduceA_mksch",conjI RSN (6,conjI RSN (5,reduceA_mksch1)));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   317
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   318
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   319
(* otherwise subst_lemma2 does not fit exactly, just to avoid a subst_lemma3 *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   320
Delsimps [FilterConc];
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   321
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   322
6161
paulson
parents: 5068
diff changeset
   323
Goal " [| Finite as; is_asig(asig_of A); is_asig(asig_of B);compatible A B|] ==>  \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   324
\! x. Forall (%x. x:act A) x & Forall (%x. x:act A & x~:act B) as &\
10835
nipkow
parents: 10230
diff changeset
   325
\    Filter (%a. a:ext A)$x = Filter (%a. a:act A)$(as @@ z) \
nipkow
parents: 10230
diff changeset
   326
\    --> (? x1 x2.  (mksch A B$(as @@ z)$x$y) = (x1 @@ (mksch A B$z$x2$y)) & \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   327
\                   Forall (%x. x:act A & x~:act B) x1 & \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   328
\                   Finite x1 & x = (x1 @@ x2) & \
10835
nipkow
parents: 10230
diff changeset
   329
\                   Filter (%a. a:ext A)$x1 = as)";
4473
803d1e302af1 Decremented subscript because of change to iffD1
paulson
parents: 4423
diff changeset
   330
by (forw_inst_tac [("A1","A")] (compat_commute RS iffD1) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   331
by (etac Seq_Finite_ind  1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   332
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   333
by (rtac impI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   334
by (res_inst_tac [("x","nil")] exI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   335
by (res_inst_tac [("x","x")] exI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   336
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   337
(* main case *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   338
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   339
by (rtac impI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   340
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   341
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   342
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   343
(* divide_Seq on s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   344
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   345
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   346
(* transform assumption f eA x = f A (s@z) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   347
by (dres_inst_tac [("x","x"),
10835
nipkow
parents: 10230
diff changeset
   348
                   ("g","Filter (%a. a:act A)$(s@@z)")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   349
by (assume_tac 1);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   350
Addsimps [FilterConc];
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   351
by (asm_full_simp_tac (simpset() addsimps [not_ext_is_int_or_not_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   352
(* apply IH *)
10835
nipkow
parents: 10230
diff changeset
   353
by (eres_inst_tac [("x","TL$(Dropwhile (%a. a:int A)$x)")] allE 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   354
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile])1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   355
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   356
by (REPEAT (etac conjE 1));
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   357
by (Asm_full_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   358
(* for replacing IH in conclusion *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   359
by (rotate_tac ~2 1);
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   360
by (Asm_full_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   361
(* instantiate y1a and y2a *)
10835
nipkow
parents: 10230
diff changeset
   362
by (res_inst_tac [("x","Takewhile (%a. a:int A)$x @@ a>>x1")] exI 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   363
by (res_inst_tac [("x","x2")] exI 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   364
(* elminate all obligations up to two depending on Conc_assoc *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   365
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, intA_is_not_actB,
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   366
             int_is_act,int_is_not_ext]) 1);
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   367
by (simp_tac (simpset() addsimps [Conc_assoc]) 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   368
qed_spec_mp"reduceB_mksch1";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   369
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   370
bind_thm("reduceB_mksch",conjI RSN (6,conjI RSN (5,reduceB_mksch1)));
3071
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
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   373
(*
3071
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
6161
paulson
parents: 5068
diff changeset
   376
Goal "Finite y ==> ! z tr. Forall (%a.a:ext (A||B)) tr & \
10835
nipkow
parents: 10230
diff changeset
   377
\                             y = z @@ mksch A B$tr$a$b\
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   378
\                             --> Finite tr";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   379
by (etac Seq_Finite_ind  1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   380
by Auto_tac;
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   381
by (Seq_case_simp_tac "tr" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   382
(* tr = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   383
by (asm_full_simp_tac (simpset() addsimps [nil_is_Conc]) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   384
(* tr = nil *)
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   385
by Auto_tac;
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   386
(* tr = Conc *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   387
ren "s ss" 1;
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   388
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   389
by (case_tac "s:act A" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   390
by (case_tac "s:act B" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   391
by (rotate_tac ~2 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   392
by (rotate_tac ~2 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   393
by (asm_full_simp_tac (simpset() addsimps [nil_is_Conc,nil_is_Conc2]) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   394
by (asm_full_simp_tac (simpset() addsimps [nil_is_Conc,nil_is_Conc2]) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   395
by (case_tac "s:act B" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   396
by (rotate_tac ~2 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   397
by (asm_full_simp_tac (simpset() addsimps [nil_is_Conc,nil_is_Conc2]) 1);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   398
by (fast_tac (claset() addSIs [ext_is_act]
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   399
                      addss (simpset() addsimps [externals_of_par]) ) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   400
(* main case *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   401
by (Seq_case_simp_tac "tr" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   402
(* tr = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   403
by (asm_full_simp_tac (simpset() addsimps [Conc_Conc_eq]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   404
by Auto_tac;
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   405
(* tr = nil ok *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   406
(* tr = Conc *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   407
by (Seq_case_simp_tac "z" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   408
(* z = UU ok *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   409
(* z = nil *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   410
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   411
(* z= Cons *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   412
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   413
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   414
by (case_tac "aaa:act A" 2);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   415
by (case_tac "aaa:act B" 2);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   416
by (rotate_tac ~2 2);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   417
by (rotate_tac ~2 3);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   418
by (asm_full_simp_tac (HOL_basic_ss addsimps [mksch_cons3]) 2);
10835
nipkow
parents: 10230
diff changeset
   419
by (eres_inst_tac [("x","sb@@Takewhile (%a. a: int A)$a @@ Takewhile (%a. a:int B)$b@@(aaa>>nil)")] allE 2);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   420
by (eres_inst_tac [("x","sa")] allE 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   421
by (asm_full_simp_tac (simpset() addsimps [Conc_assoc])2);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   422
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   423
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   424
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   425
by (eres_inst_tac [("x","sa")] allE 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   426
by (Asm_full_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   427
by (case_tac "aaa:act A" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   428
by (case_tac "aaa:act B" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   429
by (rotate_tac ~2 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   430
by (rotate_tac ~2 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   431
by (asm_full_simp_tac (simpset() addsimps [Conc_Conc_eq]) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   432
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   433
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   434
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   435
Goal "(x>>xs = y @@ z) = ((y=nil & x>>xs=z) | (? ys. y=x>>ys & xs=ys@@z))";
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   436
by (Seq_case_simp_tac "y" 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   437
by Auto_tac;
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   438
qed"Conc_Conc_eq";
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   439
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   440
Goal "!! (y::'a Seq).Finite y ==> ~ y= x@@UU";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   441
by (etac Seq_Finite_ind 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   442
by (Seq_case_simp_tac "x" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   443
by (Seq_case_simp_tac "x" 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   444
by Auto_tac;
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   445
qed"FiniteConcUU1";
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   446
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   447
Goal "~ Finite ((x::'a Seq)@@UU)";
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   448
by (auto_tac (claset() addDs [FiniteConcUU1], simpset()));
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   449
qed"FiniteConcUU";
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   450
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   451
finiteR_mksch
10835
nipkow
parents: 10230
diff changeset
   452
  "Finite (mksch A B$tr$x$y) --> Finite tr"
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   453
*)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   454
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   455
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   456
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   457
(*------------------------------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   458
 section"Filtering external actions out of mksch(tr,schA,schB) yields the oracle tr";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   459
(*                             structural induction
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   460
  ------------------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   461
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   462
Goal
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   463
"!! A B. [| compatible A B; compatible B A;\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   464
\           is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   465
\ ! schA schB. Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   466
\ Forall (%x. x:ext (A||B)) tr & \
10835
nipkow
parents: 10230
diff changeset
   467
\ Filter (%a. a:act A)$tr << Filter (%a. a:ext A)$schA &\
nipkow
parents: 10230
diff changeset
   468
\ Filter (%a. a:act B)$tr << Filter (%a. a:ext B)$schB  \
nipkow
parents: 10230
diff changeset
   469
\ --> Filter (%a. a:ext (A||B))$(mksch A B$tr$schA$schB) = tr";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   470
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   471
by (Seq_induct_tac "tr" [Forall_def,sforall_def,mksch_def] 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   472
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   473
(* main case *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   474
(* splitting into 4 cases according to a:A, a:B *)
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4813
diff changeset
   475
by (Asm_full_simp_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   476
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   477
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   478
(* Case a:A, a:B *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   479
by (ftac divide_Seq 1);
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   480
by (ftac divide_Seq 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   481
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   482
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   483
(* filtering internals of A in schA and of B in schB is nil *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   484
by (asm_full_simp_tac (simpset() addsimps
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   485
          [not_ext_is_int_or_not_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   486
           externals_of_par, intA_is_not_extB,int_is_not_ext]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   487
(* conclusion of IH ok, but assumptions of IH have to be transformed *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   488
by (dres_inst_tac [("x","schA")] subst_lemma1 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   489
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   490
by (dres_inst_tac [("x","schB")] subst_lemma1 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   491
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   492
(* IH *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   493
by (asm_full_simp_tac (simpset() addsimps [not_ext_is_int_or_not_act,
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   494
                   ForallTL,ForallDropwhile]) 1);
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   495
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   496
(* Case a:A, a~:B *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   497
by (ftac divide_Seq 1);
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   498
by (REPEAT (etac conjE 1));
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   499
(* filtering internals of A is nil *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   500
by (asm_full_simp_tac (simpset() addsimps
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   501
          [not_ext_is_int_or_not_act,
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   502
           externals_of_par, intA_is_not_extB,int_is_not_ext]) 1);
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   503
by (dres_inst_tac [("x","schA")] subst_lemma1 1);
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   504
by (assume_tac 1);
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   505
by (asm_full_simp_tac (simpset() addsimps [not_ext_is_int_or_not_act,
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   506
                    ForallTL,ForallDropwhile]) 1);
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   507
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   508
(* Case a:B, a~:A *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   509
by (ftac divide_Seq 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   510
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   511
(* filtering internals of A is nil *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   512
by (asm_full_simp_tac (simpset() addsimps
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   513
          [not_ext_is_int_or_not_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   514
           externals_of_par, intA_is_not_extB,int_is_not_ext]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   515
by (dres_inst_tac [("x","schB")] subst_lemma1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   516
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   517
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   518
by (asm_full_simp_tac (simpset() addsimps [not_ext_is_int_or_not_act,
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   519
                    ForallTL,ForallDropwhile]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   520
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   521
(* Case a~:A, a~:B *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   522
by (fast_tac (claset() addSIs [ext_is_act]
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   523
                      addss (simpset() addsimps [externals_of_par]) ) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   524
qed"FilterA_mksch_is_tr";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   525
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
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   528
(*
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   529
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   530
***************************************************************8
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   531
With uncomplete take lemma rule should be reused afterwards !!!!!!!!!!!!!!!!!
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   532
**********************************************************************
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   533
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   534
(*---------------------------------------------------------------------------
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   535
              Filter of mksch(tr,schA,schB) to A is schA
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   536
                             take lemma
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   537
  --------------------------------------------------------------------------- *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   538
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   539
Goal "!! A B. [| compatible A B; compatible B A; \
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   540
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   541
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   542
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
10835
nipkow
parents: 10230
diff changeset
   543
\ Filter (%a. a:ext A)$schA = Filter (%a. a:act A)$tr &\
nipkow
parents: 10230
diff changeset
   544
\ Filter (%a. a:ext B)$schB = Filter (%a. a:act B)$tr &\
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   545
\ LastActExtsch A schA & LastActExtsch B schB  \
10835
nipkow
parents: 10230
diff changeset
   546
\ --> Filter (%a. a:act A)$(mksch A B$tr$schA$schB) = schA";
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   547
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   548
by (res_inst_tac [("Q","%x. x:act B & x~:act A"),("x","tr")] take_lemma_less_induct 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   549
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   550
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   551
by (case_tac "Finite s" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   552
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   553
(* both sides of this equation are nil *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   554
by (subgoal_tac "schA=nil" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   555
by (Asm_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   556
(* first side: mksch = nil *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   557
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallBnAmksch,FiniteL_mksch],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   558
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   559
(* second side: schA = nil *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   560
by (eres_inst_tac [("A","A")] LastActExtimplnil 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   561
by (Asm_simp_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   562
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   563
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   564
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   565
(* case ~ Finite s *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   566
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   567
(* both sides of this equation are UU *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   568
by (subgoal_tac "schA=UU" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   569
by (Asm_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   570
(* first side: mksch = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   571
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU,
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   572
                                           (finiteR_mksch RS mp COMP rev_contrapos),
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   573
                                            ForallBnAmksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   574
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   575
(* schA = UU *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   576
by (eres_inst_tac [("A","A")] LastActExtimplUU 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   577
by (Asm_simp_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   578
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   579
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   580
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   581
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   582
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   583
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   584
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   585
(* bring in lemma reduceA_mksch *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   586
by (forw_inst_tac [("y","schB"),("x","schA")] reduceA_mksch 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   587
by (REPEAT (atac 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   588
by (REPEAT (etac exE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   589
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   590
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   591
(* use reduceA_mksch to rewrite conclusion *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   592
by (hyp_subst_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   593
by (Asm_full_simp_tac  1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   594
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   595
(* eliminate the B-only prefix *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   596
10835
nipkow
parents: 10230
diff changeset
   597
by (subgoal_tac "(Filter (%a. a :act A)$y1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   598
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   599
by (assume_tac 2);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   600
by (Fast_tac 2);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   601
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   602
(* Now real recursive step follows (in y) *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   603
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   604
by (Asm_full_simp_tac  1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   605
by (case_tac "y:act A" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   606
by (case_tac "y~:act B" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   607
by (rotate_tac ~2 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   608
by (Asm_full_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   609
10835
nipkow
parents: 10230
diff changeset
   610
by (subgoal_tac "Filter (%a. a:act A & a:ext B)$y1=nil" 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   611
by (rotate_tac ~1 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   612
by (Asm_full_simp_tac  1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   613
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   614
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   615
by (assume_tac 2);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   616
by (Fast_tac 2);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   617
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   618
(* bring in divide Seq for s *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   619
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   620
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   621
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   622
(* subst divide_Seq in conclusion, but only at the righest occurence *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   623
by (res_inst_tac [("t","schA")] ssubst 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   624
back();
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   625
back();
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   626
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   627
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   628
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   629
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   630
by (rtac take_reduction 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   631
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   632
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   633
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   634
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   635
by (rtac refl 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   636
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   637
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   638
(*
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   639
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   640
nacessary anymore ????????????????
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   641
by (rotate_tac ~10 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   642
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   643
*)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   644
(* assumption schB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   645
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   646
(* assumption schA *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   647
by (dres_inst_tac [("x","schA"),
10835
nipkow
parents: 10230
diff changeset
   648
                   ("g","Filter (%a. a:act A)$s2")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   649
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   650
by (Asm_full_simp_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   651
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   652
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   653
by (dres_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   654
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   655
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   656
FIX: problem: schA and schB are not quantified in the new take lemma version !!!
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   657
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   658
by (Asm_full_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   659
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   660
**********************************************************************************************
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   661
*)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   662
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   663
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   664
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   665
(*--------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   666
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   667
     section" Filter of mksch(tr,schA,schB) to A is schA -- take lemma proof";
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   668
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   669
(*  --------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   670
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   671
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   672
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   673
Goal "!! A B. [| compatible A B; compatible B A; \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   674
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   675
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   676
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
10835
nipkow
parents: 10230
diff changeset
   677
\ Filter (%a. a:ext A)$schA = Filter (%a. a:act A)$tr &\
nipkow
parents: 10230
diff changeset
   678
\ Filter (%a. a:ext B)$schB = Filter (%a. a:act B)$tr &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   679
\ LastActExtsch A schA & LastActExtsch B schB  \
10835
nipkow
parents: 10230
diff changeset
   680
\ --> Filter (%a. a:act A)$(mksch A B$tr$schA$schB) = schA";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   681
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   682
by (strip_tac 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 3842
diff changeset
   683
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   684
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   685
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   686
back();back();back();back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   687
by (res_inst_tac [("x","schA")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   688
by (res_inst_tac [("x","schB")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   689
by (res_inst_tac [("x","tr")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   690
by (thin_tac' 5 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7499
diff changeset
   691
by (rtac nat_less_induct 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   692
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   693
ren "tr schB schA" 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   694
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   695
by (REPEAT (etac conjE 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   696
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   697
by (case_tac "Forall (%x. x:act B & x~:act A) tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   698
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   699
by (rtac (seq_take_lemma RS iffD2 RS spec) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   700
by (thin_tac' 5 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   701
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   702
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   703
by (case_tac "Finite tr" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   704
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   705
(* both sides of this equation are nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   706
by (subgoal_tac "schA=nil" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   707
by (Asm_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   708
(* first side: mksch = nil *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   709
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallBnAmksch,FiniteL_mksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   710
                           simpset())) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   711
(* second side: schA = nil *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   712
by (eres_inst_tac [("A","A")] LastActExtimplnil 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   713
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   714
by (eres_inst_tac [("Q","%x. x:act B & x~:act A")] ForallQFilterPnil 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   715
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   716
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   717
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   718
(* case ~ Finite s *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   719
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   720
(* both sides of this equation are UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   721
by (subgoal_tac "schA=UU" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   722
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   723
(* first side: mksch = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   724
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU,
4813
14cea5b1d12f layout improvement
oheimb
parents: 4678
diff changeset
   725
        (finiteR_mksch RS mp COMP rev_contrapos),ForallBnAmksch],simpset())) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   726
(* schA = UU *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   727
by (eres_inst_tac [("A","A")] LastActExtimplUU 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   728
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   729
by (eres_inst_tac [("Q","%x. x:act B & x~:act A")] ForallQFilterPUU 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   730
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   731
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   732
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   733
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   734
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   735
by (dtac divide_Seq3 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   736
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   737
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   738
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   739
by (hyp_subst_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   740
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   741
(* bring in lemma reduceA_mksch *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   742
by (forw_inst_tac [("x","schA"),("y","schB"),("A","A"),("B","B")] reduceA_mksch 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   743
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   744
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   745
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   746
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   747
(* use reduceA_mksch to rewrite conclusion *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   748
by (hyp_subst_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   749
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   750
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   751
(* eliminate the B-only prefix *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   752
10835
nipkow
parents: 10230
diff changeset
   753
by (subgoal_tac "(Filter (%a. a :act A)$y1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   754
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   755
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   756
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   757
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   758
(* Now real recursive step follows (in y) *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   759
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   760
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   761
by (case_tac "x:act A" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   762
by (case_tac "x~:act B" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   763
by (rotate_tac ~2 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   764
by (Asm_full_simp_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   765
10835
nipkow
parents: 10230
diff changeset
   766
by (subgoal_tac "Filter (%a. a:act A & a:ext B)$y1=nil" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   767
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   768
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   769
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   770
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   771
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   772
by (Fast_tac 2);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   773
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   774
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   775
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   776
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   777
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   778
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   779
by (res_inst_tac [("t","schA")] ssubst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   780
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   781
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   782
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   783
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   784
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   785
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   786
by (rtac take_reduction 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   787
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   788
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   789
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   790
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   791
by (rtac refl 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   792
by (asm_full_simp_tac (simpset() addsimps [int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   793
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   794
by (rotate_tac ~11 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   795
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   796
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   797
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   798
(* assumption Forall tr *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   799
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   800
(* assumption schB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   801
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc,ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   802
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   803
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   804
by (dres_inst_tac [("x","schA"),
10835
nipkow
parents: 10230
diff changeset
   805
                   ("g","Filter (%a. a:act A)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   806
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   807
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   808
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   809
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   810
by (forw_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   811
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   812
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   813
(* assumption Forall schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   814
by (dres_inst_tac [("s","schA"),
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   815
                   ("P","Forall (%x. x:act A)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   816
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   817
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, int_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   818
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   819
(* case x:actions(asig_of A) & x: actions(asig_of B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   820
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   821
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   822
by (rotate_tac ~2 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   823
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   824
10835
nipkow
parents: 10230
diff changeset
   825
by (subgoal_tac "Filter (%a. a:act A & a:ext B)$y1=nil" 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   826
by (rotate_tac ~1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   827
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   828
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   829
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   830
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   831
by (Fast_tac 2);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   832
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   833
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   834
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   835
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   836
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   837
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   838
by (res_inst_tac [("t","schA")] ssubst 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   839
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   840
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   841
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   842
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   843
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   844
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   845
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   846
                              not_ext_is_int_or_not_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   847
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   848
(* rewrite assumption forall and schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   849
by (rotate_tac 13 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   850
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   851
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   852
(* divide_Seq for schB2 *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   853
by (forw_inst_tac [("y","y2")] (sym RS antisym_less_inverse RS conjunct1 RS divide_Seq) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   854
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   855
(* assumption schA *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   856
by (dres_inst_tac [("x","schA"),
10835
nipkow
parents: 10230
diff changeset
   857
                   ("g","Filter (%a. a:act A)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   858
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   859
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   860
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   861
(* f A (tw iB schB2) = nil *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   862
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext,not_ext_is_int_or_not_act,
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   863
             intA_is_not_actB]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   864
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   865
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   866
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   867
by (rtac take_reduction 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   868
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   869
by (rtac refl 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   870
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   871
(* now conclusion fulfills induction hypothesis, but assumptions are not all ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   872
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   873
(* assumption schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   874
by (dres_inst_tac [("x","y2"),
10835
nipkow
parents: 10230
diff changeset
   875
                   ("g","Filter (%a. a:act B)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   876
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   877
by (asm_full_simp_tac (simpset() addsimps [intA_is_not_actB,int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   878
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   879
(* conclusions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   880
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   881
by (forw_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   882
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   883
by (dres_inst_tac [("sch","y2"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   884
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   885
(* assumption Forall schA, and Forall schA are performed by ForallTL,ForallDropwhile *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   886
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   887
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   888
(* case x~:A & x:B  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   889
(* cannot occur, as just this case has been scheduled out before as the B-only prefix *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   890
by (case_tac "x:act B" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   891
by (Fast_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   892
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   893
(* case x~:A & x~:B  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   894
(* cannot occur because of assumption: Forall (a:ext A | a:ext B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   895
by (rotate_tac ~9 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   896
(* reduce forall assumption from tr to (x>>rs) *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   897
by (asm_full_simp_tac (simpset() addsimps [externals_of_par]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   898
by (REPEAT (etac conjE 1));
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   899
by (fast_tac (claset() addSIs [ext_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   900
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   901
qed"FilterAmksch_is_schA";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   902
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   903
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   904
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   905
(*---------------------------------------------------------------------------  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   906
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   907
   section" Filter of mksch(tr,schA,schB) to B is schB -- take lemma proof";
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
   908
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   909
(*  --------------------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   910
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   911
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   912
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   913
Goal "!! A B. [| compatible A B; compatible B A; \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   914
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   915
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   916
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
10835
nipkow
parents: 10230
diff changeset
   917
\ Filter (%a. a:ext A)$schA = Filter (%a. a:act A)$tr &\
nipkow
parents: 10230
diff changeset
   918
\ Filter (%a. a:ext B)$schB = Filter (%a. a:act B)$tr &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   919
\ LastActExtsch A schA & LastActExtsch B schB  \
10835
nipkow
parents: 10230
diff changeset
   920
\ --> Filter (%a. a:act B)$(mksch A B$tr$schA$schB) = schB";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   921
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   922
by (strip_tac 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 3842
diff changeset
   923
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   924
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   925
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   926
back();back();back();back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   927
by (res_inst_tac [("x","schA")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   928
by (res_inst_tac [("x","schB")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   929
by (res_inst_tac [("x","tr")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   930
by (thin_tac' 5 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7499
diff changeset
   931
by (rtac nat_less_induct 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   932
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   933
ren "tr schB schA" 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   934
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   935
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   936
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   937
by (case_tac "Forall (%x. x:act A & x~:act B) tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   938
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   939
by (rtac (seq_take_lemma RS iffD2 RS spec) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   940
by (thin_tac' 5 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   941
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   942
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   943
by (case_tac "Finite tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   944
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   945
(* both sides of this equation are nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   946
by (subgoal_tac "schB=nil" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   947
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   948
(* first side: mksch = nil *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   949
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallAnBmksch,FiniteL_mksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   950
                           simpset())) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   951
(* second side: schA = nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   952
by (eres_inst_tac [("A","B")] LastActExtimplnil 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   953
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   954
by (eres_inst_tac [("Q","%x. x:act A & x~:act B")] ForallQFilterPnil 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   955
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   956
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   957
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   958
(* case ~ Finite tr *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   959
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   960
(* both sides of this equation are UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   961
by (subgoal_tac "schB=UU" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   962
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   963
(* first side: mksch = UU *)
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   964
by (force_tac (claset() addSIs [ForallQFilterPUU,
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   965
                                (finiteR_mksch RS mp COMP rev_contrapos),
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   966
                                  ForallAnBmksch],
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   967
               simpset()) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   968
(* schA = UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   969
by (eres_inst_tac [("A","B")] LastActExtimplUU 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   970
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   971
by (eres_inst_tac [("Q","%x. x:act A & x~:act B")] ForallQFilterPUU 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   972
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   973
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   974
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   975
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   976
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   977
by (dtac divide_Seq3 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   978
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   979
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   980
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   981
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   982
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   983
(* bring in lemma reduceB_mksch *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   984
by (forw_inst_tac [("y","schB"),("x","schA"),("A","A"),("B","B")] reduceB_mksch 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   985
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   986
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   987
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   988
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   989
(* use reduceB_mksch to rewrite conclusion *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   990
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   991
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   992
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   993
(* eliminate the A-only prefix *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   994
10835
nipkow
parents: 10230
diff changeset
   995
by (subgoal_tac "(Filter (%a. a :act B)$x1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   996
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   997
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   998
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   999
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1000
(* Now real recursive step follows (in x) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1001
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1002
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1003
by (case_tac "x:act B" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1004
by (case_tac "x~:act A" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1005
by (rotate_tac ~2 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1006
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1007
10835
nipkow
parents: 10230
diff changeset
  1008
by (subgoal_tac "Filter (%a. a:act B & a:ext A)$x1=nil" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1009
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1010
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1011
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1012
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1013
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1014
by (Fast_tac 2);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1015
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1016
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1017
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1018
by (REPEAT (etac conjE 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1019
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1020
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1021
by (res_inst_tac [("t","schB")] ssubst 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1022
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1023
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1024
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1025
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1026
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1027
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1028
by (rtac take_reduction 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1029
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1030
(* f B (tw iB) = tw ~eB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1031
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1032
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1033
by (rtac refl 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1034
by (asm_full_simp_tac (simpset() addsimps [int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1035
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1036
by (rotate_tac ~11 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1037
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1038
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1039
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1040
(* assumption Forall tr *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1041
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1042
(* assumption schA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1043
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc,ext_and_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1044
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1045
(* assumption schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1046
by (dres_inst_tac [("x","schB"),
10835
nipkow
parents: 10230
diff changeset
  1047
                   ("g","Filter (%a. a:act B)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1048
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1049
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1050
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1051
by (dres_inst_tac [("sch","schB"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1052
by (forw_inst_tac [("sch1.0","x1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1053
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1054
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1055
(* assumption Forall schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1056
by (dres_inst_tac [("s","schB"),
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1057
                   ("P","Forall (%x. x:act B)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1058
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1059
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, int_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1060
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1061
(* case x:actions(asig_of A) & x: actions(asig_of B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1062
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1063
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1064
by (rotate_tac ~2 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1065
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1066
10835
nipkow
parents: 10230
diff changeset
  1067
by (subgoal_tac "Filter (%a. a:act B & a:ext A)$x1=nil" 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1068
by (rotate_tac ~1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1069
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1070
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1071
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1072
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1073
by (Fast_tac 2);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1074
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1075
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1076
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1077
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1078
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1079
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1080
by (res_inst_tac [("t","schB")] ssubst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1081
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1082
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1083
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1084
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1085
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1086
(* f B (tw iB) = tw ~eB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1087
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1088
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1089
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1090
(* rewrite assumption forall and schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1091
by (rotate_tac 13 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1092
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1093
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1094
(* divide_Seq for schB2 *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1095
by (forw_inst_tac [("y","x2")] (sym RS antisym_less_inverse RS conjunct1 RS divide_Seq) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1096
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1097
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1098
by (dres_inst_tac [("x","schB"),
10835
nipkow
parents: 10230
diff changeset
  1099
                   ("g","Filter (%a. a:act B)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1100
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1101
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1102
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1103
(* f B (tw iA schA2) = nil *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1104
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext,not_ext_is_int_or_not_act,
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1105
             intA_is_not_actB]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1106
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1107
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1108
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1109
by (rtac take_reduction 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1110
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1111
by (rtac refl 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1112
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1113
(* now conclusion fulfills induction hypothesis, but assumptions are not all ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1114
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1115
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1116
by (dres_inst_tac [("x","x2"),
10835
nipkow
parents: 10230
diff changeset
  1117
                   ("g","Filter (%a. a:act A)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1118
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1119
by (asm_full_simp_tac (simpset() addsimps [intA_is_not_actB,int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1120
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1121
(* conclusions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1122
by (dres_inst_tac [("sch","schB"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1123
by (forw_inst_tac [("sch1.0","x1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1124
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1125
by (dres_inst_tac [("sch","x2"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1126
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1127
(* assumption Forall schA, and Forall schA are performed by ForallTL,ForallDropwhile *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1128
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1129
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1130
(* case x~:B & x:A  *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1131
(* cannot occur, as just this case has been scheduled out before as the B-only prefix *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1132
by (case_tac "x:act A" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1133
by (Fast_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1134
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1135
(* case x~:B & x~:A  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1136
(* cannot occur because of assumption: Forall (a:ext A | a:ext B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1137
by (rotate_tac ~9 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1138
(* reduce forall assumption from tr to (x>>rs) *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1139
by (asm_full_simp_tac (simpset() addsimps [externals_of_par]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1140
by (REPEAT (etac conjE 1));
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1141
by (fast_tac (claset() addSIs [ext_is_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1142
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1143
qed"FilterBmksch_is_schB";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1144
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1145
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1146
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1147
(* ------------------------------------------------------------------ *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1148
         section"COMPOSITIONALITY on TRACE Level -- Main Theorem";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1149
(* ------------------------------------------------------------------ *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1150
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1151
Goal
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1152
"!! A B. [| is_trans_of A; is_trans_of B; compatible A B; compatible B A; \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1153
\           is_asig(asig_of A); is_asig(asig_of B)|] \
11655
923e4d0d36d5 tuned parentheses in relational expressions;
wenzelm
parents: 10835
diff changeset
  1154
\       ==>  (tr: traces(A||B)) = \
10835
nipkow
parents: 10230
diff changeset
  1155
\            (Filter (%a. a:act A)$tr : traces A &\
nipkow
parents: 10230
diff changeset
  1156
\             Filter (%a. a:act B)$tr : traces B &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1157
\             Forall (%x. x:ext(A||B)) tr)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1158
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1159
by (simp_tac (simpset() addsimps [traces_def,has_trace_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1160
by (safe_tac set_cs);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1161
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1162
(* ==> *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1163
(* There is a schedule of A *)
10835
nipkow
parents: 10230
diff changeset
  1164
by (res_inst_tac [("x","Filter (%a. a:act A)$sch")] bexI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1165
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 2);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1166
by (asm_full_simp_tac (simpset() addsimps [compatibility_consequence1,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1167
                  externals_of_par,ext1_ext2_is_not_act1]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1168
(* There is a schedule of B *)
10835
nipkow
parents: 10230
diff changeset
  1169
by (res_inst_tac [("x","Filter (%a. a:act B)$sch")] bexI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1170
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 2);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1171
by (asm_full_simp_tac (simpset() addsimps [compatibility_consequence2,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1172
                  externals_of_par,ext1_ext2_is_not_act2]) 1);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 15531
diff changeset
  1173
(* Traces of A||B have only external actions from A or B *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1174
by (rtac ForallPFilterP 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1175
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1176
(* <== *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1177
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1178
(* replace schA and schB by Cut(schA) and Cut(schB) *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1179
by (dtac exists_LastActExtsch 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1180
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1181
by (dtac exists_LastActExtsch 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1182
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1183
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1184
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1185
(* Schedules of A(B) have only actions of A(B) *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1186
by (dtac scheds_in_sig 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1187
by (assume_tac 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1188
by (dtac scheds_in_sig 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1189
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1190
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1191
ren "h1 h2 schA schB" 1;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1192
(* mksch is exactly the construction of trA||B out of schA, schB, and the oracle tr,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1193
   we need here *)
10835
nipkow
parents: 10230
diff changeset
  1194
by (res_inst_tac [("x","mksch A B$tr$schA$schB")] bexI 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1195
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1196
(* External actions of mksch are just the oracle *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1197
by (asm_full_simp_tac (simpset() addsimps [FilterA_mksch_is_tr RS spec RS spec RS mp]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1198
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1199
(* mksch is a schedule -- use compositionality on sch-level *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1200
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1201
by (asm_full_simp_tac (simpset() addsimps [FilterAmksch_is_schA,FilterBmksch_is_schB]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1202
by (etac ForallAorB_mksch 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1203
by (etac ForallPForallQ 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1204
by (etac ext_is_act 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1205
qed"compositionality_tr";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1206
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1207
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1208
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1209
(* ------------------------------------------------------------------ *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1210
(*           COMPOSITIONALITY   on    TRACE         Level             *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1211
(*                            For Modules                             *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1212
(* ------------------------------------------------------------------ *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1213
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1214
Goalw [Traces_def,par_traces_def]
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1215
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1216
"!! A B. [| is_trans_of A; is_trans_of B; compatible A B; compatible B A; \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1217
\           is_asig(asig_of A); is_asig(asig_of B)|] \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1218
\==> Traces (A||B) = par_traces (Traces A) (Traces B)";
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1219
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1220
by (asm_full_simp_tac (simpset() addsimps [asig_of_par]) 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
  1221
by (rtac set_ext 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1222
by (asm_full_simp_tac (simpset() addsimps [compositionality_tr,externals_of_par]) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1223
qed"compositionality_tr_modules";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1224
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1225
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14981
diff changeset
  1226
simpset_ref () := simpset() setmksym (SOME o symmetric_fun);