src/HOLCF/IOA/meta_theory/CompoExecs.thy
author wenzelm
Sun, 28 May 2006 19:54:20 +0200
changeset 19741 f65265d71426
parent 17233 41eee2e7b465
child 25135 4f8176c940cf
permissions -rw-r--r--
removed legacy ML scripts;
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/CompoExecs.thy
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
     2
    ID:         $Id$
12218
wenzelm
parents: 10835
diff changeset
     3
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     4
*)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     5
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     6
header {* Compositionality on Execution level *}
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     7
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
theory CompoExecs
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
imports Traces
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    10
begin
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    11
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    12
consts
3071
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
 ProjA      ::"('a,'s * 't)execution => ('a,'s)execution"
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    15
 ProjA2     ::"('a,'s * 't)pairs     -> ('a,'s)pairs"
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    16
 ProjB      ::"('a,'s * 't)execution => ('a,'t)execution"
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    17
 ProjB2     ::"('a,'s * 't)pairs     -> ('a,'t)pairs"
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    18
 Filter_ex  ::"'a signature => ('a,'s)execution => ('a,'s)execution"
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    19
 Filter_ex2 ::"'a signature => ('a,'s)pairs     -> ('a,'s)pairs"
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    20
 stutter    ::"'a signature => ('a,'s)execution => bool"
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    21
 stutter2   ::"'a signature => ('a,'s)pairs     -> ('s => tr)"
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    22
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    23
 par_execs  ::"[('a,'s)execution_module,('a,'t)execution_module] => ('a,'s*'t)execution_module"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    24
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    25
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    26
defs
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    27
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    28
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    29
ProjA_def:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    30
 "ProjA ex == (fst (fst ex), ProjA2$(snd ex))"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    31
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    32
ProjB_def:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    33
 "ProjB ex == (snd (fst ex), ProjB2$(snd ex))"
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
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    36
ProjA2_def:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    37
  "ProjA2 == Map (%x.(fst x,fst(snd x)))"
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    38
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    39
ProjB2_def:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    40
  "ProjB2 == Map (%x.(fst x,snd(snd x)))"
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    41
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    42
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    43
Filter_ex_def:
10835
nipkow
parents: 3842
diff changeset
    44
  "Filter_ex sig ex == (fst ex,Filter_ex2 sig$(snd ex))"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    45
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    46
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    47
Filter_ex2_def:
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
    48
  "Filter_ex2 sig ==  Filter (%x. fst x:actions sig)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    49
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    50
stutter_def:
10835
nipkow
parents: 3842
diff changeset
    51
  "stutter sig ex == ((stutter2 sig$(snd ex)) (fst ex) ~= FF)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    52
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    53
stutter2_def:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    54
  "stutter2 sig ==(fix$(LAM h ex. (%s. case ex of
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    55
      nil => TT
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    56
    | x##xs => (flift1
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    57
            (%p.(If Def ((fst p)~:actions sig)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    58
                 then Def (s=(snd p))
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    59
                 else TT fi)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    60
                andalso (h$xs) (snd p))
10835
nipkow
parents: 3842
diff changeset
    61
             $x)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    62
   )))"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    63
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    64
par_execs_def:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    65
  "par_execs ExecsA ExecsB ==
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    66
       let exA = fst ExecsA; sigA = snd ExecsA;
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    67
           exB = fst ExecsB; sigB = snd ExecsB
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    68
       in
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    69
       (    {ex. Filter_ex sigA (ProjA ex) : exA}
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    70
        Int {ex. Filter_ex sigB (ProjB ex) : exB}
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    71
        Int {ex. stutter sigA (ProjA ex)}
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    72
        Int {ex. stutter sigB (ProjB ex)}
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3521
diff changeset
    73
        Int {ex. Forall (%x. fst x:(actions sigA Un actions sigB)) (snd ex)},
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    74
        asig_comp sigA sigB)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    75
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    76
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    77
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    78
lemmas [simp del] = ex_simps all_simps split_paired_All
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    79
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    80
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    81
section "recursive equations of operators"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    82
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    83
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    84
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    85
(*                               ProjA2                             *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    86
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    87
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    88
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    89
lemma ProjA2_UU: "ProjA2$UU = UU"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    90
apply (simp add: ProjA2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    91
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    92
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    93
lemma ProjA2_nil: "ProjA2$nil = nil"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    94
apply (simp add: ProjA2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    95
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    96
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    97
lemma ProjA2_cons: "ProjA2$((a,t)>>xs) = (a,fst t) >> ProjA2$xs"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    98
apply (simp add: ProjA2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    99
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   100
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   101
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   102
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   103
(*                               ProjB2                             *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   104
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   105
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   106
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   107
lemma ProjB2_UU: "ProjB2$UU = UU"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   108
apply (simp add: ProjB2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   109
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   110
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   111
lemma ProjB2_nil: "ProjB2$nil = nil"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   112
apply (simp add: ProjB2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   113
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   114
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   115
lemma ProjB2_cons: "ProjB2$((a,t)>>xs) = (a,snd t) >> ProjB2$xs"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   116
apply (simp add: ProjB2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   117
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   118
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   119
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   120
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   121
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   122
(*                             Filter_ex2                           *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   123
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   124
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   125
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   126
lemma Filter_ex2_UU: "Filter_ex2 sig$UU=UU"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   127
apply (simp add: Filter_ex2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   128
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   129
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   130
lemma Filter_ex2_nil: "Filter_ex2 sig$nil=nil"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   131
apply (simp add: Filter_ex2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   132
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   133
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   134
lemma Filter_ex2_cons: "Filter_ex2 sig$(at >> xs) =     
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   135
             (if (fst at:actions sig)     
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   136
                  then at >> (Filter_ex2 sig$xs)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   137
                  else        Filter_ex2 sig$xs)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   138
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   139
apply (simp add: Filter_ex2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   140
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   141
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   142
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   143
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   144
(*                             stutter2                             *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   145
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   146
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   147
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   148
lemma stutter2_unfold: "stutter2 sig = (LAM ex. (%s. case ex of  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   149
       nil => TT  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   150
     | x##xs => (flift1  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   151
             (%p.(If Def ((fst p)~:actions sig)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   152
                  then Def (s=(snd p))  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   153
                  else TT fi)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   154
                 andalso (stutter2 sig$xs) (snd p))   
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   155
              $x)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   156
            ))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   157
apply (rule trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   158
apply (rule fix_eq2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   159
apply (rule stutter2_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   160
apply (rule beta_cfun)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   161
apply (simp add: flift1_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   162
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   163
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   164
lemma stutter2_UU: "(stutter2 sig$UU) s=UU"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   165
apply (subst stutter2_unfold)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   166
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   167
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   168
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   169
lemma stutter2_nil: "(stutter2 sig$nil) s = TT"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   170
apply (subst stutter2_unfold)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   171
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   172
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   173
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   174
lemma stutter2_cons: "(stutter2 sig$(at>>xs)) s =  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   175
               ((if (fst at)~:actions sig then Def (s=snd at) else TT)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   176
                 andalso (stutter2 sig$xs) (snd at))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   177
apply (rule trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   178
apply (subst stutter2_unfold)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   179
apply (simp add: Consq_def flift1_def If_and_if)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   180
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   181
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   182
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   183
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   184
declare stutter2_UU [simp] stutter2_nil [simp] stutter2_cons [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   185
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   186
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   187
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   188
(*                             stutter                              *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   189
(* ---------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   190
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   191
lemma stutter_UU: "stutter sig (s, UU)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   192
apply (simp add: stutter_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   193
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   194
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   195
lemma stutter_nil: "stutter sig (s, nil)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   196
apply (simp add: stutter_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   197
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   198
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   199
lemma stutter_cons: "stutter sig (s, (a,t)>>ex) =  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   200
      ((a~:actions sig --> (s=t)) & stutter sig (t,ex))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   201
apply (simp add: stutter_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   202
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   203
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   204
(* ----------------------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   205
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   206
declare stutter2_UU [simp del] stutter2_nil [simp del] stutter2_cons [simp del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   207
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   208
lemmas compoex_simps = ProjA2_UU ProjA2_nil ProjA2_cons
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   209
  ProjB2_UU ProjB2_nil ProjB2_cons
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   210
  Filter_ex2_UU Filter_ex2_nil Filter_ex2_cons
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   211
  stutter_UU stutter_nil stutter_cons
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   212
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   213
declare compoex_simps [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   214
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   215
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   216
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   217
(* ------------------------------------------------------------------ *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   218
(*                      The following lemmata aim for                 *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   219
(*             COMPOSITIONALITY   on    EXECUTION     Level           *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   220
(* ------------------------------------------------------------------ *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   221
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   222
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   223
(* --------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   224
(*  Lemma_1_1a : is_ex_fr propagates from A||B to Projections A and B    *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   225
(* --------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   226
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   227
lemma lemma_1_1a: "!s. is_exec_frag (A||B) (s,xs)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   228
       -->  is_exec_frag A (fst s, Filter_ex2 (asig_of A)$(ProjA2$xs)) & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   229
            is_exec_frag B (snd s, Filter_ex2 (asig_of B)$(ProjB2$xs))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   230
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   231
apply (tactic {* pair_induct_tac "xs" [thm "is_exec_frag_def"] 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   232
(* main case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   233
apply (rename_tac ss a t)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   234
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   235
apply (simp_all add: trans_of_defs2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   236
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   237
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   238
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   239
(* --------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   240
(*  Lemma_1_1b : is_ex_fr (A||B) implies stuttering on Projections       *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   241
(* --------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   242
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   243
lemma lemma_1_1b: "!s. is_exec_frag (A||B) (s,xs)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   244
       --> stutter (asig_of A) (fst s,ProjA2$xs)  & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   245
           stutter (asig_of B) (snd s,ProjB2$xs)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   246
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   247
apply (tactic {* pair_induct_tac "xs" [thm "stutter_def", thm "is_exec_frag_def"] 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   248
(* main case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   249
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   250
apply (simp_all add: trans_of_defs2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   251
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   252
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   253
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   254
(* --------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   255
(*  Lemma_1_1c : Executions of A||B have only  A- or B-actions           *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   256
(* --------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   257
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   258
lemma lemma_1_1c: "!s. (is_exec_frag (A||B) (s,xs)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   259
   --> Forall (%x. fst x:act (A||B)) xs)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   260
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   261
apply (tactic {* pair_induct_tac "xs" [thm "Forall_def", thm "sforall_def",
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   262
  thm "is_exec_frag_def"] 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   263
(* main case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   264
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   265
apply (simp_all add: trans_of_defs2 actions_asig_comp asig_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   266
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   267
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   268
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   269
(* ----------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   270
(*  Lemma_1_2 : ex A, exB, stuttering and forall a:A|B implies ex (A||B)   *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   271
(* ----------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   272
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   273
lemma lemma_1_2: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   274
"!s. is_exec_frag A (fst s,Filter_ex2 (asig_of A)$(ProjA2$xs)) & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   275
     is_exec_frag B (snd s,Filter_ex2 (asig_of B)$(ProjB2$xs)) & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   276
     stutter (asig_of A) (fst s,(ProjA2$xs)) &  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   277
     stutter (asig_of B) (snd s,(ProjB2$xs)) &  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   278
     Forall (%x. fst x:act (A||B)) xs  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   279
     --> is_exec_frag (A||B) (s,xs)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   280
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   281
apply (tactic {* pair_induct_tac "xs" [thm "Forall_def", thm "sforall_def",
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   282
  thm "is_exec_frag_def", thm "stutter_def"] 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   283
apply (simp add: trans_of_defs1 actions_asig_comp asig_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   284
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   285
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   286
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   287
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   288
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   289
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   290
subsection {* COMPOSITIONALITY on EXECUTION Level -- Main Theorem *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   291
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   292
lemma compositionality_ex: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   293
"(ex:executions(A||B)) = 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   294
 (Filter_ex (asig_of A) (ProjA ex) : executions A & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   295
  Filter_ex (asig_of B) (ProjB ex) : executions B & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   296
  stutter (asig_of A) (ProjA ex) & stutter (asig_of B) (ProjB ex) & 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   297
  Forall (%x. fst x:act (A||B)) (snd ex))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   298
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   299
apply (simp (no_asm) add: executions_def ProjB_def Filter_ex_def ProjA_def starts_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   300
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   301
apply (rule iffI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   302
(* ==>  *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   303
apply (erule conjE)+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   304
apply (simp add: lemma_1_1a lemma_1_1b lemma_1_1c)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   305
(* <==  *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   306
apply (erule conjE)+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   307
apply (simp add: lemma_1_2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   308
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   309
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   310
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   311
subsection {* COMPOSITIONALITY on EXECUTION Level -- for Modules *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   312
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   313
lemma compositionality_ex_modules: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   314
  "Execs (A||B) = par_execs (Execs A) (Execs B)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   315
apply (unfold Execs_def par_execs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   316
apply (simp add: asig_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   317
apply (rule set_ext)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   318
apply (simp add: compositionality_ex actions_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   319
done
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   320
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   321
end