src/HOL/HOLCF/IOA/CompoTraces.thy
author wenzelm
Sun, 17 Jan 2016 00:14:45 +0100
changeset 62195 799a5306e2ed
parent 62156 7355fd313cf8
child 63549 b0d31c7def86
permissions -rw-r--r--
more method definitions;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62008
cbedaddc9351 clarified directory structure;
wenzelm
parents: 62005
diff changeset
     1
(*  Title:      HOL/HOLCF/IOA/CompoTraces.thy
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 40774
diff changeset
     2
    Author:     Olaf Müller
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62002
diff changeset
     3
*)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
     5
section \<open>Compositionality on Trace level\<close>
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     6
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     7
theory CompoTraces
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
imports CompoScheds ShortExecutions
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
begin
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    10
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    11
definition mksch ::
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    12
    "('a, 's) ioa \<Rightarrow> ('a, 't) ioa \<Rightarrow> 'a Seq \<rightarrow> 'a Seq \<rightarrow> 'a Seq \<rightarrow> 'a Seq"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    13
  where "mksch A B =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    14
    (fix $
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    15
      (LAM h tr schA schB.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    16
        case tr of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    17
          nil \<Rightarrow> nil
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    18
        | x ## xs \<Rightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    19
            (case x of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    20
              UU \<Rightarrow> UU
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    21
            | Def y \<Rightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    22
                (if y \<in> act A then
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    23
                  (if y \<in> act B then
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    24
                    ((Takewhile (\<lambda>a. a \<in> int A) $ schA) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    25
                     (Takewhile (\<lambda>a. a \<in> int B) $ schB) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    26
                     (y \<leadsto> (h $ xs $ (TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ schA))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    27
                                   $ (TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ schB)))))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    28
                   else
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    29
                    ((Takewhile (\<lambda>a. a \<in> int A) $ schA) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    30
                     (y \<leadsto> (h $ xs $ (TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ schA)) $ schB))))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    31
                 else
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    32
                  (if y \<in> act B then
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    33
                    ((Takewhile (\<lambda>a. a \<in> int B) $ schB) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    34
                     (y \<leadsto> (h $ xs $ schA $ (TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ schB)))))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    35
                   else UU)))))"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    36
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    37
definition par_traces :: "'a trace_module \<Rightarrow> 'a trace_module \<Rightarrow> 'a trace_module"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    38
  where "par_traces TracesA TracesB =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    39
    (let
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    40
      trA = fst TracesA; sigA = snd TracesA;
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    41
      trB = fst TracesB; sigB = snd TracesB
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    42
     in
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    43
       ({tr. Filter (\<lambda>a. a \<in> actions sigA) $ tr \<in> trA} \<inter>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    44
        {tr. Filter (\<lambda>a. a \<in> actions sigB) $ tr \<in> trB} \<inter>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    45
        {tr. Forall (\<lambda>x. x \<in> externals sigA \<union> externals sigB) tr},
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62002
diff changeset
    46
        asig_comp sigA sigB))"
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3275
diff changeset
    47
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    48
axiomatization where
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    49
  finiteR_mksch: "Finite (mksch A B $ tr $ x $ y) \<Longrightarrow> Finite tr"
48194
1440a3103af0 tuned proofs -- eliminated old-fashioned COMP and rev_contrapos;
wenzelm
parents: 47239
diff changeset
    50
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    51
lemma finiteR_mksch': "\<not> Finite tr \<Longrightarrow> \<not> Finite (mksch A B $ tr $ x $ y)"
48194
1440a3103af0 tuned proofs -- eliminated old-fashioned COMP and rev_contrapos;
wenzelm
parents: 47239
diff changeset
    52
  by (blast intro: finiteR_mksch)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    53
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    54
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    55
declaration \<open>fn _ => Simplifier.map_ss (Simplifier.set_mksym (K (K NONE)))\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    56
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    57
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    58
subsection "mksch rewrite rules"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    59
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    60
lemma mksch_unfold:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    61
  "mksch A B =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    62
    (LAM tr schA schB.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    63
      case tr of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    64
        nil \<Rightarrow> nil
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    65
      | x ## xs \<Rightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    66
          (case x of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    67
            UU \<Rightarrow> UU
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    68
          | Def y \<Rightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    69
              (if y \<in> act A then
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    70
                (if y \<in> act B then
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    71
                  ((Takewhile (\<lambda>a. a \<in> int A) $ schA) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    72
                   (Takewhile (\<lambda>a. a \<in> int B) $ schB) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    73
                   (y \<leadsto> (mksch A B $ xs $(TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ schA))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    74
                                         $(TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ schB)))))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    75
                 else
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    76
                  ((Takewhile (\<lambda>a. a \<in> int A) $ schA) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    77
                   (y \<leadsto> (mksch A B $ xs $ (TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ schA)) $ schB))))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    78
               else
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    79
                (if y \<in> act B then
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    80
                  ((Takewhile (\<lambda>a. a \<in> int B) $ schB) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    81
                   (y \<leadsto> (mksch A B $ xs $ schA $ (TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ schB)))))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    82
                 else UU))))"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    83
  apply (rule trans)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    84
  apply (rule fix_eq4)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    85
  apply (rule mksch_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    86
  apply (rule beta_cfun)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    87
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    88
  done
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    89
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    90
lemma mksch_UU: "mksch A B $ UU $ schA $ schB = UU"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    91
  apply (subst mksch_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    92
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    93
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    94
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    95
lemma mksch_nil: "mksch A B $ nil $ schA $ schB = nil"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    96
  apply (subst mksch_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    97
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    98
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    99
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   100
lemma mksch_cons1:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   101
  "x \<in> act A \<Longrightarrow> x \<notin> act B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   102
    mksch A B $ (x \<leadsto> tr) $ schA $ schB =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   103
      (Takewhile (\<lambda>a. a \<in> int A) $ schA) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   104
      (x \<leadsto> (mksch A B $ tr $ (TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ schA)) $ schB))"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   105
  apply (rule trans)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   106
  apply (subst mksch_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   107
  apply (simp add: Consq_def If_and_if)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   108
  apply (simp add: Consq_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   109
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   110
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   111
lemma mksch_cons2:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   112
  "x \<notin> act A \<Longrightarrow> x \<in> act B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   113
    mksch A B $ (x \<leadsto> tr) $ schA $ schB =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   114
      (Takewhile (\<lambda>a. a \<in> int B) $ schB) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   115
      (x \<leadsto> (mksch A B $ tr $ schA $ (TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ schB))))"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   116
  apply (rule trans)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   117
  apply (subst mksch_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   118
  apply (simp add: Consq_def If_and_if)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   119
  apply (simp add: Consq_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   120
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   121
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   122
lemma mksch_cons3:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   123
  "x \<in> act A \<Longrightarrow> x \<in> act B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   124
    mksch A B $ (x \<leadsto> tr) $ schA $ schB =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   125
      (Takewhile (\<lambda>a. a \<in> int A) $ schA) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   126
      ((Takewhile (\<lambda>a. a \<in> int B) $ schB) @@
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   127
      (x \<leadsto> (mksch A B $ tr $ (TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ schA))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   128
                            $ (TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ schB)))))"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   129
  apply (rule trans)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   130
  apply (subst mksch_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   131
  apply (simp add: Consq_def If_and_if)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   132
  apply (simp add: Consq_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   133
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   134
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   135
lemmas compotr_simps = mksch_UU mksch_nil mksch_cons1 mksch_cons2 mksch_cons3
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   136
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   137
declare compotr_simps [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   138
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   139
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
   140
subsection \<open>COMPOSITIONALITY on TRACE Level\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   141
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   142
subsubsection "Lemmata for \<open>\<Longrightarrow>\<close>"
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   143
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   144
text \<open>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   145
  Consequence out of \<open>ext1_ext2_is_not_act1(2)\<close>, which in turn are
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   146
  consequences out of the compatibility of IOA, in particular out of the
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   147
  condition that internals are really hidden.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   148
\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   149
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   150
lemma compatibility_consequence1: "(eB \<and> \<not> eA \<longrightarrow> \<not> A) \<longrightarrow> A \<and> (eA \<or> eB) \<longleftrightarrow> eA \<and> A"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   151
  by fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   152
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   153
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   154
(* very similar to above, only the commutativity of | is used to make a slight change *)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   155
lemma compatibility_consequence2: "(eB \<and> \<not> eA \<longrightarrow> \<not> A) \<longrightarrow> A \<and> (eB \<or> eA) \<longleftrightarrow> eA \<and> A"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   156
  by fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   157
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   158
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   159
subsubsection \<open>Lemmata for \<open>\<Longleftarrow>\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   160
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   161
(* Lemma for substitution of looping assumption in another specific assumption *)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   162
lemma subst_lemma1: "f \<sqsubseteq> g x \<Longrightarrow> x = h x \<Longrightarrow> f \<sqsubseteq> g (h x)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   163
  by (erule subst)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   164
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   165
(* Lemma for substitution of looping assumption in another specific assumption *)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   166
lemma subst_lemma2: "(f x) = y \<leadsto> g \<Longrightarrow> x = h x \<Longrightarrow> f (h x) = y \<leadsto> g"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   167
  by (erule subst)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   168
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   169
lemma ForallAorB_mksch [rule_format]:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   170
  "compatible A B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   171
    \<forall>schA schB. Forall (\<lambda>x. x \<in> act (A \<parallel> B)) tr \<longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   172
      Forall (\<lambda>x. x \<in> act (A \<parallel> B)) (mksch A B $ tr $ schA $ schB)"
62195
799a5306e2ed more method definitions;
wenzelm
parents: 62156
diff changeset
   173
  apply (Seq_induct tr simp: Forall_def sforall_def mksch_def)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   174
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   175
  apply (simp add: actions_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   176
  apply (case_tac "a \<in> act A")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   177
  apply (case_tac "a \<in> act B")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   178
  text \<open>\<open>a \<in> A\<close>, \<open>a \<in> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   179
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   180
  apply (rule Forall_Conc_impl [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   181
  apply (simp add: intA_is_not_actB int_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   182
  apply (rule Forall_Conc_impl [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   183
  apply (simp add: intA_is_not_actB int_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   184
  text \<open>\<open>a \<in> A\<close>, \<open>a \<notin> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   185
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   186
  apply (rule Forall_Conc_impl [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   187
  apply (simp add: intA_is_not_actB int_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   188
  apply (case_tac "a:act B")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   189
  text \<open>\<open>a \<notin> A\<close>, \<open>a \<in> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   190
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   191
  apply (rule Forall_Conc_impl [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   192
  apply (simp add: intA_is_not_actB int_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   193
  text \<open>\<open>a \<notin> A\<close>, \<open>a \<notin> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   194
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   195
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   196
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   197
lemma ForallBnAmksch [rule_format]:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   198
  "compatible B A \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   199
    \<forall>schA schB. Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) tr \<longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   200
      Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) (mksch A B $ tr $ schA $ schB)"
62195
799a5306e2ed more method definitions;
wenzelm
parents: 62156
diff changeset
   201
  apply (Seq_induct tr simp: Forall_def sforall_def mksch_def)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   202
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   203
  apply (rule Forall_Conc_impl [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   204
  apply (simp add: intA_is_not_actB int_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   205
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   206
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   207
lemma ForallAnBmksch [rule_format]:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   208
  "compatible A B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   209
    \<forall>schA schB. Forall (\<lambda>x. x \<in> act A \<and> x \<notin> act B) tr \<longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   210
      Forall (\<lambda>x. x \<in> act A \<and> x \<notin> act B) (mksch A B $ tr $ schA $ schB)"
62195
799a5306e2ed more method definitions;
wenzelm
parents: 62156
diff changeset
   211
  apply (Seq_induct tr simp: Forall_def sforall_def mksch_def)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   212
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   213
  apply (rule Forall_Conc_impl [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   214
  apply (simp add: intA_is_not_actB int_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   215
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   216
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   217
(* safe_tac makes too many case distinctions with this lemma in the next proof *)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   218
declare FiniteConc [simp del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   219
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   220
lemma FiniteL_mksch [rule_format]:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   221
  "Finite tr \<Longrightarrow> is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   222
    \<forall>x y.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   223
      Forall (\<lambda>x. x \<in> act A) x \<and> Forall (\<lambda>x. x \<in> act B) y \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   224
      Filter (\<lambda>a. a \<in> ext A) $ x = Filter (\<lambda>a. a \<in> act A) $ tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   225
      Filter (\<lambda>a. a \<in> ext B) $ y = Filter (\<lambda>a. a \<in> act B) $ tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   226
      Forall (\<lambda>x. x \<in> ext (A \<parallel> B)) tr \<longrightarrow> Finite (mksch A B $ tr $ x $ y)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   227
  apply (erule Seq_Finite_ind)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   228
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   229
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   230
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   231
  apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   232
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   233
  text \<open>\<open>a \<in> act A\<close>; \<open>a \<in> act B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   234
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   235
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   236
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   237
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   238
  text \<open>\<open>Finite (tw iA x)\<close> and \<open>Finite (tw iB y)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   239
  apply (simp add: not_ext_is_int_or_not_act FiniteConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   240
  text \<open>now for conclusion IH applicable, but assumptions have to be transformed\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   241
  apply (drule_tac x = "x" and g = "Filter (\<lambda>a. a \<in> act A) $ s" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   242
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   243
  apply (drule_tac x = "y" and g = "Filter (\<lambda>a. a \<in> act B) $ s" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   244
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   245
  text \<open>IH\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   246
  apply (simp add: not_ext_is_int_or_not_act ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   247
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   248
  text \<open>\<open>a \<in> act B\<close>; \<open>a \<notin> act A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   249
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   250
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   251
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   252
  text \<open>\<open>Finite (tw iB y)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   253
  apply (simp add: not_ext_is_int_or_not_act FiniteConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   254
  text \<open>now for conclusion IH applicable, but assumptions have to be transformed\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   255
  apply (drule_tac x = "y" and g = "Filter (\<lambda>a. a \<in> act B) $ s" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   256
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   257
  text \<open>IH\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   258
  apply (simp add: not_ext_is_int_or_not_act ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   259
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   260
  text \<open>\<open>a \<notin> act B\<close>; \<open>a \<in> act A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   261
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   262
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   263
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   264
  text \<open>\<open>Finite (tw iA x)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   265
  apply (simp add: not_ext_is_int_or_not_act FiniteConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   266
  text \<open>now for conclusion IH applicable, but assumptions have to be transformed\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   267
  apply (drule_tac x = "x" and g = "Filter (\<lambda>a. a \<in> act A) $ s" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   268
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   269
  text \<open>IH\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   270
  apply (simp add: not_ext_is_int_or_not_act ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   271
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   272
  text \<open>\<open>a \<notin> act B\<close>; \<open>a \<notin> act A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   273
  apply (fastforce intro!: ext_is_act simp: externals_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   274
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   275
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   276
declare FiniteConc [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   277
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   278
declare FilterConc [simp del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   279
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   280
lemma reduceA_mksch1 [rule_format]:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   281
  "Finite bs \<Longrightarrow> is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow> compatible A B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   282
    \<forall>y. Forall (\<lambda>x. x \<in> act B) y \<and> Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) bs \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   283
      Filter (\<lambda>a. a \<in> ext B) $ y = Filter (\<lambda>a. a \<in> act B) $ (bs @@ z) \<longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   284
      (\<exists>y1 y2.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   285
        (mksch A B $ (bs @@ z) $ x $ y) = (y1 @@ (mksch A B $ z $ x $ y2)) \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   286
        Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) y1 \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   287
        Finite y1 \<and> y = (y1 @@ y2) \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   288
        Filter (\<lambda>a. a \<in> ext B) $ y1 = bs)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   289
  apply (frule_tac A1 = "A" in compat_commute [THEN iffD1])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   290
  apply (erule Seq_Finite_ind)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   291
  apply (rule allI)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   292
  apply (rule impI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   293
  apply (rule_tac x = "nil" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   294
  apply (rule_tac x = "y" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   295
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   296
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   297
  apply (rule allI)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   298
  apply (rule impI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   299
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   300
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   301
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   302
  text \<open>\<open>divide_Seq\<close> on \<open>s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   303
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   304
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   305
  text \<open>transform assumption \<open>f eB y = f B (s @ z)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   306
  apply (drule_tac x = "y" and g = "Filter (\<lambda>a. a \<in> act B) $ (s @@ z) " in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   307
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   308
  apply (simp add: not_ext_is_int_or_not_act FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   309
  text \<open>apply IH\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   310
  apply (erule_tac x = "TL $ (Dropwhile (\<lambda>a. a \<in> int B) $ y)" in allE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   311
  apply (simp add: ForallTL ForallDropwhile FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   312
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   313
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   314
  apply (simp add: FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   315
  text \<open>for replacing IH in conclusion\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   316
  apply (rotate_tac -2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   317
  text \<open>instantiate \<open>y1a\<close> and \<open>y2a\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   318
  apply (rule_tac x = "Takewhile (\<lambda>a. a \<in> int B) $ y @@ a \<leadsto> y1" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   319
  apply (rule_tac x = "y2" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   320
  text \<open>elminate all obligations up to two depending on \<open>Conc_assoc\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   321
  apply (simp add: intA_is_not_actB int_is_act int_is_not_ext FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   322
  apply (simp add: Conc_assoc FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   323
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   324
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   325
lemmas reduceA_mksch = conjI [THEN [6] conjI [THEN [5] reduceA_mksch1]]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   326
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   327
lemma reduceB_mksch1 [rule_format]:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   328
  "Finite a_s \<Longrightarrow> is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow> compatible A B \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   329
    \<forall>x. Forall (\<lambda>x. x \<in> act A) x \<and> Forall (\<lambda>x. x \<in> act A \<and> x \<notin> act B) a_s \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   330
      Filter (\<lambda>a. a \<in> ext A) $ x = Filter (\<lambda>a. a \<in> act A) $ (a_s @@ z) \<longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   331
      (\<exists>x1 x2.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   332
        (mksch A B $ (a_s @@ z) $ x $ y) = (x1 @@ (mksch A B $ z $ x2 $ y)) \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   333
        Forall (\<lambda>x. x \<in> act A \<and> x \<notin> act B) x1 \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   334
        Finite x1 \<and> x = (x1 @@ x2) \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   335
        Filter (\<lambda>a. a \<in> ext A) $ x1 = a_s)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   336
  apply (frule_tac A1 = "A" in compat_commute [THEN iffD1])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   337
  apply (erule Seq_Finite_ind)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   338
  apply (rule allI)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   339
  apply (rule impI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   340
  apply (rule_tac x = "nil" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   341
  apply (rule_tac x = "x" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   342
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   343
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   344
  apply (rule allI)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   345
  apply (rule impI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   346
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   347
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   348
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   349
  text \<open>\<open>divide_Seq\<close> on \<open>s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   350
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   351
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   352
  text \<open>transform assumption \<open>f eA x = f A (s @ z)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   353
  apply (drule_tac x = "x" and g = "Filter (\<lambda>a. a \<in> act A) $ (s @@ z)" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   354
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   355
  apply (simp add: not_ext_is_int_or_not_act FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   356
  text \<open>apply IH\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   357
  apply (erule_tac x = "TL $ (Dropwhile (\<lambda>a. a \<in> int A) $ x)" in allE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   358
  apply (simp add: ForallTL ForallDropwhile FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   359
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   360
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   361
  apply (simp add: FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   362
  text \<open>for replacing IH in conclusion\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   363
  apply (rotate_tac -2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   364
  text \<open>instantiate \<open>y1a\<close> and \<open>y2a\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   365
  apply (rule_tac x = "Takewhile (\<lambda>a. a \<in> int A) $ x @@ a \<leadsto> x1" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   366
  apply (rule_tac x = "x2" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   367
  text \<open>eliminate all obligations up to two depending on \<open>Conc_assoc\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   368
  apply (simp add: intA_is_not_actB int_is_act int_is_not_ext FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   369
  apply (simp add: Conc_assoc FilterConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   370
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   371
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   372
lemmas reduceB_mksch = conjI [THEN [6] conjI [THEN [5] reduceB_mksch1]]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   373
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   374
declare FilterConc [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   375
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   376
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   377
subsection \<open>Filtering external actions out of \<open>mksch (tr, schA, schB)\<close> yields the oracle \<open>tr\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   378
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62002
diff changeset
   379
lemma FilterA_mksch_is_tr:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   380
  "compatible A B \<Longrightarrow> compatible B A \<Longrightarrow> is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   381
    \<forall>schA schB.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   382
      Forall (\<lambda>x. x \<in> act A) schA \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   383
      Forall (\<lambda>x. x \<in> act B) schB \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   384
      Forall (\<lambda>x. x \<in> ext (A \<parallel> B)) tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   385
      Filter (\<lambda>a. a \<in> act A) $ tr \<sqsubseteq> Filter (\<lambda>a. a \<in> ext A) $ schA \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   386
      Filter (\<lambda>a. a \<in> act B) $ tr \<sqsubseteq> Filter (\<lambda>a. a \<in> ext B) $ schB
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   387
      \<longrightarrow> Filter (\<lambda>a. a \<in> ext (A \<parallel> B)) $ (mksch A B $ tr $ schA $ schB) = tr"
62195
799a5306e2ed more method definitions;
wenzelm
parents: 62156
diff changeset
   388
  apply (Seq_induct tr simp: Forall_def sforall_def mksch_def)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   389
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   390
  text \<open>splitting into 4 cases according to \<open>a \<in> A\<close>, \<open>a \<in> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   391
  apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   392
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   393
  text \<open>Case \<open>a \<in> A\<close>, \<open>a \<in> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   394
  apply (frule divide_Seq)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   395
  apply (frule divide_Seq)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   396
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   397
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   398
  text \<open>filtering internals of \<open>A\<close> in \<open>schA\<close> and of \<open>B\<close> in \<open>schB\<close> is \<open>nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   399
  apply (simp add: not_ext_is_int_or_not_act externals_of_par intA_is_not_extB int_is_not_ext)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   400
  text \<open>conclusion of IH ok, but assumptions of IH have to be transformed\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   401
  apply (drule_tac x = "schA" in subst_lemma1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   402
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   403
  apply (drule_tac x = "schB" in subst_lemma1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   404
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   405
  text \<open>IH\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   406
  apply (simp add: not_ext_is_int_or_not_act ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   407
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   408
  text \<open>Case \<open>a \<in> A\<close>, \<open>a \<notin> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   409
  apply (frule divide_Seq)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   410
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   411
  text \<open>filtering internals of \<open>A\<close> is \<open>nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   412
  apply (simp add: not_ext_is_int_or_not_act externals_of_par intA_is_not_extB int_is_not_ext)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   413
  apply (drule_tac x = "schA" in subst_lemma1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   414
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   415
  apply (simp add: not_ext_is_int_or_not_act ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   416
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   417
  text \<open>Case \<open>a \<in> B\<close>, \<open>a \<notin> A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   418
  apply (frule divide_Seq)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   419
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   420
  text \<open>filtering internals of \<open>A\<close> is \<open>nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   421
  apply (simp add: not_ext_is_int_or_not_act externals_of_par intA_is_not_extB int_is_not_ext)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   422
  apply (drule_tac x = "schB" in subst_lemma1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   423
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   424
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   425
  apply (simp add: not_ext_is_int_or_not_act ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   426
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   427
  text \<open>Case \<open>a \<notin> A\<close>, \<open>a \<notin> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   428
  apply (fastforce intro!: ext_is_act simp: externals_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   429
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   430
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   431
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   432
subsection" Filter of mksch(tr,schA,schB) to A is schA -- take lemma proof"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   433
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   434
lemma FilterAmksch_is_schA:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   435
  "compatible A B \<Longrightarrow> compatible B A \<Longrightarrow> is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   436
    Forall (\<lambda>x. x \<in> ext (A \<parallel> B)) tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   437
    Forall (\<lambda>x. x \<in> act A) schA \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   438
    Forall (\<lambda>x. x \<in> act B) schB \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   439
    Filter (\<lambda>a. a \<in> ext A) $ schA = Filter (\<lambda>a. a \<in> act A) $ tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   440
    Filter (\<lambda>a. a \<in> ext B) $ schB = Filter (\<lambda>a. a \<in> act B) $ tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   441
    LastActExtsch A schA \<and> LastActExtsch B schB
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   442
    \<longrightarrow> Filter (\<lambda>a. a \<in> act A) $ (mksch A B $ tr $ schA $ schB) = schA"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   443
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   444
  apply (rule seq.take_lemma)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   445
  apply (rule mp)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   446
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   447
  back back back back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   448
  apply (rule_tac x = "schA" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   449
  apply (rule_tac x = "schB" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   450
  apply (rule_tac x = "tr" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   451
  apply (tactic "thin_tac' @{context} 5 1")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   452
  apply (rule nat_less_induct)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   453
  apply (rule allI)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   454
  apply (rename_tac tr schB schA)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   455
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   456
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   457
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   458
  apply (case_tac "Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) tr")
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   459
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   460
  apply (rule seq_take_lemma [THEN iffD2, THEN spec])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   461
  apply (tactic "thin_tac' @{context} 5 1")
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   462
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   463
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   464
  apply (case_tac "Finite tr")
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   465
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   466
  text \<open>both sides of this equation are \<open>nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   467
  apply (subgoal_tac "schA = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   468
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   469
  text \<open>first side: \<open>mksch = nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   470
  apply (auto intro!: ForallQFilterPnil ForallBnAmksch FiniteL_mksch)[1]
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   471
  text \<open>second side: \<open>schA = nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   472
  apply (erule_tac A = "A" in LastActExtimplnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   473
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   474
  apply (erule_tac Q = "\<lambda>x. x \<in> act B \<and> x \<notin> act A" in ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   475
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   476
  apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   477
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   478
  text \<open>case \<open>\<not> Finite s\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   479
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   480
  text \<open>both sides of this equation are \<open>UU\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   481
  apply (subgoal_tac "schA = UU")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   482
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   483
  text \<open>first side: \<open>mksch = UU\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   484
  apply (auto intro!: ForallQFilterPUU finiteR_mksch' ForallBnAmksch)[1]
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   485
  text \<open>\<open>schA = UU\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   486
  apply (erule_tac A = "A" in LastActExtimplUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   487
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   488
  apply (erule_tac Q = "\<lambda>x. x \<in> act B \<and> x \<notin> act A" in ForallQFilterPUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   489
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   490
  apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   491
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   492
  text \<open>case \<open>\<not> Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) s\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   493
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   494
  apply (drule divide_Seq3)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   495
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   496
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   497
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   498
  apply hypsubst
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   499
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   500
  text \<open>bring in lemma \<open>reduceA_mksch\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   501
  apply (frule_tac x = "schA" and y = "schB" and A = "A" and B = "B" in reduceA_mksch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   502
  apply assumption+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   503
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   504
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   505
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   506
  text \<open>use \<open>reduceA_mksch\<close> to rewrite conclusion\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   507
  apply hypsubst
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   508
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   509
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   510
  text \<open>eliminate the \<open>B\<close>-only prefix\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   511
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   512
  apply (subgoal_tac "(Filter (\<lambda>a. a \<in> act A) $ y1) = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   513
  apply (erule_tac [2] ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   514
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   515
  prefer 2 apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   516
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   517
  text \<open>Now real recursive step follows (in \<open>y\<close>)\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   518
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   519
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   520
  apply (case_tac "x \<in> act A")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   521
  apply (case_tac "x \<notin> act B")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   522
  apply (rotate_tac -2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   523
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   524
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   525
  apply (subgoal_tac "Filter (\<lambda>a. a \<in> act A \<and> a \<in> ext B) $ y1 = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   526
  apply (rotate_tac -1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   527
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   528
  text \<open>eliminate introduced subgoal 2\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   529
  apply (erule_tac [2] ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   530
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   531
  prefer 2 apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   532
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   533
  text \<open>bring in \<open>divide_Seq\<close> for \<open>s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   534
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   535
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   536
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   537
  text \<open>subst \<open>divide_Seq\<close> in conclusion, but only at the rightest occurrence\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   538
  apply (rule_tac t = "schA" in ssubst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   539
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   540
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   541
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   542
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   543
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   544
  text \<open>reduce trace_takes from \<open>n\<close> to strictly smaller \<open>k\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   545
  apply (rule take_reduction)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   546
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   547
  text \<open>\<open>f A (tw iA) = tw \<not> eA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   548
  apply (simp add: int_is_act not_ext_is_int_or_not_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   549
  apply (rule refl)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   550
  apply (simp add: int_is_act not_ext_is_int_or_not_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   551
  apply (rotate_tac -11)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   552
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   553
  text \<open>now conclusion fulfills induction hypothesis, but assumptions are not ready\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   554
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   555
  text \<open>assumption \<open>Forall tr\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   556
  text \<open>assumption \<open>schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   557
  apply (simp add: ext_and_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   558
  text \<open>assumption \<open>schA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   559
  apply (drule_tac x = "schA" and g = "Filter (\<lambda>a. a \<in> act A) $ rs" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   560
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   561
  apply (simp add: int_is_not_ext)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   562
  text \<open>assumptions concerning \<open>LastActExtsch\<close>, cannot be rewritten, as \<open>LastActExtsmalli\<close> are looping\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   563
  apply (drule_tac sch = "schA" and P = "\<lambda>a. a \<in> int A" in LastActExtsmall1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   564
  apply (frule_tac ?sch1.0 = "y1" in LastActExtsmall2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   565
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   566
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   567
  text \<open>assumption \<open>Forall schA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   568
  apply (drule_tac s = "schA" and P = "Forall (\<lambda>x. x \<in> act A) " in subst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   569
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   570
  apply (simp add: int_is_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   571
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   572
  text \<open>case \<open>x \<in> actions (asig_of A) \<and> x \<in> actions (asig_of B)\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   573
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   574
  apply (rotate_tac -2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   575
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   576
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   577
  apply (subgoal_tac "Filter (\<lambda>a. a \<in> act A \<and> a \<in> ext B) $ y1 = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   578
  apply (rotate_tac -1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   579
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   580
  text \<open>eliminate introduced subgoal 2\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   581
  apply (erule_tac [2] ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   582
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   583
  prefer 2 apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   584
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   585
  text \<open>bring in \<open>divide_Seq\<close> for \<open>s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   586
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   587
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   588
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   589
  text \<open>subst \<open>divide_Seq\<close> in conclusion, but only at the rightmost occurrence\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   590
  apply (rule_tac t = "schA" in ssubst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   591
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   592
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   593
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   594
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   595
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   596
  text \<open>\<open>f A (tw iA) = tw \<not> eA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   597
  apply (simp add: int_is_act not_ext_is_int_or_not_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   598
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   599
  text \<open>rewrite assumption forall and \<open>schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   600
  apply (rotate_tac 13)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   601
  apply (simp add: ext_and_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   602
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   603
  text \<open>\<open>divide_Seq\<close> for \<open>schB2\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   604
  apply (frule_tac y = "y2" in sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   605
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   606
  text \<open>assumption \<open>schA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   607
  apply (drule_tac x = "schA" and g = "Filter (%a. a:act A) $rs" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   608
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   609
  apply (simp add: int_is_not_ext)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   610
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   611
  text \<open>\<open>f A (tw iB schB2) = nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   612
  apply (simp add: int_is_not_ext not_ext_is_int_or_not_act intA_is_not_actB)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   613
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   614
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   615
  text \<open>reduce trace_takes from \<open>n\<close> to strictly smaller \<open>k\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   616
  apply (rule take_reduction)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   617
  apply (rule refl)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   618
  apply (rule refl)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   619
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   620
  text \<open>now conclusion fulfills induction hypothesis, but assumptions are not all ready\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   621
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   622
  text \<open>assumption \<open>schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   623
  apply (drule_tac x = "y2" and g = "Filter (\<lambda>a. a \<in> act B) $ rs" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   624
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   625
  apply (simp add: intA_is_not_actB int_is_not_ext)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   626
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   627
  text \<open>conclusions concerning \<open>LastActExtsch\<close>, cannot be rewritten, as \<open>LastActExtsmalli\<close> are looping\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   628
  apply (drule_tac sch = "schA" and P = "\<lambda>a. a \<in> int A" in LastActExtsmall1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   629
  apply (frule_tac ?sch1.0 = "y1" in LastActExtsmall2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   630
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   631
  apply (drule_tac sch = "y2" and P = "\<lambda>a. a \<in> int B" in LastActExtsmall1)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   632
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   633
  text \<open>assumption \<open>Forall schA\<close>, and \<open>Forall schA\<close> are performed by \<open>ForallTL\<close>, \<open>ForallDropwhile\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   634
  apply (simp add: ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   635
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   636
  text \<open>case \<open>x \<notin> A \<and> x \<in> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   637
  text \<open>cannot occur, as just this case has been scheduled out before as the \<open>B\<close>-only prefix\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   638
  apply (case_tac "x \<in> act B")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   639
  apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   640
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   641
  text \<open>case \<open>x \<notin> A \<and> x \<notin> B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   642
  text \<open>cannot occur because of assumption: \<open>Forall (a \<in> ext A \<or> a \<in> ext B)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   643
  apply (rotate_tac -9)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   644
  text \<open>reduce forall assumption from \<open>tr\<close> to \<open>x \<leadsto> rs\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   645
  apply (simp add: externals_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   646
  apply (fast intro!: ext_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   647
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   648
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   649
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   650
subsection \<open>Filter of \<open>mksch (tr, schA, schB)\<close> to \<open>B\<close> is \<open>schB\<close> -- take lemma proof\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   651
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   652
lemma FilterBmksch_is_schB:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   653
  "compatible A B \<Longrightarrow> compatible B A \<Longrightarrow> is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   654
    Forall (\<lambda>x. x \<in> ext (A \<parallel> B)) tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   655
    Forall (\<lambda>x. x \<in> act A) schA \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   656
    Forall (\<lambda>x. x \<in> act B) schB \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   657
    Filter (\<lambda>a. a \<in> ext A) $ schA = Filter (\<lambda>a. a \<in> act A) $ tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   658
    Filter (\<lambda>a. a \<in> ext B) $ schB = Filter (\<lambda>a. a \<in> act B) $ tr \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   659
    LastActExtsch A schA \<and> LastActExtsch B schB
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   660
    \<longrightarrow> Filter (\<lambda>a. a \<in> act B) $ (mksch A B $ tr $ schA $ schB) = schB"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   661
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   662
  apply (rule seq.take_lemma)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   663
  apply (rule mp)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   664
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   665
  back back back back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   666
  apply (rule_tac x = "schA" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   667
  apply (rule_tac x = "schB" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   668
  apply (rule_tac x = "tr" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   669
  apply (tactic "thin_tac' @{context} 5 1")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   670
  apply (rule nat_less_induct)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   671
  apply (rule allI)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   672
  apply (rename_tac tr schB schA)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   673
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   674
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   675
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   676
  apply (case_tac "Forall (\<lambda>x. x \<in> act A \<and> x \<notin> act B) tr")
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   677
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   678
  apply (rule seq_take_lemma [THEN iffD2, THEN spec])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   679
  apply (tactic "thin_tac' @{context} 5 1")
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   680
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   681
  apply (case_tac "Finite tr")
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   682
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   683
  text \<open>both sides of this equation are \<open>nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   684
  apply (subgoal_tac "schB = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   685
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   686
  text \<open>first side: \<open>mksch = nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   687
  apply (auto intro!: ForallQFilterPnil ForallAnBmksch FiniteL_mksch)[1]
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   688
  text \<open>second side: \<open>schA = nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   689
  apply (erule_tac A = "B" in LastActExtimplnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   690
  apply (simp (no_asm_simp))
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   691
  apply (erule_tac Q = "\<lambda>x. x \<in> act A \<and> x \<notin> act B" in ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   692
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   693
  apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   694
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   695
  text \<open>case \<open>\<not> Finite tr\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   696
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   697
  text \<open>both sides of this equation are \<open>UU\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   698
  apply (subgoal_tac "schB = UU")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   699
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   700
  text \<open>first side: \<open>mksch = UU\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   701
  apply (force intro!: ForallQFilterPUU finiteR_mksch' ForallAnBmksch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   702
  text \<open>\<open>schA = UU\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   703
  apply (erule_tac A = "B" in LastActExtimplUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   704
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   705
  apply (erule_tac Q = "\<lambda>x. x \<in> act A \<and> x \<notin> act B" in ForallQFilterPUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   706
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   707
  apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   708
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   709
  text \<open>case \<open>\<not> Forall (\<lambda>x. x \<in> act B \<and> x \<notin> act A) s\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   710
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   711
  apply (drule divide_Seq3)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   712
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   713
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   714
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   715
  apply hypsubst
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   716
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   717
  text \<open>bring in lemma \<open>reduceB_mksch\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   718
  apply (frule_tac y = "schB" and x = "schA" and A = "A" and B = "B" in reduceB_mksch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   719
  apply assumption+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   720
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   721
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   722
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   723
  text \<open>use \<open>reduceB_mksch\<close> to rewrite conclusion\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   724
  apply hypsubst
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   725
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   726
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   727
  text \<open>eliminate the \<open>A\<close>-only prefix\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   728
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   729
  apply (subgoal_tac "(Filter (\<lambda>a. a \<in> act B) $ x1) = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   730
  apply (erule_tac [2] ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   731
  prefer 2 apply (assumption)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   732
  prefer 2 apply (fast)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   733
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   734
  text \<open>Now real recursive step follows (in \<open>x\<close>)\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   735
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   736
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   737
  apply (case_tac "x \<in> act B")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   738
  apply (case_tac "x \<notin> act A")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   739
  apply (rotate_tac -2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   740
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   741
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   742
  apply (subgoal_tac "Filter (\<lambda>a. a \<in> act B \<and> a \<in> ext A) $ x1 = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   743
  apply (rotate_tac -1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   744
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   745
  text \<open>eliminate introduced subgoal 2\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   746
  apply (erule_tac [2] ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   747
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   748
  prefer 2 apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   749
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   750
  text \<open>bring in \<open>divide_Seq\<close> for \<open>s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   751
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   752
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   753
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   754
  text \<open>subst \<open>divide_Seq\<close> in conclusion, but only at the rightmost occurrence\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   755
  apply (rule_tac t = "schB" in ssubst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   756
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   757
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   758
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   759
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   760
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   761
  text \<open>reduce \<open>trace_takes\<close> from \<open>n\<close> to strictly smaller \<open>k\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   762
  apply (rule take_reduction)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   763
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   764
  text \<open>\<open>f B (tw iB) = tw \<not> eB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   765
  apply (simp add: int_is_act not_ext_is_int_or_not_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   766
  apply (rule refl)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   767
  apply (simp add: int_is_act not_ext_is_int_or_not_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   768
  apply (rotate_tac -11)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   769
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   770
  text \<open>now conclusion fulfills induction hypothesis, but assumptions are not ready\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   771
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   772
  text \<open>assumption \<open>schA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   773
  apply (simp add: ext_and_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   774
  text \<open>assumption \<open>schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   775
  apply (drule_tac x = "schB" and g = "Filter (\<lambda>a. a \<in> act B) $ rs" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   776
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   777
  apply (simp add: int_is_not_ext)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   778
  text \<open>assumptions concerning \<open>LastActExtsch\<close>, cannot be rewritten, as \<open>LastActExtsmalli\<close> are looping\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   779
  apply (drule_tac sch = "schB" and P = "\<lambda>a. a \<in> int B" in LastActExtsmall1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   780
  apply (frule_tac ?sch1.0 = "x1" in LastActExtsmall2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   781
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   782
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   783
  text \<open>assumption \<open>Forall schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   784
  apply (drule_tac s = "schB" and P = "Forall (\<lambda>x. x \<in> act B)" in subst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   785
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   786
  apply (simp add: int_is_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   787
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   788
  text \<open>case \<open>x \<in> actions (asig_of A) \<and> x \<in> actions (asig_of B)\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   789
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   790
  apply (rotate_tac -2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   791
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   792
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   793
  apply (subgoal_tac "Filter (\<lambda>a. a \<in> act B \<and> a \<in> ext A) $ x1 = nil")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   794
  apply (rotate_tac -1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   795
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   796
  text \<open>eliminate introduced subgoal 2\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   797
  apply (erule_tac [2] ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   798
  prefer 2 apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   799
  prefer 2 apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   800
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   801
  text \<open>bring in \<open>divide_Seq\<close> for \<open>s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   802
  apply (frule sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   803
  apply (erule conjE)+
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   804
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   805
  text \<open>subst \<open>divide_Seq\<close> in conclusion, but only at the rightmost occurrence\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   806
  apply (rule_tac t = "schB" in ssubst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   807
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   808
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   809
  back
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   810
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   811
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   812
  text \<open>\<open>f B (tw iB) = tw \<not> eB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   813
  apply (simp add: int_is_act not_ext_is_int_or_not_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   814
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   815
  text \<open>rewrite assumption forall and \<open>schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   816
  apply (rotate_tac 13)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   817
  apply (simp add: ext_and_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   818
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   819
  text \<open>\<open>divide_Seq\<close> for \<open>schB2\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   820
  apply (frule_tac y = "x2" in sym [THEN eq_imp_below, THEN divide_Seq])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   821
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   822
  text \<open>assumption \<open>schA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   823
  apply (drule_tac x = "schB" and g = "Filter (\<lambda>a. a \<in> act B) $ rs" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   824
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   825
  apply (simp add: int_is_not_ext)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   826
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   827
  text \<open>\<open>f B (tw iA schA2) = nil\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   828
  apply (simp add: int_is_not_ext not_ext_is_int_or_not_act intA_is_not_actB)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   829
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   830
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   831
  text \<open>reduce \<open>trace_takes from \<open>n\<close> to strictly smaller \<open>k\<close>\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   832
  apply (rule take_reduction)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   833
  apply (rule refl)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   834
  apply (rule refl)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   835
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   836
  text \<open>now conclusion fulfills induction hypothesis, but assumptions are not all ready\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   837
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   838
  text \<open>assumption \<open>schA\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   839
  apply (drule_tac x = "x2" and g = "Filter (\<lambda>a. a \<in> act A) $ rs" in subst_lemma2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   840
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   841
  apply (simp add: intA_is_not_actB int_is_not_ext)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   842
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   843
  text \<open>conclusions concerning \<open>LastActExtsch\<close>, cannot be rewritten, as \<open>LastActExtsmalli\<close> are looping\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   844
  apply (drule_tac sch = "schB" and P = "%a. a:int B" in LastActExtsmall1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   845
  apply (frule_tac ?sch1.0 = "x1" in LastActExtsmall2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   846
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   847
  apply (drule_tac sch = "x2" and P = "%a. a:int A" in LastActExtsmall1)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   848
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   849
  text \<open>assumption \<open>Forall schA\<close>, and \<open>Forall schA\<close> are performed by \<open>ForallTL\<close>, \<open>ForallDropwhile\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   850
  apply (simp add: ForallTL ForallDropwhile)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   851
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   852
  text \<open>case \<open>x \<notin> B \<and> x \<in> A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   853
  text \<open>cannot occur, as just this case has been scheduled out before as the \<open>B\<close>-only prefix\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   854
  apply (case_tac "x \<in> act A")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   855
  apply fast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   856
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   857
  text \<open>case \<open>x \<notin> B \<and> x \<notin> A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   858
  text \<open>cannot occur because of assumption: \<open>Forall (a \<in> ext A \<or> a \<in> ext B)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   859
  apply (rotate_tac -9)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   860
  text \<open>reduce forall assumption from \<open>tr\<close> to \<open>x \<leadsto> rs\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   861
  apply (simp add: externals_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   862
  apply (fast intro!: ext_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   863
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   864
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   865
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   866
subsection "COMPOSITIONALITY on TRACE Level -- Main Theorem"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   867
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   868
theorem compositionality_tr:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   869
  "is_trans_of A \<Longrightarrow> is_trans_of B \<Longrightarrow> compatible A B \<Longrightarrow> compatible B A \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   870
    is_asig (asig_of A) \<Longrightarrow> is_asig (asig_of B) \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   871
    tr \<in> traces (A \<parallel> B) \<longleftrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   872
      Filter (\<lambda>a. a \<in> act A) $ tr \<in> traces A \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   873
      Filter (\<lambda>a. a \<in> act B) $ tr \<in> traces B \<and>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   874
      Forall (\<lambda>x. x \<in> ext(A \<parallel> B)) tr"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   875
  apply (simp add: traces_def has_trace_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   876
  apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   877
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   878
  text \<open>\<open>\<Longrightarrow>\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   879
  text \<open>There is a schedule of \<open>A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   880
  apply (rule_tac x = "Filter (\<lambda>a. a \<in> act A) $ sch" in bexI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   881
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   882
  apply (simp add: compositionality_sch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   883
  apply (simp add: compatibility_consequence1 externals_of_par ext1_ext2_is_not_act1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   884
  text \<open>There is a schedule of \<open>B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   885
  apply (rule_tac x = "Filter (\<lambda>a. a \<in> act B) $ sch" in bexI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   886
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   887
  apply (simp add: compositionality_sch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   888
  apply (simp add: compatibility_consequence2 externals_of_par ext1_ext2_is_not_act2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   889
  text \<open>Traces of \<open>A \<parallel> B\<close> have only external actions from \<open>A\<close> or \<open>B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   890
  apply (rule ForallPFilterP)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   891
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   892
  text \<open>\<open>\<Longleftarrow>\<close>\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   893
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   894
  text \<open>replace \<open>schA\<close> and \<open>schB\<close> by \<open>Cut schA\<close> and \<open>Cut schB\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   895
  apply (drule exists_LastActExtsch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   896
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   897
  apply (drule exists_LastActExtsch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   898
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   899
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   900
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   901
  text \<open>Schedules of A(B) have only actions of A(B)\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   902
  apply (drule scheds_in_sig)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   903
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   904
  apply (drule scheds_in_sig)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   905
  apply assumption
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   906
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   907
  apply (rename_tac h1 h2 schA schB)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   908
  text \<open>\<open>mksch\<close> is exactly the construction of \<open>trA\<parallel>B\<close> out of \<open>schA\<close>, \<open>schB\<close>, and the oracle \<open>tr\<close>,
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   909
     we need here\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   910
  apply (rule_tac x = "mksch A B $ tr $ schA $ schB" in bexI)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   911
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   912
  text \<open>External actions of mksch are just the oracle\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   913
  apply (simp add: FilterA_mksch_is_tr)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   914
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   915
  text \<open>\<open>mksch\<close> is a schedule -- use compositionality on sch-level\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   916
  apply (simp add: compositionality_sch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   917
  apply (simp add: FilterAmksch_is_schA FilterBmksch_is_schB)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   918
  apply (erule ForallAorB_mksch)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   919
  apply (erule ForallPForallQ)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   920
  apply (erule ext_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   921
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   922
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   923
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   924
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
   925
subsection \<open>COMPOSITIONALITY on TRACE Level -- for Modules\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   926
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62002
diff changeset
   927
lemma compositionality_tr_modules:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   928
  "is_trans_of A \<Longrightarrow> is_trans_of B \<Longrightarrow> compatible A B \<Longrightarrow> compatible B A \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   929
    is_asig(asig_of A) \<Longrightarrow> is_asig(asig_of B) \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   930
    Traces (A\<parallel>B) = par_traces (Traces A) (Traces B)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   931
  apply (unfold Traces_def par_traces_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   932
  apply (simp add: asig_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   933
  apply (rule set_eqI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   934
  apply (simp add: compositionality_tr externals_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   935
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   936
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   937
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
   938
declaration \<open>fn _ => Simplifier.map_ss (Simplifier.set_mksym Simplifier.default_mk_sym)\<close>
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   939
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   940
end