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