Correctness.thy
author zhangx
Fri, 29 Jan 2016 11:01:13 +0800
changeset 93 524bd3caa6b6
parent 92 4763aa246dbd
child 97 c7ba70dc49bd
child 102 3a801bbd2687
permissions -rw-r--r--
The overwriten original .thy files are working now. The ones in last revision aren't.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
93
524bd3caa6b6 The overwriten original .thy files are working now. The ones in last revision aren't.
zhangx
parents: 92
diff changeset
     1
theory Correctness
524bd3caa6b6 The overwriten original .thy files are working now. The ones in last revision aren't.
zhangx
parents: 92
diff changeset
     2
imports PIPBasics
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     3
begin
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     4
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
     5
text {* 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
     6
  The following two auxiliary lemmas are used to reason about @{term Max}.
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
     7
*}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
     8
lemma image_Max_eqI: 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
     9
  assumes "finite B"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    10
  and "b \<in> B"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    11
  and "\<forall> x \<in> B. f x \<le> f b"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    12
  shows "Max (f ` B) = f b"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    13
  using assms
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    14
  using Max_eqI by blast 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    15
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    16
lemma image_Max_subset:
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    17
  assumes "finite A"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    18
  and "B \<subseteq> A"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    19
  and "a \<in> B"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    20
  and "Max (f ` A) = f a"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    21
  shows "Max (f ` B) = f a"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    22
proof(rule image_Max_eqI)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    23
  show "finite B"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    24
    using assms(1) assms(2) finite_subset by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    25
next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    26
  show "a \<in> B" using assms by simp
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    27
next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    28
  show "\<forall>x\<in>B. f x \<le> f a"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    29
    by (metis Max_ge assms(1) assms(2) assms(4) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    30
            finite_imageI image_eqI subsetCE) 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    31
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    32
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    33
text {*
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    34
  The following locale @{text "highest_gen"} sets the basic context for our
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    35
  investigation: supposing thread @{text th} holds the highest @{term cp}-value
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    36
  in state @{text s}, which means the task for @{text th} is the 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    37
  most urgent. We want to show that  
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    38
  @{text th} is treated correctly by PIP, which means
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    39
  @{text th} will not be blocked unreasonably by other less urgent
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    40
  threads. 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    41
*}
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    42
locale highest_gen =
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    43
  fixes s th prio tm
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    44
  assumes vt_s: "vt s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    45
  and threads_s: "th \<in> threads s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    46
  and highest: "preced th s = Max ((cp s)`threads s)"
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    47
  -- {* The internal structure of @{term th}'s precedence is exposed:*}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    48
  and preced_th: "preced th s = Prc prio tm" 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    49
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    50
-- {* @{term s} is a valid trace, so it will inherit all results derived for
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    51
      a valid trace: *}
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    52
sublocale highest_gen < vat_s: valid_trace "s"
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    53
  by (unfold_locales, insert vt_s, simp)
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    54
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    55
context highest_gen
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    56
begin
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    57
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    58
text {*
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    59
  @{term tm} is the time when the precedence of @{term th} is set, so 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    60
  @{term tm} must be a valid moment index into @{term s}.
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    61
*}
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    62
lemma lt_tm: "tm < length s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    63
  by (insert preced_tm_lt[OF threads_s preced_th], simp)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    64
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    65
text {*
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    66
  Since @{term th} holds the highest precedence and @{text "cp"}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    67
  is the highest precedence of all threads in the sub-tree of 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    68
  @{text "th"} and @{text th} is among these threads, 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    69
  its @{term cp} must equal to its precedence:
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    70
*}
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    71
lemma eq_cp_s_th: "cp s th = preced th s" (is "?L = ?R")
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    72
proof -
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    73
  have "?L \<le> ?R"
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    74
  by (unfold highest, rule Max_ge, 
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
    75
        auto simp:threads_s finite_threads)
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    76
  moreover have "?R \<le> ?L"
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    77
    by (unfold vat_s.cp_rec, rule Max_ge, 
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    78
        auto simp:the_preced_def vat_s.fsbttRAGs.finite_children)
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
    79
  ultimately show ?thesis by auto
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    80
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    81
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
    82
lemma highest_cp_preced: "cp s th = Max (the_preced s ` threads s)"
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
    83
  using eq_cp_s_th highest max_cp_eq the_preced_def by presburger
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
    84
  
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    85
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
    86
lemma highest_preced_thread: "preced th s = Max (the_preced s ` threads s)"
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    87
  by (fold eq_cp_s_th, unfold highest_cp_preced, simp)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    88
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    89
lemma highest': "cp s th = Max (cp s ` threads s)"
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
    90
  by (simp add: eq_cp_s_th highest)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    91
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    92
end
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    93
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    94
locale extend_highest_gen = highest_gen + 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    95
  fixes t 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    96
  assumes vt_t: "vt (t@s)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    97
  and create_low: "Create th' prio' \<in> set t \<Longrightarrow> prio' \<le> prio"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    98
  and set_diff_low: "Set th' prio' \<in> set t \<Longrightarrow> th' \<noteq> th \<and> prio' \<le> prio"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    99
  and exit_diff: "Exit th' \<in> set t \<Longrightarrow> th' \<noteq> th"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   100
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   101
sublocale extend_highest_gen < vat_t: valid_trace "t@s"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   102
  by (unfold_locales, insert vt_t, simp)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   103
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   104
lemma step_back_vt_app: 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   105
  assumes vt_ts: "vt (t@s)" 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   106
  shows "vt s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   107
proof -
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   108
  from vt_ts show ?thesis
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   109
  proof(induct t)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   110
    case Nil
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   111
    from Nil show ?case by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   112
  next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   113
    case (Cons e t)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   114
    assume ih: " vt (t @ s) \<Longrightarrow> vt s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   115
      and vt_et: "vt ((e # t) @ s)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   116
    show ?case
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   117
    proof(rule ih)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   118
      show "vt (t @ s)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   119
      proof(rule step_back_vt)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   120
        from vt_et show "vt (e # t @ s)" by simp
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   121
      qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   122
    qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   123
  qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   124
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   125
73
b0054fb0d1ce Moment.thy further improved.
zhangx
parents: 69
diff changeset
   126
(* locale red_extend_highest_gen = extend_highest_gen +
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   127
   fixes i::nat
73
b0054fb0d1ce Moment.thy further improved.
zhangx
parents: 69
diff changeset
   128
*)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   129
73
b0054fb0d1ce Moment.thy further improved.
zhangx
parents: 69
diff changeset
   130
(*
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   131
sublocale red_extend_highest_gen <   red_moment: extend_highest_gen "s" "th" "prio" "tm" "(moment i t)"
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   132
  apply (insert extend_highest_gen_axioms, subst (asm) (1) moment_restm_s [of i t, symmetric])
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   133
  apply (unfold extend_highest_gen_def extend_highest_gen_axioms_def, clarsimp)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   134
  by (unfold highest_gen_def, auto dest:step_back_vt_app)
73
b0054fb0d1ce Moment.thy further improved.
zhangx
parents: 69
diff changeset
   135
*)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   136
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   137
context extend_highest_gen
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   138
begin
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   139
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   140
 lemma ind [consumes 0, case_names Nil Cons, induct type]:
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   141
  assumes 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   142
    h0: "R []"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   143
  and h2: "\<And> e t. \<lbrakk>vt (t@s); step (t@s) e; 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   144
                    extend_highest_gen s th prio tm t; 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   145
                    extend_highest_gen s th prio tm (e#t); R t\<rbrakk> \<Longrightarrow> R (e#t)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   146
  shows "R t"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   147
proof -
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   148
  from vt_t extend_highest_gen_axioms show ?thesis
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   149
  proof(induct t)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   150
    from h0 show "R []" .
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   151
  next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   152
    case (Cons e t')
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   153
    assume ih: "\<lbrakk>vt (t' @ s); extend_highest_gen s th prio tm t'\<rbrakk> \<Longrightarrow> R t'"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   154
      and vt_e: "vt ((e # t') @ s)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   155
      and et: "extend_highest_gen s th prio tm (e # t')"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   156
    from vt_e and step_back_step have stp: "step (t'@s) e" by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   157
    from vt_e and step_back_vt have vt_ts: "vt (t'@s)" by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   158
    show ?case
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   159
    proof(rule h2 [OF vt_ts stp _ _ _ ])
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   160
      show "R t'"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   161
      proof(rule ih)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   162
        from et show ext': "extend_highest_gen s th prio tm t'"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   163
          by (unfold extend_highest_gen_def extend_highest_gen_axioms_def, auto dest:step_back_vt)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   164
      next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   165
        from vt_ts show "vt (t' @ s)" .
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   166
      qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   167
    next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   168
      from et show "extend_highest_gen s th prio tm (e # t')" .
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   169
    next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   170
      from et show ext': "extend_highest_gen s th prio tm t'"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   171
          by (unfold extend_highest_gen_def extend_highest_gen_axioms_def, auto dest:step_back_vt)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   172
    qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   173
  qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   174
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   175
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   176
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   177
lemma th_kept: "th \<in> threads (t @ s) \<and> 
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   178
                 preced th (t@s) = preced th s" (is "?Q t") 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   179
proof -
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   180
  show ?thesis
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   181
  proof(induct rule:ind)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   182
    case Nil
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   183
    from threads_s
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   184
    show ?case
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   185
      by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   186
  next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   187
    case (Cons e t)
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   188
    interpret h_e: extend_highest_gen _ _ _ _ "(e # t)" using Cons by auto
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   189
    interpret h_t: extend_highest_gen _ _ _ _ t using Cons by auto
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   190
    show ?case
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   191
    proof(cases e)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   192
      case (Create thread prio)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   193
      show ?thesis
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   194
      proof -
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   195
        from Cons and Create have "step (t@s) (Create thread prio)" by auto
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   196
        hence "th \<noteq> thread"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   197
        proof(cases)
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   198
          case thread_create
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   199
          with Cons show ?thesis by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   200
        qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   201
        hence "preced th ((e # t) @ s)  = preced th (t @ s)"
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   202
          by (unfold Create, auto simp:preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   203
        moreover note Cons
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   204
        ultimately show ?thesis
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   205
          by (auto simp:Create)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   206
      qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   207
    next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   208
      case (Exit thread)
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   209
      from h_e.exit_diff and Exit
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   210
      have neq_th: "thread \<noteq> th" by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   211
      with Cons
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   212
      show ?thesis
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   213
        by (unfold Exit, auto simp:preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   214
    next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   215
      case (P thread cs)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   216
      with Cons
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   217
      show ?thesis 
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   218
        by (auto simp:P preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   219
    next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   220
      case (V thread cs)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   221
      with Cons
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   222
      show ?thesis 
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   223
        by (auto simp:V preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   224
    next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   225
      case (Set thread prio')
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   226
      show ?thesis
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   227
      proof -
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   228
        from h_e.set_diff_low and Set
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   229
        have "th \<noteq> thread" by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   230
        hence "preced th ((e # t) @ s)  = preced th (t @ s)"
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   231
          by (unfold Set, auto simp:preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   232
        moreover note Cons
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   233
        ultimately show ?thesis
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   234
          by (auto simp:Set)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   235
      qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   236
    qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   237
  qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   238
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   239
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   240
text {*
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   241
  According to @{thm th_kept}, thread @{text "th"} has its living status
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   242
  and precedence kept along the way of @{text "t"}. The following lemma
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   243
  shows that this preserved precedence of @{text "th"} remains as the highest
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   244
  along the way of @{text "t"}.
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   245
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   246
  The proof goes by induction over @{text "t"} using the specialized
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   247
  induction rule @{thm ind}, followed by case analysis of each possible 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   248
  operations of PIP. All cases follow the same pattern rendered by the 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   249
  generalized introduction rule @{thm "image_Max_eqI"}. 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   250
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   251
  The very essence is to show that precedences, no matter whether they 
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   252
  are newly introduced or modified, are always lower than the one held 
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   253
  by @{term "th"}, which by @{thm th_kept} is preserved along the way.
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   254
*}
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   255
lemma max_kept: "Max (the_preced (t @ s) ` (threads (t@s))) = preced th s"
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   256
proof(induct rule:ind)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   257
  case Nil
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   258
  from highest_preced_thread
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   259
  show ?case by simp
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   260
next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   261
  case (Cons e t)
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   262
    interpret h_e: extend_highest_gen _ _ _ _ "(e # t)" using Cons by auto
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   263
    interpret h_t: extend_highest_gen _ _ _ _ t using Cons by auto
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   264
  show ?case
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   265
  proof(cases e)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   266
    case (Create thread prio')
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   267
    show ?thesis (is "Max (?f ` ?A) = ?t")
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   268
    proof -
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   269
      -- {* The following is the common pattern of each branch of the case analysis. *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   270
      -- {* The major part is to show that @{text "th"} holds the highest precedence: *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   271
      have "Max (?f ` ?A) = ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   272
      proof(rule image_Max_eqI)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   273
        show "finite ?A" using h_e.finite_threads by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   274
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   275
        show "th \<in> ?A" using h_e.th_kept by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   276
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   277
        show "\<forall>x\<in>?A. ?f x \<le> ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   278
        proof 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   279
          fix x
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   280
          assume "x \<in> ?A"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   281
          hence "x = thread \<or> x \<in> threads (t@s)" by (auto simp:Create)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   282
          thus "?f x \<le> ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   283
          proof
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   284
            assume "x = thread"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   285
            thus ?thesis 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   286
              apply (simp add:Create the_preced_def preced_def, fold preced_def)
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   287
              using Create h_e.create_low h_t.th_kept lt_tm preced_leI2 
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   288
              preced_th by force
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   289
          next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   290
            assume h: "x \<in> threads (t @ s)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   291
            from Cons(2)[unfolded Create] 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   292
            have "x \<noteq> thread" using h by (cases, auto)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   293
            hence "?f x = the_preced (t@s) x" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   294
              by (simp add:Create the_preced_def preced_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   295
            hence "?f x \<le> Max (the_preced (t@s) ` threads (t@s))"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   296
              by (simp add: h_t.finite_threads h)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   297
            also have "... = ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   298
              by (metis Cons.hyps(5) h_e.th_kept the_preced_def) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   299
            finally show ?thesis .
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   300
          qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   301
        qed
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   302
      qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   303
     -- {* The minor part is to show that the precedence of @{text "th"} 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   304
           equals to preserved one, given by the foregoing lemma @{thm th_kept} *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   305
      also have "... = ?t" using h_e.th_kept the_preced_def by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   306
      -- {* Then it follows trivially that the precedence preserved
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   307
            for @{term "th"} remains the maximum of all living threads along the way. *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   308
      finally show ?thesis .
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   309
    qed 
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   310
  next 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   311
    case (Exit thread)
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   312
    show ?thesis (is "Max (?f ` ?A) = ?t")
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   313
    proof -
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   314
      have "Max (?f ` ?A) = ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   315
      proof(rule image_Max_eqI)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   316
        show "finite ?A" using h_e.finite_threads by auto 
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   317
      next
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   318
        show "th \<in> ?A" using h_e.th_kept by auto 
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   319
      next
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   320
        show "\<forall>x\<in>?A. ?f x \<le> ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   321
        proof 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   322
          fix x
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   323
          assume "x \<in> ?A"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   324
          hence "x \<in> threads (t@s)" by (simp add: Exit) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   325
          hence "?f x \<le> Max (?f ` threads (t@s))" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   326
            by (simp add: h_t.finite_threads) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   327
          also have "... \<le> ?f th" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   328
            apply (simp add:Exit the_preced_def preced_def, fold preced_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   329
            using Cons.hyps(5) h_t.th_kept the_preced_def by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   330
          finally show "?f x \<le> ?f th" .
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   331
        qed
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   332
      qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   333
      also have "... = ?t" using h_e.th_kept the_preced_def by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   334
      finally show ?thesis .
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   335
    qed 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   336
  next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   337
    case (P thread cs)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   338
    with Cons
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   339
    show ?thesis by (auto simp:preced_def the_preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   340
  next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   341
    case (V thread cs)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   342
    with Cons
62
031d2ae9c9b8 In the middle of retrofiting ExtGG.thy.
zhangx
parents: 35
diff changeset
   343
    show ?thesis by (auto simp:preced_def the_preced_def)
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   344
  next 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   345
    case (Set thread prio')
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   346
    show ?thesis (is "Max (?f ` ?A) = ?t")
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   347
    proof -
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   348
      have "Max (?f ` ?A) = ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   349
      proof(rule image_Max_eqI)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   350
        show "finite ?A" using h_e.finite_threads by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   351
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   352
        show "th \<in> ?A" using h_e.th_kept by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   353
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   354
        show "\<forall>x\<in>?A. ?f x \<le> ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   355
        proof 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   356
          fix x
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   357
          assume h: "x \<in> ?A"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   358
          show "?f x \<le> ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   359
          proof(cases "x = thread")
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   360
            case True
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   361
            moreover have "the_preced (Set thread prio' # t @ s) thread \<le> the_preced (t @ s) th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   362
            proof -
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   363
              have "the_preced (t @ s) th = Prc prio tm"  
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   364
                using h_t.th_kept preced_th by (simp add:the_preced_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   365
              moreover have "prio' \<le> prio" using Set h_e.set_diff_low by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   366
              ultimately show ?thesis by (insert lt_tm, auto simp:the_preced_def preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   367
            qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   368
            ultimately show ?thesis
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   369
              by (unfold Set, simp add:the_preced_def preced_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   370
          next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   371
            case False
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   372
            then have "?f x  = the_preced (t@s) x"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   373
              by (simp add:the_preced_def preced_def Set)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   374
            also have "... \<le> Max (the_preced (t@s) ` threads (t@s))"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   375
              using Set h h_t.finite_threads by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   376
            also have "... = ?f th" by (metis Cons.hyps(5) h_e.th_kept the_preced_def) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   377
            finally show ?thesis .
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   378
          qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   379
        qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   380
      qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   381
      also have "... = ?t" using h_e.th_kept the_preced_def by auto
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   382
      finally show ?thesis .
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   383
    qed 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   384
  qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   385
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   386
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   387
lemma max_preced: "preced th (t@s) = Max (the_preced (t@s) ` (threads (t@s)))"
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   388
  by (insert th_kept max_kept, auto)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   389
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   390
text {*
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   391
  The reason behind the following lemma is that:
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   392
  Since @{term "cp"} is defined as the maximum precedence 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   393
  of those threads contained in the sub-tree of node @{term "Th th"} 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   394
  in @{term "RAG (t@s)"}, and all these threads are living threads, and 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   395
  @{term "th"} is also among them, the maximum precedence of 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   396
  them all must be the one for @{text "th"}.
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   397
*}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   398
lemma th_cp_max_preced: 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   399
  "cp (t@s) th = Max (the_preced (t@s) ` (threads (t@s)))" (is "?L = ?R") 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   400
proof -
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   401
  let ?f = "the_preced (t@s)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   402
  have "?L = ?f th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   403
  proof(unfold cp_alt_def, rule image_Max_eqI)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   404
    show "finite {th'. Th th' \<in> subtree (RAG (t @ s)) (Th th)}"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   405
    proof -
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   406
      have "{th'. Th th' \<in> subtree (RAG (t @ s)) (Th th)} = 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   407
            the_thread ` {n . n \<in> subtree (RAG (t @ s)) (Th th) \<and>
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   408
                            (\<exists> th'. n = Th th')}"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   409
      by (smt Collect_cong Setcompr_eq_image mem_Collect_eq the_thread.simps)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   410
      moreover have "finite ..." by (simp add: vat_t.fsbtRAGs.finite_subtree) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   411
      ultimately show ?thesis by simp
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   412
    qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   413
  next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   414
    show "th \<in> {th'. Th th' \<in> subtree (RAG (t @ s)) (Th th)}"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   415
      by (auto simp:subtree_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   416
  next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   417
    show "\<forall>x\<in>{th'. Th th' \<in> subtree (RAG (t @ s)) (Th th)}.
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   418
               the_preced (t @ s) x \<le> the_preced (t @ s) th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   419
    proof
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   420
      fix th'
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   421
      assume "th' \<in> {th'. Th th' \<in> subtree (RAG (t @ s)) (Th th)}"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   422
      hence "Th th' \<in> subtree (RAG (t @ s)) (Th th)" by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   423
      moreover have "... \<subseteq> Field (RAG (t @ s)) \<union> {Th th}"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   424
        by (meson subtree_Field)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   425
      ultimately have "Th th' \<in> ..." by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   426
      hence "th' \<in> threads (t@s)" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   427
      proof
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   428
        assume "Th th' \<in> {Th th}"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   429
        thus ?thesis using th_kept by auto 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   430
      next
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   431
        assume "Th th' \<in> Field (RAG (t @ s))"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   432
        thus ?thesis using vat_t.not_in_thread_isolated by blast 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   433
      qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   434
      thus "the_preced (t @ s) th' \<le> the_preced (t @ s) th"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   435
        by (metis Max_ge finite_imageI finite_threads image_eqI 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   436
               max_kept th_kept the_preced_def)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   437
    qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   438
  qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   439
  also have "... = ?R" by (simp add: max_preced the_preced_def) 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   440
  finally show ?thesis .
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   441
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   442
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   443
lemma th_cp_max[simp]: "Max (cp (t@s) ` threads (t@s)) = cp (t@s) th"
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   444
  using max_cp_eq th_cp_max_preced the_preced_def vt_t by presburger
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   445
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   446
lemma [simp]: "Max (cp (t@s) ` threads (t@s)) = Max (the_preced (t@s) ` threads (t@s))"
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   447
  by (simp add: th_cp_max_preced)
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   448
  
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   449
lemma [simp]: "Max (the_preced (t@s) ` threads (t@s)) = the_preced (t@s) th"
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   450
  using max_kept th_kept the_preced_def by auto
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   451
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   452
lemma [simp]: "the_preced (t@s) th = preced th (t@s)"
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   453
  using the_preced_def by auto
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   454
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   455
lemma [simp]: "preced th (t@s) = preced th s"
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   456
  by (simp add: th_kept)
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   457
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   458
lemma [simp]: "cp s th = preced th s"
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   459
  by (simp add: eq_cp_s_th)
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   460
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   461
lemma th_cp_preced [simp]: "cp (t@s) th = preced th s"
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   462
  by (fold max_kept, unfold th_cp_max_preced, simp)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   463
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   464
lemma preced_less:
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   465
  assumes th'_in: "th' \<in> threads s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   466
  and neq_th': "th' \<noteq> th"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   467
  shows "preced th' s < preced th s"
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   468
  using assms
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   469
by (metis Max.coboundedI finite_imageI highest not_le order.trans 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   470
    preced_linorder rev_image_eqI threads_s vat_s.finite_threads 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   471
    vat_s.le_cp)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   472
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   473
section {* The `blocking thread` *}
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   474
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   475
text {* 
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   476
  The purpose of PIP is to ensure that the most 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   477
  urgent thread @{term th} is not blocked unreasonably. 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   478
  Therefore, a clear picture of the blocking thread is essential 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   479
  to assure people that the purpose is fulfilled. 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   480
  
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   481
  In this section, we are going to derive a series of lemmas 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   482
  with finally give rise to a picture of the blocking thread. 
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   483
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   484
  By `blocking thread`, we mean a thread in running state but 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   485
  different from thread @{term th}.
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   486
*}
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   487
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   488
text {*
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   489
  The following lemmas shows that the @{term cp}-value 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   490
  of the blocking thread @{text th'} equals to the highest
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   491
  precedence in the whole system.
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   492
*}
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   493
lemma runing_preced_inversion:
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   494
  assumes runing': "th' \<in> runing (t@s)"
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   495
  shows "cp (t@s) th' = preced th s" (is "?L = ?R")
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   496
proof -
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   497
  have "?L = Max (cp (t @ s) ` readys (t @ s))" using assms
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   498
      by (unfold runing_def, auto)
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   499
  also have "\<dots> = ?R"
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   500
      by (metis th_cp_max th_cp_preced vat_t.max_cp_readys_threads) 
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   501
  finally show ?thesis .
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   502
qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   503
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   504
text {*
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   505
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   506
  The following lemma shows how the counters for @{term "P"} and
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   507
  @{term "V"} operations relate to the running threads in the states
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   508
  @{term s} and @{term "t @ s"}.  The lemma shows that if a thread's
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   509
  @{term "P"}-count equals its @{term "V"}-count (which means it no
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   510
  longer has any resource in its possession), it cannot be a running
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   511
  thread.
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   512
76
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   513
  The proof is by contraction with the assumption @{text "th' \<noteq> th"}.
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   514
  The key is the use of @{thm eq_pv_dependants} to derive the
76
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   515
  emptiness of @{text th'}s @{term dependants}-set from the balance of
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   516
  its @{term P} and @{term V} counts.  From this, it can be shown
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   517
  @{text th'}s @{term cp}-value equals to its own precedence.
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   518
76
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   519
  On the other hand, since @{text th'} is running, by @{thm
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   520
  runing_preced_inversion}, its @{term cp}-value equals to the
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   521
  precedence of @{term th}.
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   522
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   523
  Combining the above two resukts we have that @{text th'} and @{term
76
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   524
  th} have the same precedence. By uniqueness of precedences, we have
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   525
  @{text "th' = th"}, which is in contradiction with the assumption
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   526
  @{text "th' \<noteq> th"}.
b6ea51cd2e88 some small changes to the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 73
diff changeset
   527
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   528
*} 
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   529
                      
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   530
lemma eq_pv_blocked: (* ddd *)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   531
  assumes neq_th': "th' \<noteq> th"
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   532
  and eq_pv: "cntP (t@s) th' = cntV (t@s) th'"
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   533
  shows "th' \<notin> runing (t@s)"
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   534
proof
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   535
  assume otherwise: "th' \<in> runing (t@s)"
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   536
  show False
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   537
  proof -
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   538
    have th'_in: "th' \<in> threads (t@s)"
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   539
        using otherwise readys_threads runing_def by auto 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   540
    have "th' = th"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   541
    proof(rule preced_unique)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   542
      -- {* The proof goes like this: 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   543
            it is first shown that the @{term preced}-value of @{term th'} 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   544
            equals to that of @{term th}, then by uniqueness 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   545
            of @{term preced}-values (given by lemma @{thm preced_unique}), 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   546
            @{term th'} equals to @{term th}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   547
      show "preced th' (t @ s) = preced th (t @ s)" (is "?L = ?R")
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   548
      proof -
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   549
        -- {* Since the counts of @{term th'} are balanced, the subtree
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   550
              of it contains only itself, so, its @{term cp}-value
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   551
              equals its @{term preced}-value: *}
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   552
        have "?L = cp (t@s) th'"
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   553
         by (unfold cp_eq_cpreced cpreced_def eq_dependants vat_t.eq_pv_dependants[OF eq_pv], simp)
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   554
        -- {* Since @{term "th'"} is running, by @{thm runing_preced_inversion},
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   555
              its @{term cp}-value equals @{term "preced th s"}, 
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   556
              which equals to @{term "?R"} by simplification: *}
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   557
        also have "... = ?R" 
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   558
        thm runing_preced_inversion
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   559
            using runing_preced_inversion[OF otherwise] by simp
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   560
        finally show ?thesis .
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   561
      qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   562
    qed (auto simp: th'_in th_kept)
68
db196b066b97 Before retrofiting PIPBasics.thy
zhangx
parents: 67
diff changeset
   563
    with `th' \<noteq> th` show ?thesis by simp
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   564
 qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   565
qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   566
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   567
text {*
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   568
  The following lemma is the extrapolation of @{thm eq_pv_blocked}.
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   569
  It says if a thread, different from @{term th}, 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   570
  does not hold any resource at the very beginning,
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   571
  it will keep hand-emptied in the future @{term "t@s"}.
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   572
*}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   573
lemma eq_pv_persist: (* ddd *)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   574
  assumes neq_th': "th' \<noteq> th"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   575
  and eq_pv: "cntP s th' = cntV s th'"
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   576
  shows "cntP (t@s) th' = cntV (t@s) th'"
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   577
proof(induction rule:ind) -- {* The proof goes by induction. *}
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   578
  -- {* The nontrivial case is for the @{term Cons}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   579
  case (Cons e t)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   580
  -- {* All results derived so far hold for both @{term s} and @{term "t@s"}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   581
  interpret vat_t: extend_highest_gen s th prio tm t using Cons by simp
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   582
  interpret vat_e: extend_highest_gen s th prio tm "(e # t)" using Cons by simp
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   583
  show ?case
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   584
  proof -
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   585
    -- {* It can be proved that @{term cntP}-value of @{term th'} does not change
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   586
          by the happening of event @{term e}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   587
    have "cntP ((e#t)@s) th' = cntP (t@s) th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   588
    proof(rule ccontr) -- {* Proof by contradiction. *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   589
      -- {* Suppose @{term cntP}-value of @{term th'} is changed by @{term e}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   590
      assume otherwise: "cntP ((e # t) @ s) th' \<noteq> cntP (t @ s) th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   591
      -- {* Then the actor of @{term e} must be @{term th'} and @{term e}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   592
            must be a @{term P}-event: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   593
      hence "isP e" "actor e = th'" by (auto simp:cntP_diff_inv) 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   594
      with vat_t.actor_inv[OF Cons(2)]
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   595
      -- {* According to @{thm actor_inv}, @{term th'} must be running at 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   596
            the moment @{term "t@s"}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   597
      have "th' \<in> runing (t@s)" by (cases e, auto)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   598
      -- {* However, an application of @{thm eq_pv_blocked} to induction hypothesis
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   599
            shows @{term th'} can not be running at moment  @{term "t@s"}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   600
      moreover have "th' \<notin> runing (t@s)" 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   601
               using vat_t.eq_pv_blocked[OF neq_th' Cons(5)] .
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   602
      -- {* Contradiction is finally derived: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   603
      ultimately show False by simp
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   604
    qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   605
    -- {* It can also be proved that @{term cntV}-value of @{term th'} does not change
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   606
          by the happening of event @{term e}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   607
    -- {* The proof follows exactly the same pattern as the case for @{term cntP}-value: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   608
    moreover have "cntV ((e#t)@s) th' = cntV (t@s) th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   609
    proof(rule ccontr) -- {* Proof by contradiction. *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   610
      assume otherwise: "cntV ((e # t) @ s) th' \<noteq> cntV (t @ s) th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   611
      hence "isV e" "actor e = th'" by (auto simp:cntV_diff_inv) 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   612
      with vat_t.actor_inv[OF Cons(2)]
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   613
      have "th' \<in> runing (t@s)" by (cases e, auto)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   614
      moreover have "th' \<notin> runing (t@s)"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   615
          using vat_t.eq_pv_blocked[OF neq_th' Cons(5)] .
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   616
      ultimately show False by simp
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   617
    qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   618
    -- {* Finally, it can be shown that the @{term cntP} and @{term cntV} 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   619
          value for @{term th'} are still in balance, so @{term th'} 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   620
          is still hand-emptied after the execution of event @{term e}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   621
    ultimately show ?thesis using Cons(5) by metis
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   622
  qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   623
qed (auto simp:eq_pv)
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   624
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   625
text {*
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   626
  By combining @{thm  eq_pv_blocked} and @{thm eq_pv_persist},
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   627
  it can be derived easily that @{term th'} can not be running in the future:
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   628
*}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   629
lemma eq_pv_blocked_persist:
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   630
  assumes neq_th': "th' \<noteq> th"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   631
  and eq_pv: "cntP s th' = cntV s th'"
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   632
  shows "th' \<notin> runing (t@s)"
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   633
  using assms
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   634
  by (simp add: eq_pv_blocked eq_pv_persist) 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   635
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   636
text {*
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   637
  The following lemma shows the blocking thread @{term th'}
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   638
  must hold some resource in the very beginning. 
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   639
*}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   640
lemma runing_cntP_cntV_inv: (* ddd *)
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   641
  assumes is_runing: "th' \<in> runing (t@s)"
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   642
  and neq_th': "th' \<noteq> th"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   643
  shows "cntP s th' > cntV s th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   644
  using assms
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   645
proof -
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   646
  -- {* First, it can be shown that the number of @{term P} and
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   647
        @{term V} operations can not be equal for thred @{term th'} *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   648
  have "cntP s th' \<noteq> cntV s th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   649
  proof
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   650
     -- {* The proof goes by contradiction, suppose otherwise: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   651
    assume otherwise: "cntP s th' = cntV s th'"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   652
    -- {* By applying @{thm  eq_pv_blocked_persist} to this: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   653
    from eq_pv_blocked_persist[OF neq_th' otherwise] 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   654
    -- {* we have that @{term th'} can not be running at moment @{term "t@s"}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   655
    have "th' \<notin> runing (t@s)" .
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   656
    -- {* This is obvious in contradiction with assumption @{thm is_runing}  *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   657
    thus False using is_runing by simp
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   658
  qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   659
  -- {* However, the number of @{term V} is always less or equal to @{term P}: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   660
  moreover have "cntV s th' \<le> cntP s th'" using vat_s.cnp_cnv_cncs by auto
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   661
  -- {* Thesis is finally derived by combining the these two results: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   662
  ultimately show ?thesis by auto
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   663
qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   664
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   665
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   666
text {*
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   667
  The following lemmas shows the blocking thread @{text th'} must be live 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   668
  at the very beginning, i.e. the moment (or state) @{term s}. 
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   669
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   670
  The proof is a  simple combination of the results above:
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   671
*}
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   672
lemma runing_threads_inv: 
66
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   673
  assumes runing': "th' \<in> runing (t@s)"
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   674
  and neq_th': "th' \<noteq> th"
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   675
  shows "th' \<in> threads s"
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   676
proof(rule ccontr) -- {* Proof by contradiction: *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   677
  assume otherwise: "th' \<notin> threads s" 
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   678
  have "th' \<notin> runing (t @ s)"
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   679
  proof -
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   680
    from vat_s.cnp_cnv_eq[OF otherwise]
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   681
    have "cntP s th' = cntV s th'" .
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   682
    from eq_pv_blocked_persist[OF neq_th' this]
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   683
    show ?thesis .
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   684
  qed
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   685
  with runing' show False by simp
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   686
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   687
66
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   688
text {*
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   689
  The following lemma summarizes several foregoing 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   690
  lemmas to give an overall picture of the blocking thread @{text "th'"}:
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   691
*}
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   692
lemma runing_inversion: (* ddd, one of the main lemmas to present *)
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   693
  assumes runing': "th' \<in> runing (t@s)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   694
  and neq_th: "th' \<noteq> th"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   695
  shows "th' \<in> threads s"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   696
  and    "\<not>detached s th'"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   697
  and    "cp (t@s) th' = preced th s"
66
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   698
proof -
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   699
  from runing_threads_inv[OF assms]
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   700
  show "th' \<in> threads s" .
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   701
next
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   702
  from runing_cntP_cntV_inv[OF runing' neq_th]
66
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   703
  show "\<not>detached s th'" using vat_s.detached_eq by simp
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   704
next
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   705
  from runing_preced_inversion[OF runing']
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   706
  show "cp (t@s) th' = preced th s" .
2af87bb52fca Some small improvements in Correctness.thy.
zhangx
parents: 65
diff changeset
   707
qed
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   708
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   709
section {* The existence of `blocking thread` *}
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   710
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   711
text {* 
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   712
  Suppose @{term th} is not running, it is first shown that
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   713
  there is a path in RAG leading from node @{term th} to another thread @{text "th'"} 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   714
  in the @{term readys}-set (So @{text "th'"} is an ancestor of @{term th}}).
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   715
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   716
  Now, since @{term readys}-set is non-empty, there must be
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   717
  one in it which holds the highest @{term cp}-value, which, by definition, 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   718
  is the @{term runing}-thread. However, we are going to show more: this running thread
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   719
  is exactly @{term "th'"}.
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   720
     *}
67
25fd656667a7 Correctness simplified a great deal.
zhangx
parents: 66
diff changeset
   721
lemma th_blockedE: (* ddd, the other main lemma to be presented: *)
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   722
  assumes "th \<notin> runing (t@s)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   723
  obtains th' where "Th th' \<in> ancestors (RAG (t @ s)) (Th th)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   724
                    "th' \<in> runing (t@s)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   725
proof -
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   726
  -- {* According to @{thm vat_t.th_chain_to_ready}, either 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   727
        @{term "th"} is in @{term "readys"} or there is path leading from it to 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   728
        one thread in @{term "readys"}. *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   729
  have "th \<in> readys (t @ s) \<or> (\<exists>th'. th' \<in> readys (t @ s) \<and> (Th th, Th th') \<in> (RAG (t @ s))\<^sup>+)" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   730
    using th_kept vat_t.th_chain_to_ready by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   731
  -- {* However, @{term th} can not be in @{term readys}, because otherwise, since 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   732
       @{term th} holds the highest @{term cp}-value, it must be @{term "runing"}. *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   733
  moreover have "th \<notin> readys (t@s)" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   734
    using assms runing_def th_cp_max vat_t.max_cp_readys_threads by auto 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   735
  -- {* So, there must be a path from @{term th} to another thread @{text "th'"} in 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   736
        term @{term readys}: *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   737
  ultimately obtain th' where th'_in: "th' \<in> readys (t@s)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   738
                          and dp: "(Th th, Th th') \<in> (RAG (t @ s))\<^sup>+" by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   739
  -- {* We are going to show that this @{term th'} is running. *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   740
  have "th' \<in> runing (t@s)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   741
  proof -
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   742
    -- {* We only need to show that this @{term th'} holds the highest @{term cp}-value: *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   743
    have "cp (t@s) th' = Max (cp (t@s) ` readys (t@s))" (is "?L = ?R")
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   744
    proof -
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   745
      have "?L =  Max ((the_preced (t @ s) \<circ> the_thread) ` subtree (tRAG (t @ s)) (Th th'))"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   746
        by (unfold cp_alt_def1, simp)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   747
      also have "... = (the_preced (t @ s) \<circ> the_thread) (Th th)"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   748
      proof(rule image_Max_subset)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   749
        show "finite (Th ` (threads (t@s)))" by (simp add: vat_t.finite_threads)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   750
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   751
        show "subtree (tRAG (t @ s)) (Th th') \<subseteq> Th ` threads (t @ s)"
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   752
          by (metis Range.intros dp trancl_range vat_t.rg_RAG_threads vat_t.subtree_tRAG_thread) 
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   753
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   754
        show "Th th \<in> subtree (tRAG (t @ s)) (Th th')" using dp
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   755
                    by (unfold tRAG_subtree_eq, auto simp:subtree_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   756
      next
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   757
        show "Max ((the_preced (t @ s) \<circ> the_thread) ` Th ` threads (t @ s)) =
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   758
                      (the_preced (t @ s) \<circ> the_thread) (Th th)" (is "Max ?L = _")
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   759
        proof -
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   760
          have "?L = the_preced (t @ s) `  threads (t @ s)" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   761
                     by (unfold image_comp, rule image_cong, auto)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   762
          thus ?thesis using max_preced the_preced_def by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   763
        qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   764
      qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   765
      also have "... = ?R"
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   766
        using th_cp_max th_cp_preced th_kept 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   767
              the_preced_def vat_t.max_cp_readys_threads by auto
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   768
      finally show ?thesis .
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   769
    qed 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   770
    -- {* Now, since @{term th'} holds the highest @{term cp} 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   771
          and we have already show it is in @{term readys},
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   772
          it is @{term runing} by definition. *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   773
    with `th' \<in> readys (t@s)` show ?thesis by (simp add: runing_def) 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   774
  qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   775
  -- {* It is easy to show @{term th'} is an ancestor of @{term th}: *}
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   776
  moreover have "Th th' \<in> ancestors (RAG (t @ s)) (Th th)" 
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   777
    using `(Th th, Th th') \<in> (RAG (t @ s))\<^sup>+` by (auto simp:ancestors_def)
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   778
  ultimately show ?thesis using that by metis
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   779
qed
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   780
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   781
text {*
92
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   782
  Now it is easy to see there is always a thread to run by case analysis
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   783
  on whether thread @{term th} is running: if the answer is Yes, the 
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   784
  the running thread is obviously @{term th} itself; otherwise, the running
4763aa246dbd Original files overwrite by their parallels (Correctness.thy v.s. PrioG.thy, PIPBasics.thy v.s. CpsG.thy, Implementation v.s. ExtGG.thy).
zhangx
parents: 91
diff changeset
   785
  thread is the @{text th'} given by lemma @{thm th_blockedE}.
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   786
*}
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   787
lemma live: "runing (t@s) \<noteq> {}"
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   788
proof(cases "th \<in> runing (t@s)") 
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   789
  case True thus ?thesis by auto
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   790
next
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   791
  case False
63
b620a2a0806a ExtGG.thy finished, but more comments are needed.
zhangx
parents: 62
diff changeset
   792
  thus ?thesis using th_blockedE by auto
0
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   793
qed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   794
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   795
end
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   796
end