src/HOL/HOLCF/IOA/meta_theory/Deadlock.thy
author wenzelm
Sun, 30 Jan 2011 13:02:18 +0100
changeset 41648 6d736d983d5c
parent 40945 b8703f63bfb2
child 42151 4da4fc77664b
permissions -rw-r--r--
clarified example settings for Proof General;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents:
diff changeset
     1
(*  Title:      HOLCF/IOA/meta_theory/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
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     5
header {* Deadlock freedom of I/O Automata *}
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
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    11
text {* input actions may always be added to a schedule *}
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:
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    14
  "[| Filter (%x. x:act A)$sch : schedules A; a:inp A; input_enabled A; Finite sch|]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    15
          ==> Filter (%x. x:act A)$sch @@ a>>nil : schedules A"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    16
apply (simp add: schedules_def has_schedule_def)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 19741
diff changeset
    17
apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    18
apply (frule inp_is_act)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    19
apply (simp add: executions_def)
27208
5fe899199f85 proper context for tactics derived from res_inst_tac;
wenzelm
parents: 26359
diff changeset
    20
apply (tactic {* pair_tac @{context} "ex" 1 *})
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    21
apply (rename_tac s ex)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    22
apply (subgoal_tac "Finite ex")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    23
prefer 2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    24
apply (simp add: filter_act_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    25
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    26
apply (rule_tac [2] Map2Finite [THEN iffD1])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    27
apply (rule_tac [2] t = "Map fst$ex" in subst)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    28
prefer 2 apply (assumption)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    29
apply (erule_tac [2] FiniteFilter)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    30
(* subgoal 1 *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    31
apply (frule exists_laststate)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    32
apply (erule allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    33
apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    34
(* using input-enabledness *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    35
apply (simp add: input_enabled_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    36
apply (erule conjE)+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    37
apply (erule_tac x = "a" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    38
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    39
apply (erule_tac x = "u" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    40
apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    41
(* instantiate execution *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    42
apply (rule_tac x = " (s,ex @@ (a,s2) >>nil) " in exI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    43
apply (simp add: filter_act_def MapConc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    44
apply (erule_tac t = "u" in lemma_2_1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    45
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    46
apply (rule sym)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    47
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    48
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    49
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    50
text {*
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    51
               Deadlock freedom: component B cannot block an out or int action
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    52
                                 of component A in every schedule.
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    53
    Needs compositionality on schedule level, input-enabledness, compatibility
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    54
                    and distributivity of is_exec_frag over @@
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    55
*}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    56
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    57
declare split_if [split del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    58
lemma IOA_deadlock_free: "[| a : local A; Finite sch; sch : schedules (A||B);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    59
             Filter (%x. x:act A)$(sch @@ a>>nil) : schedules A; compatible A B; input_enabled B |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    60
           ==> (sch @@ a>>nil) : schedules (A||B)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    61
apply (simp add: compositionality_sch locals_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    62
apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    63
(* a : act (A||B) *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    64
prefer 2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    65
apply (simp add: actions_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    66
apply (blast dest: int_is_act out_is_act)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    67
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    68
(* Filter B (sch@@[a]) : schedules B *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    69
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    70
apply (case_tac "a:int A")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    71
apply (drule intA_is_not_actB)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    72
apply (assumption) (* --> a~:act B *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    73
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    74
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    75
(* case a~:int A , i.e. a:out A *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    76
apply (case_tac "a~:act B")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    77
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    78
(* case a:act B *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    79
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    80
apply (subgoal_tac "a:out A")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    81
prefer 2 apply (blast)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    82
apply (drule outAactB_is_inpB)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    83
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    84
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    85
apply (rule scheds_input_enabled)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    86
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    87
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    88
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    89
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    90
declare split_if [split]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    91
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    92
end