src/HOL/HOLCF/IOA/Automata.thy
author wenzelm
Thu, 31 Dec 2015 12:43:09 +0100
changeset 62008 cbedaddc9351
parent 62005 src/HOL/HOLCF/IOA/meta_theory/Automata.thy@68db98c2cd97
child 62116 bc178c0fe1a1
permissions -rw-r--r--
clarified directory structure;
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/Automata.thy
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 40774
diff changeset
     2
    Author:     Olaf Müller, Konrad Slind, Tobias Nipkow
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
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: 61999
diff changeset
     5
section \<open>The I/O automata of Lynch and Tuttle in HOLCF\<close>
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     6
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     7
theory Automata
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
imports Asig
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
begin
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    10
36452
d37c6eed8117 renamed command 'defaultsort' to 'default_sort';
wenzelm
parents: 36176
diff changeset
    11
default_sort type
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    12
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    13
type_synonym ('a, 's) transition = "'s * 'a * 's"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    14
type_synonym ('a, 's) ioa =
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    15
  "'a signature * 's set * ('a,'s)transition set * ('a set set) * ('a set set)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    16
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    17
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    18
(* --------------------------------- IOA ---------------------------------*)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    19
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    20
(* IO automata *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    21
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    22
definition asig_of :: "('a, 's)ioa \<Rightarrow> 'a signature"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    23
  where "asig_of = fst"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    24
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    25
definition starts_of :: "('a, 's) ioa \<Rightarrow> 's set"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    26
  where "starts_of = (fst \<circ> snd)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    27
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    28
definition trans_of :: "('a, 's) ioa \<Rightarrow> ('a, 's) transition set"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    29
  where "trans_of = (fst \<circ> snd \<circ> snd)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    30
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    31
abbreviation trans_of_syn  ("_ \<midarrow>_\<midarrow>_\<rightarrow> _" [81, 81, 81, 81] 100)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    32
  where "s \<midarrow>a\<midarrow>A\<rightarrow> t \<equiv> (s, a, t) \<in> trans_of A"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    33
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    34
definition wfair_of :: "('a, 's) ioa \<Rightarrow> 'a set set"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    35
  where "wfair_of = (fst \<circ> snd \<circ> snd \<circ> snd)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    36
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    37
definition sfair_of :: "('a, 's) ioa \<Rightarrow> 'a set set"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    38
  where "sfair_of = (snd \<circ> snd \<circ> snd \<circ> snd)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    39
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    40
definition is_asig_of :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    41
  where "is_asig_of A = is_asig (asig_of A)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    42
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    43
definition is_starts_of :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    44
  where "is_starts_of A \<longleftrightarrow> starts_of A \<noteq> {}"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    45
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    46
definition is_trans_of :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    47
  where "is_trans_of A \<longleftrightarrow>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    48
    (\<forall>triple. triple \<in> trans_of A \<longrightarrow> fst (snd triple) \<in> actions (asig_of A))"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    49
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    50
definition input_enabled :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    51
  where "input_enabled A \<longleftrightarrow>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    52
    (\<forall>a. a \<in> inputs (asig_of A) \<longrightarrow> (\<forall>s1. \<exists>s2. (s1, a, s2) \<in> trans_of A))"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    53
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    54
definition IOA :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    55
  where "IOA A \<longleftrightarrow>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    56
    is_asig_of A \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    57
    is_starts_of A \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    58
    is_trans_of A \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    59
    input_enabled A"
25131
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    60
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    61
abbreviation "act A == actions (asig_of A)"
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    62
abbreviation "ext A == externals (asig_of A)"
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    63
abbreviation int where "int A == internals (asig_of A)"
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    64
abbreviation "inp A == inputs (asig_of A)"
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    65
abbreviation "out A == outputs (asig_of A)"
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 23778
diff changeset
    66
abbreviation "local A == locals (asig_of A)"
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
    67
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    68
(* invariants *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    69
inductive reachable :: "('a, 's) ioa \<Rightarrow> 's \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    70
  for C :: "('a, 's) ioa"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    71
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    72
  reachable_0:  "s \<in> starts_of C \<Longrightarrow> reachable C s"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    73
| reachable_n:  "\<lbrakk>reachable C s; (s, a, t) \<in> trans_of C\<rbrakk> \<Longrightarrow> reachable C t"
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    74
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    75
definition invariant :: "[('a, 's) ioa, 's \<Rightarrow> bool] \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    76
  where "invariant A P \<longleftrightarrow> (\<forall>s. reachable A s \<longrightarrow> P s)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    77
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    78
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    79
(* ------------------------- parallel composition --------------------------*)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    80
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    81
(* binary composition of action signatures and automata *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    82
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    83
definition compatible :: "[('a, 's) ioa, ('a, 't) ioa] \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    84
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    85
  "compatible A B \<longleftrightarrow>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    86
  (((out A \<inter> out B) = {}) \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    87
   ((int A \<inter> act B) = {}) \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    88
   ((int B \<inter> act A) = {}))"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    89
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    90
definition asig_comp :: "['a signature, 'a signature] \<Rightarrow> 'a signature"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    91
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    92
  "asig_comp a1 a2 =
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    93
     (((inputs(a1) \<union> inputs(a2)) - (outputs(a1) \<union> outputs(a2)),
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    94
       (outputs(a1) \<union> outputs(a2)),
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    95
       (internals(a1) \<union> internals(a2))))"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    96
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    97
definition par :: "[('a, 's) ioa, ('a, 't) ioa] \<Rightarrow> ('a, 's * 't) ioa"  (infixr "\<parallel>" 10)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    98
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
    99
  "(A \<parallel> B) =
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   100
      (asig_comp (asig_of A) (asig_of B),
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   101
       {pr. fst(pr) \<in> starts_of(A) \<and> snd(pr) \<in> starts_of(B)},
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   102
       {tr. let s = fst(tr); a = fst(snd(tr)); t = snd(snd(tr))
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   103
            in (a \<in> act A | a:act B) \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   104
               (if a \<in> act A then
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   105
                  (fst(s), a, fst(t)) \<in> trans_of(A)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   106
                else fst(t) = fst(s))
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   107
               &
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   108
               (if a \<in> act B then
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   109
                  (snd(s), a, snd(t)) \<in> trans_of(B)
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   110
                else snd(t) = snd(s))},
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   111
        wfair_of A \<union> wfair_of B,
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   112
        sfair_of A \<union> sfair_of B)"
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   113
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   114
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   115
(* ------------------------ hiding -------------------------------------------- *)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   116
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   117
(* hiding and restricting *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   118
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   119
definition restrict_asig :: "['a signature, 'a set] \<Rightarrow> 'a signature"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   120
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   121
  "restrict_asig asig actns =
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   122
    (inputs(asig) Int actns,
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   123
     outputs(asig) Int actns,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   124
     internals(asig) Un (externals(asig) - actns))"
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   125
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   126
(* Notice that for wfair_of and sfair_of nothing has to be changed, as
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   127
   changes from the outputs to the internals does not touch the locals as
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   128
   a whole, which is of importance for fairness only *)
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   129
definition restrict :: "[('a, 's) ioa, 'a set] \<Rightarrow> ('a, 's) ioa"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   130
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   131
  "restrict A actns =
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   132
    (restrict_asig (asig_of A) actns,
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   133
     starts_of A,
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   134
     trans_of A,
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   135
     wfair_of A,
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   136
     sfair_of A)"
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   137
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   138
definition hide_asig :: "['a signature, 'a set] \<Rightarrow> 'a signature"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   139
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   140
  "hide_asig asig actns =
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   141
    (inputs(asig) - actns,
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   142
     outputs(asig) - actns,
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   143
     internals(asig) \<union> actns)"
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   144
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   145
definition hide :: "[('a, 's) ioa, 'a set] \<Rightarrow> ('a, 's) ioa"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   146
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   147
  "hide A actns =
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   148
    (hide_asig (asig_of A) actns,
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   149
     starts_of A,
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   150
     trans_of A,
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   151
     wfair_of A,
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   152
     sfair_of A)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   153
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   154
(* ------------------------- renaming ------------------------------------------- *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   155
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   156
definition rename_set :: "'a set \<Rightarrow> ('c \<Rightarrow> 'a option) \<Rightarrow> 'c set"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   157
  where "rename_set A ren = {b. \<exists>x. Some x = ren b \<and> x \<in> A}"
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3433
diff changeset
   158
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   159
definition rename :: "('a, 'b) ioa \<Rightarrow> ('c \<Rightarrow> 'a option) \<Rightarrow> ('c, 'b) ioa"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   160
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   161
  "rename ioa ren =
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   162
    ((rename_set (inp ioa) ren,
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   163
      rename_set (out ioa) ren,
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   164
      rename_set (int ioa) ren),
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   165
     starts_of ioa,
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   166
     {tr. let s = fst(tr); a = fst(snd(tr));  t = snd(snd(tr))
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   167
          in
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   168
          \<exists>x. Some(x) = ren(a) \<and> (s,x,t):trans_of ioa},
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   169
     {rename_set s ren | s. s \<in> wfair_of ioa},
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   170
     {rename_set s ren | s. s \<in> sfair_of ioa})"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   171
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   172
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   173
(* ------------------------- fairness ----------------------------- *)
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   174
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   175
(* enabledness of actions and action sets *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   176
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   177
definition enabled :: "('a, 's) ioa \<Rightarrow> 'a \<Rightarrow> 's \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   178
  where "enabled A a s \<longleftrightarrow> (\<exists>t. s \<midarrow>a\<midarrow>A\<rightarrow> t)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   179
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   180
definition Enabled :: "('a, 's) ioa \<Rightarrow> 'a set \<Rightarrow> 's \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   181
  where "Enabled A W s \<longleftrightarrow> (\<exists>w \<in> W. enabled A w s)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   182
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   183
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   184
(* action set keeps enabled until probably disabled by itself *)
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   185
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   186
definition en_persistent :: "('a, 's) ioa \<Rightarrow> 'a set \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   187
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   188
  "en_persistent A W \<longleftrightarrow>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   189
    (\<forall>s a t. Enabled A W s \<and> a \<notin> W \<and> s \<midarrow>a\<midarrow>A\<rightarrow> t \<longrightarrow> Enabled A W t)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   190
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   191
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   192
(* post_conditions for actions and action sets *)
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   193
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   194
definition was_enabled :: "('a, 's) ioa \<Rightarrow> 'a \<Rightarrow> 's \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   195
  where "was_enabled A a t \<longleftrightarrow> (\<exists>s. s \<midarrow>a\<midarrow>A\<rightarrow> t)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   196
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   197
definition set_was_enabled :: "('a, 's) ioa \<Rightarrow> 'a set \<Rightarrow> 's \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   198
  where "set_was_enabled A W t \<longleftrightarrow> (\<exists>w \<in> W. was_enabled A w t)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   199
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   200
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   201
(* constraints for fair IOA *)
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   202
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   203
definition fairIOA :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   204
  where "fairIOA A \<longleftrightarrow> (\<forall>S \<in> wfair_of A. S \<subseteq> local A) \<and> (\<forall>S \<in> sfair_of A. S \<subseteq> local A)"
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   205
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   206
definition input_resistant :: "('a, 's) ioa \<Rightarrow> bool"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   207
where
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   208
  "input_resistant A \<longleftrightarrow>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   209
    (\<forall>W \<in> sfair_of A. \<forall>s a t.
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   210
      reachable A s \<and> reachable A t \<and> a \<in> inp A \<and>
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   211
      Enabled A W s \<and> s \<midarrow>a\<midarrow>A\<rightarrow> t \<longrightarrow> Enabled A W t)"
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents: 3521
diff changeset
   212
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   213
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   214
declare split_paired_Ex [simp del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   215
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   216
lemmas ioa_projections = asig_of_def starts_of_def trans_of_def wfair_of_def sfair_of_def
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   217
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   218
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   219
subsection "asig_of, starts_of, trans_of"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   220
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   221
lemma ioa_triple_proj:
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   222
 "((asig_of (x,y,z,w,s)) = x)   &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   223
  ((starts_of (x,y,z,w,s)) = y) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   224
  ((trans_of (x,y,z,w,s)) = z)  &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   225
  ((wfair_of (x,y,z,w,s)) = w) &
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   226
  ((sfair_of (x,y,z,w,s)) = s)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   227
  apply (simp add: ioa_projections)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   228
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   229
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   230
lemma trans_in_actions:
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   231
  "[| is_trans_of A; (s1,a,s2):trans_of(A) |] ==> a:act A"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   232
  apply (unfold is_trans_of_def actions_def is_asig_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   233
    apply (erule allE, erule impE, assumption)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   234
    apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   235
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   236
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   237
lemma starts_of_par: "starts_of(A \<parallel> B) = {p. fst(p):starts_of(A) & snd(p):starts_of(B)}"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   238
  by (simp add: par_def ioa_projections)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   239
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   240
lemma trans_of_par:
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   241
"trans_of(A \<parallel> B) = {tr. let s = fst(tr); a = fst(snd(tr)); t = snd(snd(tr))
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   242
             in (a:act A | a:act B) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   243
                (if a:act A then
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   244
                   (fst(s),a,fst(t)):trans_of(A)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   245
                 else fst(t) = fst(s))
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   246
                &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   247
                (if a:act B then
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   248
                   (snd(s),a,snd(t)):trans_of(B)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   249
                 else snd(t) = snd(s))}"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   250
  by (simp add: par_def ioa_projections)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   251
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   252
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   253
subsection "actions and par"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   254
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   255
lemma actions_asig_comp: "actions(asig_comp a b) = actions(a) Un actions(b)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   256
  by (auto simp add: actions_def asig_comp_def asig_projections)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   257
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   258
lemma asig_of_par: "asig_of(A \<parallel> B) = asig_comp (asig_of A) (asig_of B)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   259
  by (simp add: par_def ioa_projections)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   260
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   261
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   262
lemma externals_of_par: "ext (A1\<parallel>A2) = (ext A1) Un (ext A2)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   263
  apply (simp add: externals_def asig_of_par asig_comp_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   264
    asig_inputs_def asig_outputs_def Un_def set_diff_eq)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   265
  apply blast
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   266
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   267
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   268
lemma actions_of_par: "act (A1\<parallel>A2) = (act A1) Un (act A2)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   269
  apply (simp add: actions_def asig_of_par asig_comp_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   270
    asig_inputs_def asig_outputs_def asig_internals_def Un_def set_diff_eq)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   271
  apply blast
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   272
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   273
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   274
lemma inputs_of_par: "inp (A1\<parallel>A2) = ((inp A1) Un (inp A2)) - ((out A1) Un (out A2))"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   275
  by (simp add: actions_def asig_of_par asig_comp_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   276
    asig_inputs_def asig_outputs_def Un_def set_diff_eq)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   277
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   278
lemma outputs_of_par: "out (A1\<parallel>A2) = (out A1) Un (out A2)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   279
  by (simp add: actions_def asig_of_par asig_comp_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   280
    asig_outputs_def Un_def set_diff_eq)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   281
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   282
lemma internals_of_par: "int (A1\<parallel>A2) = (int A1) Un (int A2)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   283
  by (simp add: actions_def asig_of_par asig_comp_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   284
    asig_inputs_def asig_outputs_def asig_internals_def Un_def set_diff_eq)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   285
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   286
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   287
subsection "actions and compatibility"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   288
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   289
lemma compat_commute: "compatible A B = compatible B A"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   290
  by (auto simp add: compatible_def Int_commute)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   291
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   292
lemma ext1_is_not_int2: "[| compatible A1 A2; a:ext A1|] ==> a~:int A2"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   293
  apply (unfold externals_def actions_def compatible_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   294
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   295
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   296
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   297
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   298
(* just commuting the previous one: better commute compatible *)
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   299
lemma ext2_is_not_int1: "[| compatible A2 A1 ; a:ext A1|] ==> a~:int A2"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   300
  apply (unfold externals_def actions_def compatible_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   301
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   302
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   303
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   304
45606
b1e1508643b1 eliminated obsolete "standard";
wenzelm
parents: 44066
diff changeset
   305
lemmas ext1_ext2_is_not_act2 = ext1_is_not_int2 [THEN int_and_ext_is_act]
b1e1508643b1 eliminated obsolete "standard";
wenzelm
parents: 44066
diff changeset
   306
lemmas ext1_ext2_is_not_act1 = ext2_is_not_int1 [THEN int_and_ext_is_act]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   307
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   308
lemma intA_is_not_extB: "[| compatible A B; x:int A |] ==> x~:ext B"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   309
  apply (unfold externals_def actions_def compatible_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   310
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   311
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   312
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   313
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   314
lemma intA_is_not_actB: "[| compatible A B; a:int A |] ==> a ~: act B"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   315
  apply (unfold externals_def actions_def compatible_def is_asig_def asig_of_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   316
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   317
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   318
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   319
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   320
(* the only one that needs disjointness of outputs and of internals and _all_ acts *)
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   321
lemma outAactB_is_inpB: "[| compatible A B; a:out A ;a:act B|] ==> a : inp B"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   322
  apply (unfold asig_outputs_def asig_internals_def actions_def asig_inputs_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   323
      compatible_def is_asig_def asig_of_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   324
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   325
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   326
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   327
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   328
(* needed for propagation of input_enabledness from A,B to A\<parallel>B *)
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   329
lemma inpAAactB_is_inpBoroutB:
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   330
  "[| compatible A B; a:inp A ;a:act B|] ==> a : inp B | a: out B"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   331
  apply (unfold asig_outputs_def asig_internals_def actions_def asig_inputs_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   332
      compatible_def is_asig_def asig_of_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   333
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   334
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   335
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   336
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   337
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   338
subsection "input_enabledness and par"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   339
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   340
(* ugly case distinctions. Heart of proof:
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   341
     1. inpAAactB_is_inpBoroutB ie. internals are really hidden.
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   342
     2. inputs_of_par: outputs are no longer inputs of par. This is important here *)
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   343
lemma input_enabled_par:
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   344
  "[| compatible A B; input_enabled A; input_enabled B|]
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   345
        ==> input_enabled (A\<parallel>B)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   346
  apply (unfold input_enabled_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   347
  apply (simp add: Let_def inputs_of_par trans_of_par)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   348
  apply (tactic "safe_tac (Context.raw_transfer @{theory} @{theory_context Fun})")
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   349
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   350
  prefer 2
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   351
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   352
  (* a: inp A *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   353
  apply (case_tac "a:act B")
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   354
  (* a:act B *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   355
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   356
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   357
  apply (drule inpAAactB_is_inpBoroutB)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   358
  apply assumption
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   359
  apply assumption
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   360
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   361
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   362
  apply (erule_tac x = "aa" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   363
  apply (erule_tac x = "b" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   364
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   365
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   366
  apply (rule_tac x = " (s2,s2a) " in exI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   367
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   368
  (* a~: act B*)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   369
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   370
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   371
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   372
  apply (erule_tac x = "aa" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   373
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   374
  apply (rule_tac x = " (s2,b) " in exI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   375
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   376
  
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   377
  (* a:inp B *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   378
  apply (case_tac "a:act A")
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   379
  (* a:act A *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   380
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   381
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   382
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   383
  apply (frule_tac A1 = "A" in compat_commute [THEN iffD1])
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   384
  apply (drule inpAAactB_is_inpBoroutB)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   385
  back
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   386
  apply assumption
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   387
  apply assumption
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   388
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   389
  apply (erule_tac x = "aa" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   390
  apply (erule_tac x = "b" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   391
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   392
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   393
  apply (rule_tac x = " (s2,s2a) " in exI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   394
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   395
  (* a~: act B*)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   396
  apply (simp add: inp_is_act)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   397
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   398
  apply (erule_tac x = "a" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   399
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   400
  apply (erule_tac x = "b" in allE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   401
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   402
  apply (rule_tac x = " (aa,s2) " in exI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   403
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   404
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   405
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   406
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   407
subsection "invariants"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   408
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   409
lemma invariantI:
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   410
  "[| !!s. s:starts_of(A) ==> P(s);
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   411
      !!s t a. [|reachable A s; P(s)|] ==> (s,a,t): trans_of(A) --> P(t) |]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   412
   ==> invariant A P"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   413
  apply (unfold invariant_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   414
  apply (rule allI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   415
  apply (rule impI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   416
  apply (rule_tac x = "s" in reachable.induct)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   417
  apply assumption
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   418
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   419
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   420
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   421
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   422
lemma invariantI1:
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   423
 "[| !!s. s : starts_of(A) ==> P(s);
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   424
     !!s t a. reachable A s ==> P(s) --> (s,a,t):trans_of(A) --> P(t)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   425
  |] ==> invariant A P"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   426
  apply (blast intro: invariantI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   427
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   428
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   429
lemma invariantE: "[| invariant A P; reachable A s |] ==> P(s)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   430
  apply (unfold invariant_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   431
  apply blast
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   432
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   433
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   434
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   435
subsection "restrict"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   436
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   437
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   438
lemmas reachable_0 = reachable.reachable_0
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   439
  and reachable_n = reachable.reachable_n
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   440
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   441
lemma cancel_restrict_a: "starts_of(restrict ioa acts) = starts_of(ioa) &
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   442
          trans_of(restrict ioa acts) = trans_of(ioa)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   443
  by (simp add: restrict_def ioa_projections)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   444
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   445
lemma cancel_restrict_b: "reachable (restrict ioa acts) s = reachable ioa s"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   446
  apply (rule iffI)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   447
  apply (erule reachable.induct)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   448
  apply (simp add: cancel_restrict_a reachable_0)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   449
  apply (erule reachable_n)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   450
  apply (simp add: cancel_restrict_a)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   451
  (* <--  *)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   452
  apply (erule reachable.induct)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   453
  apply (rule reachable_0)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   454
  apply (simp add: cancel_restrict_a)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   455
  apply (erule reachable_n)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   456
  apply (simp add: cancel_restrict_a)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   457
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   458
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   459
lemma acts_restrict: "act (restrict A acts) = act A"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   460
  apply (simp (no_asm) add: actions_def asig_internals_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   461
    asig_outputs_def asig_inputs_def externals_def asig_of_def restrict_def restrict_asig_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   462
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   463
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   464
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   465
lemma cancel_restrict: "starts_of(restrict ioa acts) = starts_of(ioa) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   466
          trans_of(restrict ioa acts) = trans_of(ioa) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   467
          reachable (restrict ioa acts) s = reachable ioa s &
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   468
          act (restrict A acts) = act A"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   469
  by (simp add: cancel_restrict_a cancel_restrict_b acts_restrict)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   470
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   471
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   472
subsection "rename"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   473
62003
ba465fcd0267 more symbols;
wenzelm
parents: 62002
diff changeset
   474
lemma trans_rename: "s \<midarrow>a\<midarrow>(rename C f)\<rightarrow> t ==> (? x. Some(x) = f(a) & s \<midarrow>x\<midarrow>C\<rightarrow> t)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   475
  by (simp add: Let_def rename_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   476
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   477
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   478
lemma reachable_rename: "[| reachable (rename C g) s |] ==> reachable C s"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   479
  apply (erule reachable.induct)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   480
  apply (rule reachable_0)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   481
  apply (simp add: rename_def ioa_projections)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   482
  apply (drule trans_rename)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   483
  apply (erule exE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   484
  apply (erule conjE)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   485
  apply (erule reachable_n)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   486
  apply assumption
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   487
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   488
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   489
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   490
subsection "trans_of(A\<parallel>B)"
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   491
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   492
lemma trans_A_proj: "[|(s,a,t):trans_of (A\<parallel>B); a:act A|]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   493
              ==> (fst s,a,fst t):trans_of A"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   494
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   495
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   496
lemma trans_B_proj: "[|(s,a,t):trans_of (A\<parallel>B); a:act B|]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   497
              ==> (snd s,a,snd t):trans_of B"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   498
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   499
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   500
lemma trans_A_proj2: "[|(s,a,t):trans_of (A\<parallel>B); a~:act A|]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   501
              ==> fst s = fst t"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   502
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   503
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   504
lemma trans_B_proj2: "[|(s,a,t):trans_of (A\<parallel>B); a~:act B|]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   505
              ==> snd s = snd t"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   506
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   507
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   508
lemma trans_AB_proj: "(s,a,t):trans_of (A\<parallel>B)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   509
               ==> a :act A | a :act B"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   510
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   511
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   512
lemma trans_AB: "[|a:act A;a:act B;
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   513
       (fst s,a,fst t):trans_of A;(snd s,a,snd t):trans_of B|]
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   514
   ==> (s,a,t):trans_of (A\<parallel>B)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   515
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   516
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   517
lemma trans_A_notB: "[|a:act A;a~:act B;
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   518
       (fst s,a,fst t):trans_of A;snd s=snd t|]
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   519
   ==> (s,a,t):trans_of (A\<parallel>B)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   520
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   521
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   522
lemma trans_notA_B: "[|a~:act A;a:act B;
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   523
       (snd s,a,snd t):trans_of B;fst s=fst t|]
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   524
   ==> (s,a,t):trans_of (A\<parallel>B)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   525
  by (simp add: Let_def par_def trans_of_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   526
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   527
lemmas trans_of_defs1 = trans_AB trans_A_notB trans_notA_B
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   528
  and trans_of_defs2 = trans_A_proj trans_B_proj trans_A_proj2 trans_B_proj2 trans_AB_proj
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   529
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   530
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   531
lemma trans_of_par4:
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   532
"((s,a,t) : trans_of(A \<parallel> B \<parallel> C \<parallel> D)) =
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   533
  ((a:actions(asig_of(A)) | a:actions(asig_of(B)) | a:actions(asig_of(C)) |
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   534
    a:actions(asig_of(D))) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   535
   (if a:actions(asig_of(A)) then (fst(s),a,fst(t)):trans_of(A)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   536
    else fst t=fst s) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   537
   (if a:actions(asig_of(B)) then (fst(snd(s)),a,fst(snd(t))):trans_of(B)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   538
    else fst(snd(t))=fst(snd(s))) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   539
   (if a:actions(asig_of(C)) then
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   540
      (fst(snd(snd(s))),a,fst(snd(snd(t)))):trans_of(C)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   541
    else fst(snd(snd(t)))=fst(snd(snd(s)))) &
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   542
   (if a:actions(asig_of(D)) then
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   543
      (snd(snd(snd(s))),a,snd(snd(snd(t)))):trans_of(D)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   544
    else snd(snd(snd(t)))=snd(snd(snd(s)))))"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   545
  by (simp add: par_def actions_asig_comp prod_eq_iff Let_def ioa_projections)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   546
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   547
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   548
subsection "proof obligation generator for IOA requirements"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   549
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   550
(* without assumptions on A and B because is_trans_of is also incorporated in \<parallel>def *)
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   551
lemma is_trans_of_par: "is_trans_of (A\<parallel>B)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   552
  by (simp add: is_trans_of_def Let_def actions_of_par trans_of_par)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   553
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   554
lemma is_trans_of_restrict: "is_trans_of A ==> is_trans_of (restrict A acts)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   555
  by (simp add: is_trans_of_def cancel_restrict acts_restrict)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   556
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   557
lemma is_trans_of_rename: "is_trans_of A ==> is_trans_of (rename A f)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   558
  apply (unfold is_trans_of_def restrict_def restrict_asig_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   559
  apply (simp add: Let_def actions_def trans_of_def asig_internals_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   560
    asig_outputs_def asig_inputs_def externals_def asig_of_def rename_def rename_set_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   561
  apply blast
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   562
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   563
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   564
lemma is_asig_of_par: "[| is_asig_of A; is_asig_of B; compatible A B|]
61999
89291b5d0ede more symbols;
wenzelm
parents: 59807
diff changeset
   565
          ==> is_asig_of (A\<parallel>B)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   566
  apply (simp add: is_asig_of_def asig_of_par asig_comp_def compatible_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   567
    asig_internals_def asig_outputs_def asig_inputs_def actions_def is_asig_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   568
  apply (simp add: asig_of_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   569
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   570
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   571
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   572
lemma is_asig_of_restrict: "is_asig_of A ==> is_asig_of (restrict A f)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   573
  apply (unfold is_asig_of_def is_asig_def asig_of_def restrict_def restrict_asig_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   574
             asig_internals_def asig_outputs_def asig_inputs_def externals_def o_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   575
  apply simp
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   576
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   577
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   578
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   579
lemma is_asig_of_rename: "is_asig_of A ==> is_asig_of (rename A f)"
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   580
  apply (simp add: is_asig_of_def rename_def rename_set_def asig_internals_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   581
    asig_outputs_def asig_inputs_def actions_def is_asig_def asig_of_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   582
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   583
  apply (drule_tac [!] s = "Some _" in sym)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   584
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   585
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   586
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   587
lemmas [simp] = is_asig_of_par is_asig_of_restrict
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   588
  is_asig_of_rename is_trans_of_par is_trans_of_restrict is_trans_of_rename
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   589
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   590
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   591
lemma compatible_par: "[|compatible A B; compatible A C |]==> compatible A (B\<parallel>C)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   592
  apply (unfold compatible_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   593
  apply (simp add: internals_of_par outputs_of_par actions_of_par)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   594
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   595
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   596
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   597
(*  better derive by previous one and compat_commute *)
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   598
lemma compatible_par2: "[|compatible A C; compatible B C |]==> compatible (A\<parallel>B) C"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   599
  apply (unfold compatible_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   600
  apply (simp add: internals_of_par outputs_of_par actions_of_par)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   601
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   602
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   603
62005
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   604
lemma compatible_restrict:
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   605
  "[| compatible A B; (ext B - S) Int ext A = {}|]
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   606
        ==> compatible A (restrict B S)"
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   607
  apply (unfold compatible_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   608
  apply (simp add: ioa_triple_proj asig_triple_proj externals_def
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   609
    restrict_def restrict_asig_def actions_def)
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   610
  apply auto
68db98c2cd97 modernized defs;
wenzelm
parents: 62003
diff changeset
   611
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   612
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   613
declare split_paired_Ex [simp]
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   614
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   615
end