src/HOL/HOLCF/IOA/Deadlock.thy
author wenzelm
Wed, 10 Apr 2019 16:18:12 +0200
changeset 70108 77f978dd8ffb
parent 63549 b0d31c7def86
permissions -rw-r--r--
merged;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62008
cbedaddc9351 clarified directory structure;
wenzelm
parents: 62002
diff changeset
     1
(*  Title:      HOL/HOLCF/IOA/Deadlock.thy
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 40774
diff changeset
     2
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     3
*)
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents:
diff changeset
     4
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
     5
section \<open>Deadlock freedom of I/O Automata\<close>
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents:
diff changeset
     6
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     7
theory Deadlock
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
imports RefCorrectness CompoScheds
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
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    11
text \<open>Input actions may always be added to a schedule.\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    12
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    13
lemma scheds_input_enabled:
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62390
diff changeset
    14
  "Filter (\<lambda>x. x \<in> act A) \<cdot> sch \<in> schedules A \<Longrightarrow> a \<in> inp A \<Longrightarrow> input_enabled A \<Longrightarrow> Finite sch
b0d31c7def86 more symbols;
wenzelm
parents: 62390
diff changeset
    15
    \<Longrightarrow> Filter (\<lambda>x. x \<in> act A) \<cdot> sch @@ a \<leadsto> nil \<in> schedules A"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    16
  apply (simp add: schedules_def has_schedule_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    17
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    18
  apply (frule inp_is_act)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    19
  apply (simp add: executions_def)
62195
799a5306e2ed more method definitions;
wenzelm
parents: 62156
diff changeset
    20
  apply (pair ex)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    21
  apply (rename_tac s ex)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    22
  apply (subgoal_tac "Finite ex")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    23
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    24
  apply (simp add: filter_act_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    25
  defer
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    26
  apply (rule_tac [2] Map2Finite [THEN iffD1])
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62390
diff changeset
    27
  apply (rule_tac [2] t = "Map fst \<cdot> ex" in subst)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    28
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    29
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    30
  apply (erule_tac [2] FiniteFilter)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    31
  text \<open>subgoal 1\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    32
  apply (frule exists_laststate)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    33
  apply (erule allE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    34
  apply (erule exE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    35
  text \<open>using input-enabledness\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    36
  apply (simp add: input_enabled_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    37
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    38
  apply (erule_tac x = "a" in allE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    39
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    40
  apply (erule_tac x = "u" in allE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    41
  apply (erule exE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    42
  text \<open>instantiate execution\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    43
  apply (rule_tac x = " (s, ex @@ (a, s2) \<leadsto> nil) " in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    44
  apply (simp add: filter_act_def MapConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    45
  apply (erule_tac t = "u" in lemma_2_1)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    46
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    47
  apply (rule sym)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    48
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    49
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    50
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    51
text \<open>
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    52
  Deadlock freedom: component B cannot block an out or int action of component
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    53
  A in every schedule.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    54
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    55
  Needs compositionality on schedule level, input-enabledness, compatibility
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    56
  and distributivity of \<open>is_exec_frag\<close> over \<open>@@\<close>.
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    57
\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    58
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    59
lemma IOA_deadlock_free:
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    60
  assumes "a \<in> local A"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    61
    and "Finite sch"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    62
    and "sch \<in> schedules (A \<parallel> B)"
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62390
diff changeset
    63
    and "Filter (\<lambda>x. x \<in> act A) \<cdot> (sch @@ a \<leadsto> nil) \<in> schedules A"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    64
    and "compatible A B"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    65
    and "input_enabled B"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    66
  shows "(sch @@ a \<leadsto> nil) \<in> schedules (A \<parallel> B)"
62390
842917225d56 more canonical names
nipkow
parents: 62195
diff changeset
    67
  supply if_split [split del]
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    68
  apply (insert assms)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    69
  apply (simp add: compositionality_sch locals_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    70
  apply (rule conjI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    71
  text \<open>\<open>a \<in> act (A \<parallel> B)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    72
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    73
  apply (simp add: actions_of_par)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    74
  apply (blast dest: int_is_act out_is_act)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    75
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    76
  text \<open>\<open>Filter B (sch @@ [a]) \<in> schedules B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    77
  apply (case_tac "a \<in> int A")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    78
  apply (drule intA_is_not_actB)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    79
  apply (assumption) (* \<longrightarrow> a \<notin> act B *)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    80
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    81
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    82
  text \<open>case \<open>a \<notin> int A\<close>, i.e. \<open>a \<in> out A\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    83
  apply (case_tac "a \<notin> act B")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    84
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    85
  text \<open>case \<open>a \<in> act B\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    86
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    87
  apply (subgoal_tac "a \<in> out A")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    88
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    89
  apply blast
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    90
  apply (drule outAactB_is_inpB)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    91
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    92
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    93
  apply (rule scheds_input_enabled)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    94
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    95
  apply assumption+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    96
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    97
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    98
end