src/HOLCF/IOA/meta_theory/Deadlock.thy
author wenzelm
Tue, 03 Jul 2007 22:27:27 +0200
changeset 23560 e43686246de4
parent 19741 f65265d71426
child 26359 6d437bde2f1d
permissions -rw-r--r--
proper use of ioa_package.ML;
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
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents:
diff changeset
     2
    ID:         $Id$
12218
wenzelm
parents: 3521
diff changeset
     3
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     4
*)
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents:
diff changeset
     5
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     6
header {* Deadlock freedom of I/O Automata *}
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents:
diff changeset
     7
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
theory Deadlock
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
imports RefCorrectness CompoScheds
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    10
begin
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    11
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    12
text {* input actions may always be added to a schedule *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    13
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    14
lemma scheds_input_enabled:
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    15
  "[| 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
    16
          ==> Filter (%x. x:act A)$sch @@ a>>nil : schedules A"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    17
apply (simp add: schedules_def has_schedule_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    18
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    19
apply (frule inp_is_act)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    20
apply (simp add: executions_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    21
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    22
apply (rename_tac s ex)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    23
apply (subgoal_tac "Finite ex")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    24
prefer 2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    25
apply (simp add: filter_act_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    26
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    27
apply (rule_tac [2] Map2Finite [THEN iffD1])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    28
apply (rule_tac [2] t = "Map fst$ex" in subst)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    29
prefer 2 apply (assumption)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    30
apply (erule_tac [2] FiniteFilter)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    31
(* subgoal 1 *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    32
apply (frule exists_laststate)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    33
apply (erule allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    34
apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    35
(* using input-enabledness *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    36
apply (simp add: input_enabled_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    37
apply (erule conjE)+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    38
apply (erule_tac x = "a" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    39
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    40
apply (erule_tac x = "u" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    41
apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    42
(* instantiate execution *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    43
apply (rule_tac x = " (s,ex @@ (a,s2) >>nil) " in exI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    44
apply (simp add: filter_act_def MapConc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    45
apply (erule_tac t = "u" in lemma_2_1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    46
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    47
apply (rule sym)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    48
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    49
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    50
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    51
text {*
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    52
               Deadlock freedom: component B cannot block an out or int action
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    53
                                 of component A in every schedule.
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    54
    Needs compositionality on schedule level, input-enabledness, compatibility
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    55
                    and distributivity of is_exec_frag over @@
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    56
*}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    57
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    58
declare split_if [split del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    59
lemma IOA_deadlock_free: "[| a : local A; Finite sch; sch : schedules (A||B);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    60
             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
    61
           ==> (sch @@ a>>nil) : schedules (A||B)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    62
apply (simp add: compositionality_sch locals_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    63
apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    64
(* a : act (A||B) *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    65
prefer 2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    66
apply (simp add: actions_of_par)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    67
apply (blast dest: int_is_act out_is_act)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    68
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    69
(* Filter B (sch@@[a]) : schedules B *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    70
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    71
apply (case_tac "a:int A")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    72
apply (drule intA_is_not_actB)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    73
apply (assumption) (* --> a~:act B *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    74
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    75
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    76
(* case a~:int A , i.e. a:out A *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    77
apply (case_tac "a~:act B")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    78
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    79
(* case a:act B *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    80
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    81
apply (subgoal_tac "a:out A")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    82
prefer 2 apply (blast)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    83
apply (drule outAactB_is_inpB)
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 assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    86
apply (rule scheds_input_enabled)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    87
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    88
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    89
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    90
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    91
declare split_if [split]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    92
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    93
end