src/HOLCF/IOA/meta_theory/CompoTraces.ML
author nipkow
Wed, 06 Sep 2000 17:17:08 +0200
changeset 9877 b2a62260f8ac
parent 7499 23e090051cb8
child 10230 5eb935d6cc69
permissions -rw-r--r--
less_induct -> nat_less_induct
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    53
Goal "mksch A B`UU`schA`schB = UU";
3071
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    58
Goal "mksch A B`nil`schA`schB = nil";
3071
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
6161
paulson
parents: 5068
diff changeset
    63
Goal "[|x:act A;x~:act B|]  \
3071
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);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    70
by (asm_full_simp_tac (simpset() addsimps [Consq_def,If_and_if]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    71
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    72
qed"mksch_cons1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    73
6161
paulson
parents: 5068
diff changeset
    74
Goal "[|x~:act A;x:act B|] \
3071
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);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    81
by (asm_full_simp_tac (simpset() addsimps [Consq_def,If_and_if]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    82
by (simp_tac (simpset() addsimps [Consq_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
6161
paulson
parents: 5068
diff changeset
    85
Goal "[|x:act A;x:act B|] \
3071
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);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    94
by (asm_full_simp_tac (simpset() addsimps [Consq_def,If_and_if]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    95
by (simp_tac (simpset() addsimps [Consq_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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   117
Goal "(eB & ~eA --> ~A) -->       \
3071
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   125
Goal "(eB & ~eA --> ~A) -->       \
3071
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   149
Goal "!!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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   176
Goal "!!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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   187
Goal "!!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
6161
paulson
parents: 5068
diff changeset
   202
Goal "[| 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 *)
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4813
diff changeset
   212
by (Asm_full_simp_tac 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
6161
paulson
parents: 5068
diff changeset
   275
Goal " [| Finite bs; is_asig(asig_of A); is_asig(asig_of B);compatible A B|] ==>  \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   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
6161
paulson
parents: 5068
diff changeset
   329
Goal " [| Finite as; is_asig(asig_of A); is_asig(asig_of B);compatible A B|] ==>  \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   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
6161
paulson
parents: 5068
diff changeset
   382
Goal "Finite y ==> ! z tr. Forall (%a.a:ext (A||B)) tr & \
3314
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   441
Goal "(x>>xs = y @@ z) = ((y=nil & x>>xs=z) | (? ys. y=x>>ys & xs=ys@@z))";
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   446
Goal "!! (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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   453
Goal "~ 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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   469
Goal 
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 *)
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4813
diff changeset
   482
by (Asm_full_simp_tac 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 *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   486
by (ftac divide_Seq 1);
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   487
by (ftac divide_Seq 1);
3071
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 *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   504
by (ftac divide_Seq 1);
4520
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 *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   516
by (ftac divide_Seq 1);
3071
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   546
Goal "!! 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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   680
Goal "!! 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);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7499
diff changeset
   698
by (rtac nat_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,
4813
14cea5b1d12f layout improvement
oheimb
parents: 4678
diff changeset
   732
        (finiteR_mksch RS mp COMP rev_contrapos),ForallBnAmksch],simpset())) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   733
(* schA = UU *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   734
by (eres_inst_tac [("A","A")] LastActExtimplUU 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   735
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   736
by (eres_inst_tac [("Q","%x. x:act B & x~:act A")] ForallQFilterPUU 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   737
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   738
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   739
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   740
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   741
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   742
by (dtac divide_Seq3 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   743
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   744
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   745
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   746
by (hyp_subst_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   747
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   748
(* bring in lemma reduceA_mksch *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   749
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
   750
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   751
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   752
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   753
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   754
(* use reduceA_mksch to rewrite conclusion *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   755
by (hyp_subst_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   756
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   757
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   758
(* eliminate the B-only prefix *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   759
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   760
by (subgoal_tac "(Filter (%a. a :act A)`y1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   761
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   762
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   763
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   764
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   765
(* Now real recursive step follows (in y) *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   766
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   767
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   768
by (case_tac "x:act A" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   769
by (case_tac "x~:act B" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   770
by (rotate_tac ~2 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   771
by (Asm_full_simp_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   772
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   773
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
   774
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   775
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   776
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   777
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   778
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   779
by (Fast_tac 2);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   780
 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   781
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   782
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
   783
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   784
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   785
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   786
by (res_inst_tac [("t","schA")] ssubst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   787
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   788
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   789
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   790
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   791
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   792
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   793
by (rtac take_reduction 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   794
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   795
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   796
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   797
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   798
by (rtac refl 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   799
by (asm_full_simp_tac (simpset() addsimps [int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   800
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   801
by (rotate_tac ~11 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   802
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   803
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   804
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   805
(* assumption Forall tr *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   806
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   807
(* assumption schB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   808
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
   809
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   810
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   811
by (dres_inst_tac [("x","schA"),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   812
                   ("g","Filter (%a. a:act A)`rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   813
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   814
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   815
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   816
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   817
by (forw_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   818
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   819
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   820
(* assumption Forall schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   821
by (dres_inst_tac [("s","schA"),
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   822
                   ("P","Forall (%x. x:act A)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   823
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   824
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, int_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   825
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   826
(* case x:actions(asig_of A) & x: actions(asig_of B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   827
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   828
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   829
by (rotate_tac ~2 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   830
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   831
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   832
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
   833
by (rotate_tac ~1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   834
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   835
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   836
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   837
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   838
by (Fast_tac 2);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   839
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   840
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   841
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
   842
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   843
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   844
(* 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
   845
by (res_inst_tac [("t","schA")] ssubst 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   846
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   847
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   848
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   849
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   850
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   851
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   852
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   853
                              not_ext_is_int_or_not_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   854
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   855
(* rewrite assumption forall and schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   856
by (rotate_tac 13 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   857
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   858
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   859
(* divide_Seq for schB2 *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   860
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
   861
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   862
(* assumption schA *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   863
by (dres_inst_tac [("x","schA"),
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   864
                   ("g","Filter (%a. a:act A)`rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   865
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   866
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   867
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   868
(* f A (tw iB schB2) = nil *) 
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   869
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
   870
             intA_is_not_actB]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   871
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   872
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   873
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   874
by (rtac take_reduction 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   875
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   876
by (rtac refl 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   877
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   878
(* now conclusion fulfills induction hypothesis, but assumptions are not all ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   879
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   880
(* assumption schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   881
by (dres_inst_tac [("x","y2"),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   882
                   ("g","Filter (%a. a:act B)`rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   883
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   884
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
   885
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   886
(* conclusions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   887
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   888
by (forw_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   889
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   890
by (dres_inst_tac [("sch","y2"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   891
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   892
(* assumption Forall schA, and Forall schA are performed by ForallTL,ForallDropwhile *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   893
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   894
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   895
(* case x~:A & x:B  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   896
(* 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
   897
by (case_tac "x:act B" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   898
by (Fast_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   899
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   900
(* case x~:A & x~:B  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   901
(* cannot occur because of assumption: Forall (a:ext A | a:ext B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   902
by (rotate_tac ~9 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   903
(* reduce forall assumption from tr to (x>>rs) *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   904
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
   905
by (REPEAT (etac conjE 1));
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   906
by (fast_tac (claset() addSIs [ext_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   907
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   908
qed"FilterAmksch_is_schA";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   909
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   910
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   911
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   912
(*---------------------------------------------------------------------------  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   913
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   914
   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
   915
                
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   916
(*  --------------------------------------------------------------------------- *)
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   920
Goal "!! A B. [| compatible A B; compatible B A; \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   921
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   922
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   923
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   924
\ Filter (%a. a:ext A)`schA = Filter (%a. a:act A)`tr &\
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   925
\ Filter (%a. a:ext B)`schB = Filter (%a. a:act B)`tr &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   926
\ LastActExtsch A schA & LastActExtsch B schB  \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   927
\ --> Filter (%a. a:act B)`(mksch A B`tr`schA`schB) = schB";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   928
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   929
by (strip_tac 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 3842
diff changeset
   930
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   931
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   932
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   933
back();back();back();back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   934
by (res_inst_tac [("x","schA")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   935
by (res_inst_tac [("x","schB")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   936
by (res_inst_tac [("x","tr")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   937
by (thin_tac' 5 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7499
diff changeset
   938
by (rtac nat_less_induct 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   939
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   940
ren "tr schB schA" 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   941
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   942
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   943
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   944
by (case_tac "Forall (%x. x:act A & x~:act B) tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   945
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   946
by (rtac (seq_take_lemma RS iffD2 RS spec) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   947
by (thin_tac' 5 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   948
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   949
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   950
by (case_tac "Finite tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   951
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   952
(* both sides of this equation are nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   953
by (subgoal_tac "schB=nil" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   954
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   955
(* first side: mksch = nil *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   956
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallAnBmksch,FiniteL_mksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   957
                           simpset())) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   958
(* second side: schA = nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   959
by (eres_inst_tac [("A","B")] LastActExtimplnil 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   960
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   961
by (eres_inst_tac [("Q","%x. x:act A & x~:act B")] ForallQFilterPnil 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   962
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   963
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   964
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   965
(* case ~ Finite tr *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   966
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   967
(* both sides of this equation are UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   968
by (subgoal_tac "schB=UU" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   969
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   970
(* first side: mksch = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   971
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   972
                                           (finiteR_mksch RS mp COMP rev_contrapos),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   973
                                            ForallAnBmksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   974
                           simpset())) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   975
(* schA = UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   976
by (eres_inst_tac [("A","B")] LastActExtimplUU 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   977
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   978
by (eres_inst_tac [("Q","%x. x:act A & x~:act B")] ForallQFilterPUU 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   979
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   980
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   981
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   982
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   983
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   984
by (dtac divide_Seq3 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   985
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   986
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   987
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   988
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   989
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   990
(* bring in lemma reduceB_mksch *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   991
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
   992
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   993
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   994
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   995
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   996
(* use reduceB_mksch to rewrite conclusion *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   997
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   998
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   999
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1000
(* eliminate the A-only prefix *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1001
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1002
by (subgoal_tac "(Filter (%a. a :act B)`x1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1003
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1004
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1005
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1006
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1007
(* Now real recursive step follows (in x) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1008
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1009
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1010
by (case_tac "x:act B" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1011
by (case_tac "x~:act A" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1012
by (rotate_tac ~2 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1013
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1014
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1015
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
  1016
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1017
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1018
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1019
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1020
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1021
by (Fast_tac 2);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1022
 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1023
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1024
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
  1025
by (REPEAT (etac conjE 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1026
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1027
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1028
by (res_inst_tac [("t","schB")] ssubst 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1029
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1030
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1031
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1032
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1033
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1034
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1035
by (rtac take_reduction 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1036
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1037
(* f B (tw iB) = tw ~eB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1038
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1039
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1040
by (rtac refl 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1041
by (asm_full_simp_tac (simpset() addsimps [int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1042
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1043
by (rotate_tac ~11 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1044
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1045
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1046
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1047
(* assumption Forall tr *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1048
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1049
(* assumption schA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1050
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
  1051
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1052
(* assumption schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1053
by (dres_inst_tac [("x","schB"),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1054
                   ("g","Filter (%a. a:act B)`rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1055
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1056
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1057
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1058
by (dres_inst_tac [("sch","schB"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1059
by (forw_inst_tac [("sch1.0","x1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1060
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1061
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1062
(* assumption Forall schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1063
by (dres_inst_tac [("s","schB"),
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1064
                   ("P","Forall (%x. x:act B)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1065
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1066
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, int_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1067
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1068
(* case x:actions(asig_of A) & x: actions(asig_of B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1069
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1070
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1071
by (rotate_tac ~2 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1072
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1073
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1074
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
  1075
by (rotate_tac ~1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1076
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1077
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1078
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1079
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1080
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1081
 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1082
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1083
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
  1084
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1085
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1086
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1087
by (res_inst_tac [("t","schB")] ssubst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1088
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1089
back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1090
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1091
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1092
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1093
(* f B (tw iB) = tw ~eB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1094
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1095
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1096
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1097
(* rewrite assumption forall and schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1098
by (rotate_tac 13 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1099
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1100
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1101
(* divide_Seq for schB2 *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1102
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
  1103
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1104
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1105
by (dres_inst_tac [("x","schB"),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1106
                   ("g","Filter (%a. a:act B)`rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1107
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1108
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1109
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1110
(* f B (tw iA schA2) = nil *) 
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1111
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
  1112
             intA_is_not_actB]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1113
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1114
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1115
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1116
by (rtac take_reduction 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1117
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1118
by (rtac refl 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1119
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1120
(* now conclusion fulfills induction hypothesis, but assumptions are not all ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1121
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1122
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1123
by (dres_inst_tac [("x","x2"),
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1124
                   ("g","Filter (%a. a:act A)`rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1125
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1126
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
  1127
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1128
(* conclusions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1129
by (dres_inst_tac [("sch","schB"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1130
by (forw_inst_tac [("sch1.0","x1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1131
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1132
by (dres_inst_tac [("sch","x2"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1133
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1134
(* assumption Forall schA, and Forall schA are performed by ForallTL,ForallDropwhile *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1135
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1136
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1137
(* case x~:B & x:A  *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1138
(* 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
  1139
by (case_tac "x:act A" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1140
by (Fast_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1141
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1142
(* case x~:B & x~:A  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1143
(* cannot occur because of assumption: Forall (a:ext A | a:ext B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1144
by (rotate_tac ~9 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1145
(* reduce forall assumption from tr to (x>>rs) *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1146
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
  1147
by (REPEAT (etac conjE 1));
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1148
by (fast_tac (claset() addSIs [ext_is_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1149
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1150
qed"FilterBmksch_is_schB";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1151
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1152
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
(* ------------------------------------------------------------------ *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1155
         section"COMPOSITIONALITY on TRACE Level -- Main Theorem";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1156
(* ------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1157
 
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1158
Goal 
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1159
"!! 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
  1160
\           is_asig(asig_of A); is_asig(asig_of B)|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1161
\       ==>  tr: traces(A||B) = \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1162
\            (Filter (%a. a:act A)`tr : traces A &\
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1163
\             Filter (%a. a:act B)`tr : traces B &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1164
\             Forall (%x. x:ext(A||B)) tr)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1165
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1166
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
  1167
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1168
 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1169
(* ==> *) 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1170
(* There is a schedule of A *)
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1171
by (res_inst_tac [("x","Filter (%a. a:act A)`sch")] bexI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1172
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 2);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1173
by (asm_full_simp_tac (simpset() addsimps [compatibility_consequence1,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1174
                  externals_of_par,ext1_ext2_is_not_act1]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1175
(* There is a schedule of B *)
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1176
by (res_inst_tac [("x","Filter (%a. a:act B)`sch")] bexI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1177
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 2);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1178
by (asm_full_simp_tac (simpset() addsimps [compatibility_consequence2,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1179
                  externals_of_par,ext1_ext2_is_not_act2]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1180
(* Traces of A||B have only external actions from A or B *)  
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1181
by (rtac ForallPFilterP 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1182
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1183
(* <== *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1184
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1185
(* replace schA and schB by Cut(schA) and Cut(schB) *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1186
by (dtac exists_LastActExtsch 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1187
by (assume_tac 1);
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 (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1191
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1192
(* Schedules of A(B) have only actions of A(B) *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1193
by (dtac scheds_in_sig 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1194
by (assume_tac 1);
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);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1197
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1198
ren "h1 h2 schA schB" 1;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1199
(* 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
  1200
   we need here *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1201
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
  1202
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1203
(* External actions of mksch are just the oracle *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1204
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
  1205
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1206
(* mksch is a schedule -- use compositionality on sch-level *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1207
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1208
by (asm_full_simp_tac (simpset() addsimps [FilterAmksch_is_schA,FilterBmksch_is_schB]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1209
by (etac ForallAorB_mksch 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1210
by (etac ForallPForallQ 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1211
by (etac ext_is_act 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1212
qed"compositionality_tr";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1213
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1214
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1215
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1216
(* ------------------------------------------------------------------ *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1217
(*           COMPOSITIONALITY   on    TRACE         Level             *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1218
(*                            For Modules                             *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1219
(* ------------------------------------------------------------------ *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1220
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1221
Goalw [Traces_def,par_traces_def]
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1222
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1223
"!! 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
  1224
\           is_asig(asig_of A); is_asig(asig_of B)|] \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1225
\==> Traces (A||B) = par_traces (Traces A) (Traces B)";
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1226
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1227
by (asm_full_simp_tac (simpset() addsimps [asig_of_par]) 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
  1228
by (rtac set_ext 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1229
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
  1230
qed"compositionality_tr_modules";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1231
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1232
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1233
simpset_ref () := simpset() setmksym (Some o symmetric_fun);