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