src/HOLCF/IOA/meta_theory/CompoTraces.ML
author wenzelm
Thu, 15 Feb 2001 17:18:54 +0100
changeset 11145 3e47692e3a3e
parent 10835 f4745d77e620
child 11655 923e4d0d36d5
permissions -rw-r--r--
eliminate get_def;
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 \ 
10835
nipkow
parents: 10230
diff changeset
    27
\                   ((Takewhile (%a. a:int A)$schA) \
nipkow
parents: 10230
diff changeset
    28
\                         @@(Takewhile (%a. a:int B)$schB) \
nipkow
parents: 10230
diff changeset
    29
\                              @@(y>>(mksch A B$xs   \
nipkow
parents: 10230
diff changeset
    30
\                                       $(TL$(Dropwhile (%a. a:int A)$schA))  \
nipkow
parents: 10230
diff changeset
    31
\                                       $(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  \
10835
nipkow
parents: 10230
diff changeset
    34
\                 ((Takewhile (%a. a:int A)$schA)  \
nipkow
parents: 10230
diff changeset
    35
\                      @@ (y>>(mksch A B$xs  \
nipkow
parents: 10230
diff changeset
    36
\                              $(TL$(Dropwhile (%a. a:int A)$schA))  \
nipkow
parents: 10230
diff changeset
    37
\                              $schB)))  \
3071
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  \ 
10835
nipkow
parents: 10230
diff changeset
    41
\                 ((Takewhile (%a. a:int B)$schB)  \
nipkow
parents: 10230
diff changeset
    42
\                       @@ (y>>(mksch A B$xs   \
nipkow
parents: 10230
diff changeset
    43
\                              $schA   \
nipkow
parents: 10230
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
10835
nipkow
parents: 10230
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
10835
nipkow
parents: 10230
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|]  \
10835
nipkow
parents: 10230
diff changeset
    64
\   ==> mksch A B$(x>>tr)$schA$schB = \
nipkow
parents: 10230
diff changeset
    65
\         (Takewhile (%a. a:int A)$schA) \
nipkow
parents: 10230
diff changeset
    66
\         @@ (x>>(mksch A B$tr$(TL$(Dropwhile (%a. a:int A)$schA)) \
nipkow
parents: 10230
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|] \
10835
nipkow
parents: 10230
diff changeset
    75
\   ==> mksch A B$(x>>tr)$schA$schB = \
nipkow
parents: 10230
diff changeset
    76
\        (Takewhile (%a. a:int B)$schB)  \
nipkow
parents: 10230
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|] \
10835
nipkow
parents: 10230
diff changeset
    86
\   ==> mksch A B$(x>>tr)$schA$schB = \
nipkow
parents: 10230
diff changeset
    87
\            (Takewhile (%a. a:int A)$schA) \
nipkow
parents: 10230
diff changeset
    88
\         @@ ((Takewhile (%a. a:int B)$schB)  \
nipkow
parents: 10230
diff changeset
    89
\         @@ (x>>(mksch A B$tr$(TL$(Dropwhile (%a. a:int A)$schA)) \
nipkow
parents: 10230
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 \
10835
nipkow
parents: 10230
diff changeset
   151
\   --> Forall (%x. x:act (A||B)) (mksch A B$tr$schA$schB)";
3071
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 \
10835
nipkow
parents: 10230
diff changeset
   178
\   --> Forall (%x. x:act B & x~:act A) (mksch A B$tr$schA$schB))";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   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 \
10835
nipkow
parents: 10230
diff changeset
   189
\   --> Forall (%x. x:act A & x~:act B) (mksch A B$tr$schA$schB))";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   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 & \
10835
nipkow
parents: 10230
diff changeset
   204
\          Filter (%a. a:ext A)$x = Filter (%a. a:act A)$tr & \
nipkow
parents: 10230
diff changeset
   205
\          Filter (%a. a:ext B)$y = Filter (%a. a:act B)$tr &\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   206
\          Forall (%x. x:ext (A||B)) tr \
10835
nipkow
parents: 10230
diff changeset
   207
\          --> Finite (mksch A B$tr$x$y)";
3071
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"),
10835
nipkow
parents: 10230
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"),
10835
nipkow
parents: 10230
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"),
10835
nipkow
parents: 10230
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"),
10835
nipkow
parents: 10230
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 &\
10835
nipkow
parents: 10230
diff changeset
   277
\    Filter (%a. a:ext B)$y = Filter (%a. a:act B)$(bs @@ z) \
nipkow
parents: 10230
diff changeset
   278
\    --> (? y1 y2.  (mksch A B$(bs @@ z)$x$y) = (y1 @@ (mksch A B$z$x$y2)) & \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   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) & \
10835
nipkow
parents: 10230
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"),
10835
nipkow
parents: 10230
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 *)
10835
nipkow
parents: 10230
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 *)
10835
nipkow
parents: 10230
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 &\
10835
nipkow
parents: 10230
diff changeset
   331
\    Filter (%a. a:ext A)$x = Filter (%a. a:act A)$(as @@ z) \
nipkow
parents: 10230
diff changeset
   332
\    --> (? x1 x2.  (mksch A B$(as @@ z)$x$y) = (x1 @@ (mksch A B$z$x2$y)) & \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   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) & \
10835
nipkow
parents: 10230
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"),
10835
nipkow
parents: 10230
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 *)
10835
nipkow
parents: 10230
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 *)
10835
nipkow
parents: 10230
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 & \
10835
nipkow
parents: 10230
diff changeset
   383
\                             y = z @@ mksch A B$tr$a$b\
3314
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);
10835
nipkow
parents: 10230
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)";
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   454
by (auto_tac (claset() addDs [FiniteConcUU1], simpset()));
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   455
qed"FiniteConcUU";
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   456
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   457
finiteR_mksch
10835
nipkow
parents: 10230
diff changeset
   458
  "Finite (mksch A B$tr$x$y) --> Finite tr"
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   459
*)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   460
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   461
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   462
 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   463
(*------------------------------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   464
 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
   465
(*                             structural induction
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   466
  ------------------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   467
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   468
Goal 
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3361
diff changeset
   469
"!! A B. [| compatible A B; compatible B A;\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   470
\           is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   471
\ ! schA schB. Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   472
\ Forall (%x. x:ext (A||B)) tr & \
10835
nipkow
parents: 10230
diff changeset
   473
\ Filter (%a. a:act A)$tr << Filter (%a. a:ext A)$schA &\
nipkow
parents: 10230
diff changeset
   474
\ Filter (%a. a:act B)$tr << Filter (%a. a:ext B)$schB  \
nipkow
parents: 10230
diff changeset
   475
\ --> 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
   476
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   477
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
   478
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   479
(* main case *) 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   480
(* splitting into 4 cases according to a:A, a:B *)
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4813
diff changeset
   481
by (Asm_full_simp_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   482
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   483
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   484
(* Case a:A, a:B *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   485
by (ftac divide_Seq 1);
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   486
by (ftac divide_Seq 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   487
back();
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   488
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   489
(* filtering internals of A in schA and of B in schB is nil *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   490
by (asm_full_simp_tac (simpset() addsimps 
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   491
          [not_ext_is_int_or_not_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   492
           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
   493
(* 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
   494
by (dres_inst_tac [("x","schA")] subst_lemma1 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   495
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   496
by (dres_inst_tac [("x","schB")] subst_lemma1 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   497
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   498
(* IH *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   499
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
   500
                   ForallTL,ForallDropwhile]) 1);
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   501
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   502
(* Case a:A, a~:B *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   503
by (ftac divide_Seq 1);
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   504
by (REPEAT (etac conjE 1));
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   505
(* filtering internals of A is nil *)
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   506
by (asm_full_simp_tac (simpset() addsimps 
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   507
          [not_ext_is_int_or_not_act,
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   508
           externals_of_par, intA_is_not_extB,int_is_not_ext]) 1);
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   509
by (dres_inst_tac [("x","schA")] subst_lemma1 1);
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   510
by (assume_tac 1);
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   511
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
   512
                    ForallTL,ForallDropwhile]) 1);
4520
d430a1b34928 adapted to new split order;
wenzelm
parents: 4477
diff changeset
   513
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   514
(* Case a:B, a~:A *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7229
diff changeset
   515
by (ftac divide_Seq 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   516
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   517
(* filtering internals of A is nil *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   518
by (asm_full_simp_tac (simpset() addsimps 
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   519
          [not_ext_is_int_or_not_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   520
           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
   521
by (dres_inst_tac [("x","schB")] subst_lemma1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   522
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   523
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   524
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
   525
                    ForallTL,ForallDropwhile]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   526
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   527
(* Case a~:A, a~:B *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   528
by (fast_tac (claset() addSIs [ext_is_act] 
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   529
                      addss (simpset() addsimps [externals_of_par]) ) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   530
qed"FilterA_mksch_is_tr";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   531
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   532
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   533
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   534
(*
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   535
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   536
***************************************************************8
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   537
With uncomplete take lemma rule should be reused afterwards !!!!!!!!!!!!!!!!!
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   538
**********************************************************************
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
              Filter of mksch(tr,schA,schB) to A is schA 
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   542
                             take lemma
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   543
  --------------------------------------------------------------------------- *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   544
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   545
Goal "!! A B. [| compatible A B; compatible B A; \
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   546
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   547
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   548
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
10835
nipkow
parents: 10230
diff changeset
   549
\ Filter (%a. a:ext A)$schA = Filter (%a. a:act A)$tr &\
nipkow
parents: 10230
diff changeset
   550
\ Filter (%a. a:ext B)$schB = Filter (%a. a:act B)$tr &\
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   551
\ LastActExtsch A schA & LastActExtsch B schB  \
10835
nipkow
parents: 10230
diff changeset
   552
\ --> Filter (%a. a:act A)$(mksch A B$tr$schA$schB) = schA";
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   553
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   554
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
   555
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   556
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   557
by (case_tac "Finite s" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   558
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   559
(* both sides of this equation are nil *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   560
by (subgoal_tac "schA=nil" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   561
by (Asm_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   562
(* first side: mksch = nil *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   563
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallBnAmksch,FiniteL_mksch],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   564
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   565
(* second side: schA = nil *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   566
by (eres_inst_tac [("A","A")] LastActExtimplnil 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   567
by (Asm_simp_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   568
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   569
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   570
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   571
(* case ~ Finite s *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   572
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   573
(* both sides of this equation are UU *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   574
by (subgoal_tac "schA=UU" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   575
by (Asm_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   576
(* first side: mksch = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   577
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU,
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   578
                                           (finiteR_mksch RS mp COMP rev_contrapos),
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   579
                                            ForallBnAmksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   580
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   581
(* schA = UU *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   582
by (eres_inst_tac [("A","A")] LastActExtimplUU 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   583
by (Asm_simp_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   584
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU],
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   585
                           simpset())) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   586
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   587
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   588
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   589
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   590
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   591
(* bring in lemma reduceA_mksch *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   592
by (forw_inst_tac [("y","schB"),("x","schA")] reduceA_mksch 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   593
by (REPEAT (atac 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   594
by (REPEAT (etac exE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   595
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   596
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   597
(* use reduceA_mksch to rewrite conclusion *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   598
by (hyp_subst_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   599
by (Asm_full_simp_tac  1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   600
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   601
(* eliminate the B-only prefix *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   602
10835
nipkow
parents: 10230
diff changeset
   603
by (subgoal_tac "(Filter (%a. a :act A)$y1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   604
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   605
by (assume_tac 2);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   606
by (Fast_tac 2);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   607
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   608
(* Now real recursive step follows (in y) *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   609
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   610
by (Asm_full_simp_tac  1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   611
by (case_tac "y:act A" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   612
by (case_tac "y~:act B" 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   613
by (rotate_tac ~2 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   614
by (Asm_full_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   615
10835
nipkow
parents: 10230
diff changeset
   616
by (subgoal_tac "Filter (%a. a:act A & a:ext B)$y1=nil" 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   617
by (rotate_tac ~1 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   618
by (Asm_full_simp_tac  1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   619
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   620
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   621
by (assume_tac 2);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   622
by (Fast_tac 2);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   623
 
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   624
(* bring in divide Seq for s *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   625
by (forward_tac [sym RS antisym_less_inverse RS conjunct1 RS divide_Seq] 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   626
by (REPEAT (etac conjE 1));
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   627
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   628
(* subst divide_Seq in conclusion, but only at the righest occurence *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   629
by (res_inst_tac [("t","schA")] ssubst 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   630
back();
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   631
back();
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   632
back();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   633
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   634
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   635
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   636
by (rtac take_reduction 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   637
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   638
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   639
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   640
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   641
by (rtac refl 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   642
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   643
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   644
(*
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   645
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   646
nacessary anymore ???????????????? 
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   647
by (rotate_tac ~10 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   648
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   649
*)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   650
(* assumption schB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   651
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   652
(* assumption schA *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   653
by (dres_inst_tac [("x","schA"),
10835
nipkow
parents: 10230
diff changeset
   654
                   ("g","Filter (%a. a:act A)$s2")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   655
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   656
by (Asm_full_simp_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   657
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   658
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   659
by (dres_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   660
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   661
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   662
FIX: problem: schA and schB are not quantified in the new take lemma version !!!
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   663
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   664
by (Asm_full_simp_tac 1);
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   665
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
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   671
(*--------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   672
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   673
     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
   674
  
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   675
(*  --------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   676
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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   679
Goal "!! A B. [| compatible A B; compatible B A; \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   680
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   681
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   682
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
10835
nipkow
parents: 10230
diff changeset
   683
\ Filter (%a. a:ext A)$schA = Filter (%a. a:act A)$tr &\
nipkow
parents: 10230
diff changeset
   684
\ Filter (%a. a:ext B)$schB = Filter (%a. a:act B)$tr &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   685
\ LastActExtsch A schA & LastActExtsch B schB  \
10835
nipkow
parents: 10230
diff changeset
   686
\ --> 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
   687
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   688
by (strip_tac 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 3842
diff changeset
   689
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   690
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   691
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   692
back();back();back();back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   693
by (res_inst_tac [("x","schA")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   694
by (res_inst_tac [("x","schB")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   695
by (res_inst_tac [("x","tr")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   696
by (thin_tac' 5 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7499
diff changeset
   697
by (rtac nat_less_induct 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   698
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   699
ren "tr schB schA" 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   700
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   701
by (REPEAT (etac conjE 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   702
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   703
by (case_tac "Forall (%x. x:act B & x~:act A) tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   704
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   705
by (rtac (seq_take_lemma RS iffD2 RS spec) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   706
by (thin_tac' 5 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   707
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   708
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   709
by (case_tac "Finite tr" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   710
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   711
(* both sides of this equation are nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   712
by (subgoal_tac "schA=nil" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   713
by (Asm_simp_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   714
(* first side: mksch = nil *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   715
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallBnAmksch,FiniteL_mksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   716
                           simpset())) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   717
(* second side: schA = nil *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   718
by (eres_inst_tac [("A","A")] LastActExtimplnil 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   719
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   720
by (eres_inst_tac [("Q","%x. x:act B & x~:act A")] ForallQFilterPnil 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   721
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   722
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   723
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   724
(* case ~ Finite s *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   725
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   726
(* both sides of this equation are UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   727
by (subgoal_tac "schA=UU" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   728
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   729
(* first side: mksch = UU *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   730
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPUU,
4813
14cea5b1d12f layout improvement
oheimb
parents: 4678
diff changeset
   731
        (finiteR_mksch RS mp COMP rev_contrapos),ForallBnAmksch],simpset())) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   732
(* schA = UU *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   733
by (eres_inst_tac [("A","A")] LastActExtimplUU 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   734
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   735
by (eres_inst_tac [("Q","%x. x:act B & x~:act A")] ForallQFilterPUU 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   736
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   737
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   738
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   739
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   740
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   741
by (dtac divide_Seq3 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   742
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   743
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   744
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   745
by (hyp_subst_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   746
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   747
(* bring in lemma reduceA_mksch *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   748
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
   749
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   750
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   751
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   752
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   753
(* use reduceA_mksch to rewrite conclusion *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   754
by (hyp_subst_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   755
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   756
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   757
(* eliminate the B-only prefix *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   758
10835
nipkow
parents: 10230
diff changeset
   759
by (subgoal_tac "(Filter (%a. a :act A)$y1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   760
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   761
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   762
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   763
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   764
(* Now real recursive step follows (in y) *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   765
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   766
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   767
by (case_tac "x:act A" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   768
by (case_tac "x~:act B" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   769
by (rotate_tac ~2 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   770
by (Asm_full_simp_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   771
10835
nipkow
parents: 10230
diff changeset
   772
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
   773
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   774
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   775
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   776
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   777
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   778
by (Fast_tac 2);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   779
 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   780
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   781
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
   782
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   783
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   784
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   785
by (res_inst_tac [("t","schA")] ssubst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   786
back();
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();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   789
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   790
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   791
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   792
by (rtac take_reduction 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   793
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   794
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   795
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   796
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   797
by (rtac refl 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   798
by (asm_full_simp_tac (simpset() addsimps [int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   799
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   800
by (rotate_tac ~11 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   801
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   802
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   803
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   804
(* assumption Forall tr *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   805
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   806
(* assumption schB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   807
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
   808
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   809
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   810
by (dres_inst_tac [("x","schA"),
10835
nipkow
parents: 10230
diff changeset
   811
                   ("g","Filter (%a. a:act A)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   812
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   813
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   814
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   815
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   816
by (forw_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   817
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   818
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   819
(* assumption Forall schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   820
by (dres_inst_tac [("s","schA"),
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   821
                   ("P","Forall (%x. x:act A)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   822
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   823
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, int_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   824
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   825
(* case x:actions(asig_of A) & x: actions(asig_of B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   826
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   827
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   828
by (rotate_tac ~2 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   829
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   830
10835
nipkow
parents: 10230
diff changeset
   831
by (subgoal_tac "Filter (%a. a:act A & a:ext B)$y1=nil" 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   832
by (rotate_tac ~1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   833
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   834
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   835
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   836
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   837
by (Fast_tac 2);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   838
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   839
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   840
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
   841
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   842
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   843
(* 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
   844
by (res_inst_tac [("t","schA")] ssubst 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   845
back();
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();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   848
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   849
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   850
(* f A (tw iA) = tw ~eA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   851
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   852
                              not_ext_is_int_or_not_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   853
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   854
(* rewrite assumption forall and schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   855
by (rotate_tac 13 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   856
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   857
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   858
(* divide_Seq for schB2 *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   859
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
   860
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   861
(* assumption schA *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   862
by (dres_inst_tac [("x","schA"),
10835
nipkow
parents: 10230
diff changeset
   863
                   ("g","Filter (%a. a:act A)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   864
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   865
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   866
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   867
(* f A (tw iB schB2) = nil *) 
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   868
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
   869
             intA_is_not_actB]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   870
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   871
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   872
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   873
by (rtac take_reduction 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   874
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   875
by (rtac refl 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   876
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   877
(* now conclusion fulfills induction hypothesis, but assumptions are not all ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   878
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   879
(* assumption schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   880
by (dres_inst_tac [("x","y2"),
10835
nipkow
parents: 10230
diff changeset
   881
                   ("g","Filter (%a. a:act B)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   882
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   883
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
   884
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   885
(* conclusions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   886
by (dres_inst_tac [("sch","schA"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   887
by (forw_inst_tac [("sch1.0","y1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   888
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   889
by (dres_inst_tac [("sch","y2"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   890
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   891
(* assumption Forall schA, and Forall schA are performed by ForallTL,ForallDropwhile *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   892
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   893
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   894
(* case x~:A & x:B  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   895
(* 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
   896
by (case_tac "x:act B" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   897
by (Fast_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   898
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   899
(* case x~:A & x~:B  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   900
(* cannot occur because of assumption: Forall (a:ext A | a:ext B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   901
by (rotate_tac ~9 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   902
(* reduce forall assumption from tr to (x>>rs) *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   903
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
   904
by (REPEAT (etac conjE 1));
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   905
by (fast_tac (claset() addSIs [ext_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   906
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   907
qed"FilterAmksch_is_schA";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   908
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
   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
   914
                
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   915
(*  --------------------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   916
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   917
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   918
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   919
Goal "!! A B. [| compatible A B; compatible B A; \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   920
\ is_asig(asig_of A); is_asig(asig_of B) |] ==> \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   921
\ Forall (%x. x:ext (A||B)) tr & \
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   922
\ Forall (%x. x:act A) schA & Forall (%x. x:act B) schB & \
10835
nipkow
parents: 10230
diff changeset
   923
\ Filter (%a. a:ext A)$schA = Filter (%a. a:act A)$tr &\
nipkow
parents: 10230
diff changeset
   924
\ Filter (%a. a:ext B)$schB = Filter (%a. a:act B)$tr &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   925
\ LastActExtsch A schA & LastActExtsch B schB  \
10835
nipkow
parents: 10230
diff changeset
   926
\ --> Filter (%a. a:act B)$(mksch A B$tr$schA$schB) = schB";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   927
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   928
by (strip_tac 1);
4042
8abc33930ff0 domain package:
oheimb
parents: 3842
diff changeset
   929
by (resolve_tac seq.take_lemmas 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   930
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   931
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   932
back();back();back();back();
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   933
by (res_inst_tac [("x","schA")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   934
by (res_inst_tac [("x","schB")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   935
by (res_inst_tac [("x","tr")] spec 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   936
by (thin_tac' 5 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7499
diff changeset
   937
by (rtac nat_less_induct 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   938
by (REPEAT (rtac allI 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   939
ren "tr schB schA" 1;
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   940
by (strip_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   941
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   942
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   943
by (case_tac "Forall (%x. x:act A & x~:act B) tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   944
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   945
by (rtac (seq_take_lemma RS iffD2 RS spec) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   946
by (thin_tac' 5 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   947
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   948
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   949
by (case_tac "Finite tr" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   950
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   951
(* both sides of this equation are nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   952
by (subgoal_tac "schB=nil" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   953
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   954
(* first side: mksch = nil *)
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
   955
by (SELECT_GOAL (auto_tac (claset() addSIs [ForallQFilterPnil,ForallAnBmksch,FiniteL_mksch],
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   956
                           simpset())) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   957
(* second side: schA = nil *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   958
by (eres_inst_tac [("A","B")] LastActExtimplnil 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   959
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   960
by (eres_inst_tac [("Q","%x. x:act A & x~:act B")] ForallQFilterPnil 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   961
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   962
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   963
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   964
(* case ~ Finite tr *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   965
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   966
(* both sides of this equation are UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   967
by (subgoal_tac "schB=UU" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   968
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   969
(* first side: mksch = UU *)
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   970
by (force_tac (claset() addSIs [ForallQFilterPUU,
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   971
                                (finiteR_mksch RS mp COMP rev_contrapos),
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   972
                                  ForallAnBmksch],
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9877
diff changeset
   973
               simpset()) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   974
(* schA = UU *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   975
by (eres_inst_tac [("A","B")] LastActExtimplUU 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   976
by (Asm_simp_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
   977
by (eres_inst_tac [("Q","%x. x:act A & x~:act B")] ForallQFilterPUU 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   978
by (assume_tac 1);
3314
ddb36bc2f014 fixed a bug
mueller
parents: 3275
diff changeset
   979
by (Fast_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   980
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   981
(* case" ~ Forall (%x.x:act B & x~:act A) s" *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   982
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   983
by (dtac divide_Seq3 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   984
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   985
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   986
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   987
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   988
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   989
(* bring in lemma reduceB_mksch *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   990
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
   991
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   992
by (REPEAT (etac exE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   993
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   994
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   995
(* use reduceB_mksch to rewrite conclusion *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   996
by (hyp_subst_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   997
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   998
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
   999
(* eliminate the A-only prefix *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1000
10835
nipkow
parents: 10230
diff changeset
  1001
by (subgoal_tac "(Filter (%a. a :act B)$x1) = nil" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1002
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1003
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1004
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1005
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1006
(* Now real recursive step follows (in x) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1007
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1008
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1009
by (case_tac "x:act B" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1010
by (case_tac "x~:act A" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1011
by (rotate_tac ~2 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1012
by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1013
10835
nipkow
parents: 10230
diff changeset
  1014
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
  1015
by (rotate_tac ~1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1016
by (Asm_full_simp_tac  1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1017
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1018
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1019
by (assume_tac 2);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1020
by (Fast_tac 2);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1021
 
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1022
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1023
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
  1024
by (REPEAT (etac conjE 1));
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1025
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1026
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1027
by (res_inst_tac [("t","schB")] ssubst 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1028
back();
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();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1031
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1032
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1033
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1034
by (rtac take_reduction 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1035
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1036
(* f B (tw iB) = tw ~eB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1037
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1038
                              not_ext_is_int_or_not_act]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1039
by (rtac refl 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1040
by (asm_full_simp_tac (simpset() addsimps [int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1041
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1042
by (rotate_tac ~11 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1043
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1044
(* now conclusion fulfills induction hypothesis, but assumptions are not ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1045
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1046
(* assumption Forall tr *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1047
by (asm_full_simp_tac (simpset() addsimps [Forall_Conc]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1048
(* assumption schA *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1049
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
  1050
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1051
(* assumption schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1052
by (dres_inst_tac [("x","schB"),
10835
nipkow
parents: 10230
diff changeset
  1053
                   ("g","Filter (%a. a:act B)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1054
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1055
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1056
(* assumptions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1057
by (dres_inst_tac [("sch","schB"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1058
by (forw_inst_tac [("sch1.0","x1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1059
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1060
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1061
(* assumption Forall schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1062
by (dres_inst_tac [("s","schB"),
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
  1063
                   ("P","Forall (%x. x:act B)")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1064
by (assume_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1065
by (asm_full_simp_tac (simpset() addsimps [ForallPTakewhileQ, int_is_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1066
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1067
(* case x:actions(asig_of A) & x: actions(asig_of B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1068
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1069
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1070
by (rotate_tac ~2 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1071
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1072
10835
nipkow
parents: 10230
diff changeset
  1073
by (subgoal_tac "Filter (%a. a:act B & a:ext A)$x1=nil" 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1074
by (rotate_tac ~1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1075
by (Asm_full_simp_tac  1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1076
(* eliminate introduced subgoal 2 *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1077
by (etac ForallQFilterPnil 2);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1078
by (assume_tac 2);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1079
by (Fast_tac 2);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1080
 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1081
(* bring in divide Seq for s *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1082
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
  1083
by (REPEAT (etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1084
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1085
(* subst divide_Seq in conclusion, but only at the righest occurence *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1086
by (res_inst_tac [("t","schB")] ssubst 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1087
back();
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();
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1090
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1091
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1092
(* f B (tw iB) = tw ~eB *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1093
by (asm_full_simp_tac (simpset() addsimps [FilterPTakewhileQid,int_is_act,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1094
                              not_ext_is_int_or_not_act]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1095
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1096
(* rewrite assumption forall and schB *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1097
by (rotate_tac 13 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1098
by (asm_full_simp_tac (simpset() addsimps [ext_and_act]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1099
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1100
(* divide_Seq for schB2 *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1101
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
  1102
by (REPEAT (etac conjE 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1103
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1104
by (dres_inst_tac [("x","schB"),
10835
nipkow
parents: 10230
diff changeset
  1105
                   ("g","Filter (%a. a:act B)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1106
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1107
by (asm_full_simp_tac (simpset() addsimps [int_is_not_ext]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1108
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1109
(* f B (tw iA schA2) = nil *) 
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1110
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
  1111
             intA_is_not_actB]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1112
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1113
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1114
(* reduce trace_takes from n to strictly smaller k *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1115
by (rtac take_reduction 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1116
by (rtac refl 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1117
by (rtac refl 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1118
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1119
(* now conclusion fulfills induction hypothesis, but assumptions are not all ready *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1120
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1121
(* assumption schA *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1122
by (dres_inst_tac [("x","x2"),
10835
nipkow
parents: 10230
diff changeset
  1123
                   ("g","Filter (%a. a:act A)$rs")] subst_lemma2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1124
by (assume_tac 1);
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1125
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
  1126
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1127
(* conclusions concerning LastActExtsch, cannot be rewritten, as LastActExtsmalli are looping  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1128
by (dres_inst_tac [("sch","schB"),("P","%a. a:int B")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1129
by (forw_inst_tac [("sch1.0","x1")]  LastActExtsmall2 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1130
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1131
by (dres_inst_tac [("sch","x2"),("P","%a. a:int A")] LastActExtsmall1 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1132
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1133
(* assumption Forall schA, and Forall schA are performed by ForallTL,ForallDropwhile *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1134
by (asm_full_simp_tac (simpset() addsimps [ForallTL,ForallDropwhile]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1135
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1136
(* case x~:B & x:A  *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1137
(* 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
  1138
by (case_tac "x:act A" 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1139
by (Fast_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1140
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1141
(* case x~:B & x~:A  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1142
(* cannot occur because of assumption: Forall (a:ext A | a:ext B) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1143
by (rotate_tac ~9 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1144
(* reduce forall assumption from tr to (x>>rs) *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1145
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
  1146
by (REPEAT (etac conjE 1));
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1147
by (fast_tac (claset() addSIs [ext_is_act]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1148
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1149
qed"FilterBmksch_is_schB";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1150
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
(* ------------------------------------------------------------------ *)
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1154
         section"COMPOSITIONALITY on TRACE Level -- Main Theorem";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1155
(* ------------------------------------------------------------------ *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1156
 
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1157
Goal 
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1158
"!! 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
  1159
\           is_asig(asig_of A); is_asig(asig_of B)|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1160
\       ==>  tr: traces(A||B) = \
10835
nipkow
parents: 10230
diff changeset
  1161
\            (Filter (%a. a:act A)$tr : traces A &\
nipkow
parents: 10230
diff changeset
  1162
\             Filter (%a. a:act B)$tr : traces B &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1163
\             Forall (%x. x:ext(A||B)) tr)";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1164
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1165
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
  1166
by (safe_tac set_cs);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1167
 
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
(* There is a schedule of A *)
10835
nipkow
parents: 10230
diff changeset
  1170
by (res_inst_tac [("x","Filter (%a. a:act A)$sch")] bexI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1171
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 2);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1172
by (asm_full_simp_tac (simpset() addsimps [compatibility_consequence1,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1173
                  externals_of_par,ext1_ext2_is_not_act1]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1174
(* There is a schedule of B *)
10835
nipkow
parents: 10230
diff changeset
  1175
by (res_inst_tac [("x","Filter (%a. a:act B)$sch")] bexI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1176
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 2);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1177
by (asm_full_simp_tac (simpset() addsimps [compatibility_consequence2,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1178
                  externals_of_par,ext1_ext2_is_not_act2]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1179
(* Traces of A||B have only external actions from A or B *)  
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1180
by (rtac ForallPFilterP 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1181
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
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1184
(* replace schA and schB by Cut(schA) and Cut(schB) *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1185
by (dtac exists_LastActExtsch 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1186
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1187
by (dtac exists_LastActExtsch 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1188
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1189
by (REPEAT (etac exE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1190
by (REPEAT (etac conjE 1));
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1191
(* Schedules of A(B) have only actions of A(B) *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1192
by (dtac scheds_in_sig 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1193
by (assume_tac 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1194
by (dtac scheds_in_sig 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1195
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1196
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1197
ren "h1 h2 schA schB" 1;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1198
(* 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
  1199
   we need here *)
10835
nipkow
parents: 10230
diff changeset
  1200
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
  1201
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1202
(* External actions of mksch are just the oracle *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1203
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
  1204
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1205
(* mksch is a schedule -- use compositionality on sch-level *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1206
by (asm_full_simp_tac (simpset() addsimps [compositionality_sch]) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1207
by (asm_full_simp_tac (simpset() addsimps [FilterAmksch_is_schA,FilterBmksch_is_schB]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1208
by (etac ForallAorB_mksch 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1209
by (etac ForallPForallQ 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
  1210
by (etac ext_is_act 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3080
diff changeset
  1211
qed"compositionality_tr";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1212
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
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1215
(* ------------------------------------------------------------------ *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1216
(*           COMPOSITIONALITY   on    TRACE         Level             *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1217
(*                            For Modules                             *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1218
(* ------------------------------------------------------------------ *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1219
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
  1220
Goalw [Traces_def,par_traces_def]
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1221
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1222
"!! 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
  1223
\           is_asig(asig_of A); is_asig(asig_of B)|] \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1224
\==> Traces (A||B) = par_traces (Traces A) (Traces B)";
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
  1225
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1226
by (asm_full_simp_tac (simpset() addsimps [asig_of_par]) 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
  1227
by (rtac set_ext 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
  1228
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
  1229
qed"compositionality_tr_modules";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1230
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
  1231
4678
78715f589655 Reorganized simplifier. May now reorient rules.
nipkow
parents: 4520
diff changeset
  1232
simpset_ref () := simpset() setmksym (Some o symmetric_fun);