src/HOL/HoareParallel/Gar_Coll.thy
author kleing
Wed, 19 Jun 2002 12:39:41 +0200
changeset 13224 6f0928a942d1
parent 13187 e5434b822a96
child 13601 fd3e3d6b37b2
permissions -rw-r--r--
LBV instantiantion refactored, streamlined
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     1
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     2
header {* \section{The Single Mutator Case} *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     3
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     4
theory Gar_Coll = Graph + OG_Syntax:
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     5
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     6
text {* Declaration of variables: *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     7
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     8
record gar_coll_state =
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     9
  M :: nodes
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    10
  E :: edges
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    11
  bc :: "nat set"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    12
  obc :: "nat set"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    13
  Ma :: nodes
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    14
  ind :: nat 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    15
  k :: nat
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    16
  z :: bool
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    17
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    18
subsection {* The Mutator *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    19
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    20
text {* The mutator first redirects an arbitrary edge @{text "R"} from
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    21
an arbitrary accessible node towards an arbitrary accessible node
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    22
@{text "T"}.  It then colors the new target @{text "T"} black. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    23
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    24
We declare the arbitrarily selected node and edge as constants:*}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    25
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    26
consts R :: nat  T :: nat
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    27
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    28
text {* \noindent The following predicate states, given a list of
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    29
nodes @{text "m"} and a list of edges @{text "e"}, the conditions
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    30
under which the selected edge @{text "R"} and node @{text "T"} are
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    31
valid: *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    32
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    33
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    34
  Mut_init :: "gar_coll_state \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    35
  "Mut_init \<equiv> \<guillemotleft> T \<in> Reach \<acute>E \<and> R < length \<acute>E \<and> T < length \<acute>M \<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    36
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    37
text {* \noindent For the mutator we
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    38
consider two modules, one for each action.  An auxiliary variable
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    39
@{text "\<acute>z"} is set to false if the mutator has already redirected an
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    40
edge but has not yet colored the new target.   *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    41
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    42
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    43
  Redirect_Edge :: "gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    44
  "Redirect_Edge \<equiv> .{\<acute>Mut_init \<and> \<acute>z}. \<langle>\<acute>E:=\<acute>E[R:=(fst(\<acute>E!R), T)],, \<acute>z:= (\<not>\<acute>z)\<rangle>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    45
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    46
  Color_Target :: "gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    47
  "Color_Target \<equiv> .{\<acute>Mut_init \<and> \<not>\<acute>z}. \<langle>\<acute>M:=\<acute>M[T:=Black],, \<acute>z:= (\<not>\<acute>z)\<rangle>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    48
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    49
  Mutator :: "gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    50
  "Mutator \<equiv>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    51
  .{\<acute>Mut_init \<and> \<acute>z}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    52
  WHILE True INV .{\<acute>Mut_init \<and> \<acute>z}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    53
  DO  Redirect_Edge ;; Color_Target  OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    54
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    55
subsubsection {* Correctness of the mutator *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    56
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    57
lemmas mutator_defs = Mut_init_def Redirect_Edge_def Color_Target_def
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    58
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    59
lemma Redirect_Edge: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    60
  "\<turnstile> Redirect_Edge pre(Color_Target)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    61
apply (unfold mutator_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    62
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    63
apply(simp_all)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    64
apply(force elim:Graph2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    65
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    66
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    67
lemma Color_Target:
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    68
  "\<turnstile> Color_Target .{\<acute>Mut_init \<and> \<acute>z}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    69
apply (unfold mutator_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    70
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    71
apply(simp_all)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    72
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    73
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    74
lemma Mutator: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    75
 "\<turnstile> Mutator .{False}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    76
apply(unfold Mutator_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    77
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    78
apply(simp_all add:Redirect_Edge Color_Target)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    79
apply(simp add:mutator_defs Redirect_Edge_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    80
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    81
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    82
subsection {* The Collector *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    83
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    84
text {* \noindent A constant @{text "M_init"} is used to give @{text "\<acute>Ma"} a
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    85
suitable first value, defined as a list of nodes where only the @{text
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    86
"Roots"} are black. *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    87
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    88
consts  M_init :: nodes
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    89
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    90
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    91
  Proper_M_init :: "gar_coll_state \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    92
  "Proper_M_init \<equiv>  \<guillemotleft> Blacks M_init=Roots \<and> length M_init=length \<acute>M \<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    93
 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    94
  Proper :: "gar_coll_state \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    95
  "Proper \<equiv> \<guillemotleft> Proper_Roots \<acute>M \<and> Proper_Edges(\<acute>M, \<acute>E) \<and> \<acute>Proper_M_init \<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    96
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    97
  Safe :: "gar_coll_state \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    98
  "Safe \<equiv> \<guillemotleft> Reach \<acute>E \<subseteq> Blacks \<acute>M \<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    99
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   100
lemmas collector_defs = Proper_M_init_def Proper_def Safe_def
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   101
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   102
subsubsection {* Blackening the roots *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   103
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   104
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   105
  Blacken_Roots :: " gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   106
  "Blacken_Roots \<equiv> 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   107
  .{\<acute>Proper}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   108
  \<acute>ind:=0;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   109
  .{\<acute>Proper \<and> \<acute>ind=0}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   110
  WHILE \<acute>ind<length \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   111
   INV .{\<acute>Proper \<and> (\<forall>i<\<acute>ind. i \<in> Roots \<longrightarrow> \<acute>M!i=Black) \<and> \<acute>ind\<le>length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   112
  DO .{\<acute>Proper \<and> (\<forall>i<\<acute>ind. i \<in> Roots \<longrightarrow> \<acute>M!i=Black) \<and> \<acute>ind<length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   113
   IF \<acute>ind\<in>Roots THEN 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   114
   .{\<acute>Proper \<and> (\<forall>i<\<acute>ind. i \<in> Roots \<longrightarrow> \<acute>M!i=Black) \<and> \<acute>ind<length \<acute>M \<and> \<acute>ind\<in>Roots}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   115
    \<acute>M:=\<acute>M[\<acute>ind:=Black] FI;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   116
   .{\<acute>Proper \<and> (\<forall>i<\<acute>ind+1. i \<in> Roots \<longrightarrow> \<acute>M!i=Black) \<and> \<acute>ind<length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   117
    \<acute>ind:=\<acute>ind+1 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   118
  OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   119
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   120
lemma Blacken_Roots: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   121
 "\<turnstile> Blacken_Roots .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   122
apply (unfold Blacken_Roots_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   123
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   124
apply(simp_all add:collector_defs Graph_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   125
apply safe
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   126
apply(simp_all add:nth_list_update)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   127
  apply (erule less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   128
   apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   129
 apply(drule le_imp_less_or_eq)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   130
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   131
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   132
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   133
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   134
subsubsection {* Propagating black *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   135
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   136
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   137
  PBInv :: "gar_coll_state \<Rightarrow> nat \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   138
  "PBInv \<equiv> \<guillemotleft> \<lambda>ind. \<acute>obc < Blacks \<acute>M \<or> (\<forall>i <ind. \<not>BtoW (\<acute>E!i, \<acute>M) \<or>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   139
   (\<not>\<acute>z \<and> i=R \<and> (snd(\<acute>E!R)) = T \<and> (\<exists>r. ind \<le> r \<and> r < length \<acute>E \<and> BtoW(\<acute>E!r,\<acute>M))))\<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   140
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   141
constdefs  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   142
  Propagate_Black_aux :: "gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   143
  "Propagate_Black_aux \<equiv>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   144
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   145
  \<acute>ind:=0;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   146
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M \<and> \<acute>ind=0}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   147
  WHILE \<acute>ind<length \<acute>E 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   148
   INV .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   149
         \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind\<le>length \<acute>E}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   150
  DO .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   151
       \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind<length \<acute>E}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   152
   IF \<acute>M!(fst (\<acute>E!\<acute>ind)) = Black THEN 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   153
    .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   154
       \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind<length \<acute>E \<and> \<acute>M!fst(\<acute>E!\<acute>ind)=Black}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   155
     \<acute>M:=\<acute>M[snd(\<acute>E!\<acute>ind):=Black];;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   156
    .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   157
       \<and> \<acute>PBInv (\<acute>ind + 1) \<and> \<acute>ind<length \<acute>E}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   158
     \<acute>ind:=\<acute>ind+1
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   159
   FI
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   160
  OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   161
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   162
lemma Propagate_Black_aux: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   163
  "\<turnstile>  Propagate_Black_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   164
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   165
    \<and> ( \<acute>obc < Blacks \<acute>M \<or> \<acute>Safe)}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   166
apply (unfold Propagate_Black_aux_def  PBInv_def collector_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   167
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   168
apply(simp_all add:Graph6 Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   169
      apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   170
     apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   171
    apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   172
--{* 4 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   173
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   174
apply(simp add:Proper_Edges_def Proper_Roots_def Graph6 Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   175
apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   176
 apply(rule disjI1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   177
 apply(erule Graph13)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   178
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   179
apply (case_tac "M x ! snd (E x ! ind x)=Black")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   180
 apply (simp add: Graph10 BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   181
 apply (rule disjI2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   182
 apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   183
 apply (erule less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   184
  apply (erule_tac x=i in allE , erule (1) notE impE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   185
  apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   186
  apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   187
  apply (drule le_imp_less_or_eq)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   188
  apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   189
   apply (subgoal_tac "Suc (ind x)\<le>r")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   190
    apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   191
   apply arith
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   192
  apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   193
 apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   194
apply(rule disjI1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   195
apply(erule subset_psubset_trans)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   196
apply(erule Graph11)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   197
apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   198
--{* 3 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   199
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   200
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   201
--{* last *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   202
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   203
apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   204
apply(subgoal_tac "ind x = length (E x)")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   205
 apply (rotate_tac -1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   206
 apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   207
 apply(drule Graph1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   208
   apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   209
  apply clarify  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   210
 apply(erule allE, erule impE, assumption)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   211
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   212
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   213
apply arith
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   214
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   215
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   216
subsubsection {* Refining propagating black *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   217
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   218
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   219
  Auxk :: "gar_coll_state \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   220
  "Auxk \<equiv> \<guillemotleft>\<acute>k<length \<acute>M \<and> (\<acute>M!\<acute>k\<noteq>Black \<or> \<not>BtoW(\<acute>E!\<acute>ind, \<acute>M) \<or> 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   221
          \<acute>obc<Blacks \<acute>M \<or> (\<not>\<acute>z \<and> \<acute>ind=R \<and> snd(\<acute>E!R)=T  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   222
          \<and> (\<exists>r. \<acute>ind<r \<and> r<length \<acute>E \<and> BtoW(\<acute>E!r, \<acute>M))))\<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   223
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   224
constdefs  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   225
  Propagate_Black :: " gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   226
  "Propagate_Black \<equiv>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   227
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   228
  \<acute>ind:=0;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   229
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M \<and> \<acute>ind=0}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   230
  WHILE \<acute>ind<length \<acute>E 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   231
   INV .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   232
         \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind\<le>length \<acute>E}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   233
  DO .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   234
       \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind<length \<acute>E}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   235
   IF (\<acute>M!(fst (\<acute>E!\<acute>ind)))=Black THEN 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   236
    .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   237
      \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind<length \<acute>E \<and> (\<acute>M!fst(\<acute>E!\<acute>ind))=Black}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   238
     \<acute>k:=(snd(\<acute>E!\<acute>ind));;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   239
    .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   240
      \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind<length \<acute>E \<and> (\<acute>M!fst(\<acute>E!\<acute>ind))=Black 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   241
      \<and> \<acute>Auxk}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   242
     \<langle>\<acute>M:=\<acute>M[\<acute>k:=Black],, \<acute>ind:=\<acute>ind+1\<rangle>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   243
   ELSE .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   244
          \<and> \<acute>PBInv \<acute>ind \<and> \<acute>ind<length \<acute>E}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   245
         \<langle>IF (\<acute>M!(fst (\<acute>E!\<acute>ind)))\<noteq>Black THEN \<acute>ind:=\<acute>ind+1 FI\<rangle> 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   246
   FI
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   247
  OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   248
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   249
lemma Propagate_Black: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   250
  "\<turnstile>  Propagate_Black
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   251
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   252
    \<and> ( \<acute>obc < Blacks \<acute>M \<or> \<acute>Safe)}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   253
apply (unfold Propagate_Black_def  PBInv_def Auxk_def collector_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   254
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   255
apply(simp_all add:Graph6 Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   256
       apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   257
      apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   258
     apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   259
--{* 5 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   260
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   261
apply(simp add:BtoW_def Proper_Edges_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   262
--{* 4 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   263
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   264
apply(simp add:Proper_Edges_def Graph6 Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   265
apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   266
 apply (rule disjI1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   267
 apply (erule psubset_subset_trans)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   268
 apply (erule Graph9)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   269
apply (case_tac "M x!k x=Black")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   270
 apply (case_tac "M x ! snd (E x ! ind x)=Black")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   271
  apply (simp add: Graph10 BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   272
  apply (rule disjI2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   273
  apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   274
  apply (erule less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   275
   apply (erule_tac x=i in allE , erule (1) notE impE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   276
   apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   277
   apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   278
   apply (drule le_imp_less_or_eq)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   279
   apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   280
    apply (subgoal_tac "Suc (ind x)\<le>r")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   281
     apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   282
    apply arith
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   283
   apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   284
  apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   285
 apply (simp add: Graph10 BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   286
 apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   287
  apply (erule disjI1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   288
 apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   289
 apply (erule less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   290
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   291
 apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   292
 apply (subgoal_tac "Suc R\<le>r")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   293
  apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   294
 apply arith
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   295
apply(rule disjI1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   296
apply(erule subset_psubset_trans)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   297
apply(erule Graph11)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   298
apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   299
--{* 3 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   300
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   301
--{* 2 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   302
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   303
apply(simp add:Proper_Edges_def Graph6 Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   304
apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   305
 apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   306
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   307
apply (erule less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   308
 apply (erule_tac x=i in allE , erule (1) notE impE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   309
 apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   310
 apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   311
 apply (drule le_imp_less_or_eq)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   312
 apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   313
  apply (subgoal_tac "Suc (ind x)\<le>r")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   314
   apply fast
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   315
  apply arith
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   316
 apply (simp add: BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   317
apply (simp add: BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   318
--{* last *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   319
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   320
apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   321
apply(subgoal_tac "ind x = length (E x)")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   322
 apply (rotate_tac -1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   323
 apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   324
 apply(drule Graph1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   325
   apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   326
  apply clarify  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   327
 apply(erule allE, erule impE, assumption)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   328
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   329
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   330
apply arith
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   331
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   332
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   333
subsubsection {* Counting black nodes *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   334
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   335
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   336
  CountInv :: "gar_coll_state \<Rightarrow> nat \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   337
  "CountInv \<equiv> \<guillemotleft> \<lambda>ind. {i. i<ind \<and> \<acute>Ma!i=Black}\<subseteq>\<acute>bc \<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   338
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   339
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   340
  Count :: " gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   341
  "Count \<equiv>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   342
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   343
    \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   344
    \<and> length \<acute>Ma=length \<acute>M \<and> (\<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe) \<and> \<acute>bc={}}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   345
  \<acute>ind:=0;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   346
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   347
    \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   348
   \<and> length \<acute>Ma=length \<acute>M \<and> (\<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe) \<and> \<acute>bc={} 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   349
   \<and> \<acute>ind=0}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   350
   WHILE \<acute>ind<length \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   351
     INV .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   352
           \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   353
           \<and> length \<acute>Ma=length \<acute>M \<and> \<acute>CountInv \<acute>ind
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   354
           \<and> ( \<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe) \<and> \<acute>ind\<le>length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   355
   DO .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   356
         \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   357
         \<and> length \<acute>Ma=length \<acute>M \<and> \<acute>CountInv \<acute>ind 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   358
         \<and> ( \<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe) \<and> \<acute>ind<length \<acute>M}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   359
       IF \<acute>M!\<acute>ind=Black 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   360
          THEN .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   361
                 \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   362
                 \<and> length \<acute>Ma=length \<acute>M \<and> \<acute>CountInv \<acute>ind
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   363
                 \<and> ( \<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe) \<and> \<acute>ind<length \<acute>M \<and> \<acute>M!\<acute>ind=Black}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   364
          \<acute>bc:=insert \<acute>ind \<acute>bc
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   365
       FI;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   366
      .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   367
        \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   368
        \<and> length \<acute>Ma=length \<acute>M \<and> \<acute>CountInv (\<acute>ind+1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   369
        \<and> ( \<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe) \<and> \<acute>ind<length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   370
      \<acute>ind:=\<acute>ind+1
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   371
   OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   372
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   373
lemma Count: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   374
  "\<turnstile> Count 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   375
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   376
   \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>\<acute>bc \<and> \<acute>bc\<subseteq>Blacks \<acute>M \<and> length \<acute>Ma=length \<acute>M
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   377
   \<and> (\<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe)}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   378
apply(unfold Count_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   379
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   380
apply(simp_all add:CountInv_def Graph6 Graph7 Graph8 Graph12 Blacks_def collector_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   381
      apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   382
     apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   383
    apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   384
   apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   385
   apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   386
   apply(fast elim:less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   387
  apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   388
  apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   389
  apply(fast elim:less_SucE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   390
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   391
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   392
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   393
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   394
subsubsection {* Appending garbage nodes to the free list *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   395
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   396
consts Append_to_free :: "nat \<times> edges \<Rightarrow> edges"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   397
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   398
axioms
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   399
  Append_to_free0: "length (Append_to_free (i, e)) = length e"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   400
  Append_to_free1: "Proper_Edges (m, e) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   401
                   \<Longrightarrow> Proper_Edges (m, Append_to_free(i, e))"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   402
  Append_to_free2: "i \<notin> Reach e 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   403
     \<Longrightarrow> n \<in> Reach (Append_to_free(i, e)) = ( n = i \<or> n \<in> Reach e)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   404
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   405
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   406
  AppendInv :: "gar_coll_state \<Rightarrow> nat \<Rightarrow> bool"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   407
  "AppendInv \<equiv> \<guillemotleft>\<lambda>ind. \<forall>i<length \<acute>M. ind\<le>i \<longrightarrow> i\<in>Reach \<acute>E \<longrightarrow> \<acute>M!i=Black\<guillemotright>"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   408
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   409
constdefs
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   410
  Append :: " gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   411
   "Append \<equiv>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   412
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>Safe}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   413
  \<acute>ind:=0;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   414
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>Safe \<and> \<acute>ind=0}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   415
    WHILE \<acute>ind<length \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   416
      INV .{\<acute>Proper \<and> \<acute>AppendInv \<acute>ind \<and> \<acute>ind\<le>length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   417
    DO .{\<acute>Proper \<and> \<acute>AppendInv \<acute>ind \<and> \<acute>ind<length \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   418
       IF \<acute>M!\<acute>ind=Black THEN 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   419
          .{\<acute>Proper \<and> \<acute>AppendInv \<acute>ind \<and> \<acute>ind<length \<acute>M \<and> \<acute>M!\<acute>ind=Black}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   420
          \<acute>M:=\<acute>M[\<acute>ind:=White] 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   421
       ELSE .{\<acute>Proper \<and> \<acute>AppendInv \<acute>ind \<and> \<acute>ind<length \<acute>M \<and> \<acute>ind\<notin>Reach \<acute>E}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   422
              \<acute>E:=Append_to_free(\<acute>ind,\<acute>E)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   423
       FI;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   424
     .{\<acute>Proper \<and> \<acute>AppendInv (\<acute>ind+1) \<and> \<acute>ind<length \<acute>M}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   425
       \<acute>ind:=\<acute>ind+1
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   426
    OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   427
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   428
lemma Append: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   429
  "\<turnstile> Append .{\<acute>Proper}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   430
apply(unfold Append_def AppendInv_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   431
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   432
apply(simp_all add:collector_defs Graph6 Graph7 Graph8 Append_to_free0 Append_to_free1 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   433
       apply(force simp:Blacks_def nth_list_update)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   434
      apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   435
     apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   436
    apply(force simp add:Graph_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   437
   apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   438
  apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   439
  apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   440
  apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   441
   apply (erule Append_to_free1)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   442
  apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   443
  apply (drule_tac n = "i" in Append_to_free2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   444
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   445
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   446
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   447
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   448
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   449
subsubsection {* Correctness of the Collector *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   450
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   451
constdefs 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   452
  Collector :: " gar_coll_state ann_com"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   453
  "Collector \<equiv>
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   454
.{\<acute>Proper}.  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   455
 WHILE True INV .{\<acute>Proper}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   456
 DO  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   457
  Blacken_Roots;; 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   458
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M}.  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   459
   \<acute>obc:={};; 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   460
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc={}}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   461
   \<acute>bc:=Roots;; 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   462
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc={} \<and> \<acute>bc=Roots}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   463
   \<acute>Ma:=M_init;;  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   464
  .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc={} \<and> \<acute>bc=Roots \<and> \<acute>Ma=M_init}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   465
   WHILE \<acute>obc\<noteq>\<acute>bc  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   466
     INV .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   467
           \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma \<and> Blacks \<acute>Ma\<subseteq>\<acute>bc \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   468
           \<and> length \<acute>Ma=length \<acute>M \<and> (\<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe)}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   469
   DO .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   470
       \<acute>obc:=\<acute>bc;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   471
       Propagate_Black;; 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   472
      .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   473
        \<and> (\<acute>obc < Blacks \<acute>M \<or> \<acute>Safe)}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   474
       \<acute>Ma:=\<acute>M;;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   475
      .{\<acute>Proper \<and> Roots\<subseteq>Blacks \<acute>M \<and> \<acute>obc\<subseteq>Blacks \<acute>Ma 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   476
        \<and> Blacks \<acute>Ma\<subseteq>Blacks \<acute>M \<and> \<acute>bc\<subseteq>Blacks \<acute>M \<and> length \<acute>Ma=length \<acute>M 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   477
        \<and> ( \<acute>obc < Blacks \<acute>Ma \<or> \<acute>Safe)}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   478
       \<acute>bc:={};;
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   479
       Count 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   480
   OD;; 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   481
  Append  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   482
 OD"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   483
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   484
lemma Collector: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   485
  "\<turnstile> Collector .{False}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   486
apply(unfold Collector_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   487
apply annhoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   488
apply(simp_all add: Blacken_Roots Propagate_Black Count Append)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   489
apply(simp_all add:Blacken_Roots_def Propagate_Black_def Count_def Append_def collector_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   490
   apply (force simp add: Proper_Roots_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   491
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   492
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   493
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   494
apply (erule disjE)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   495
apply(simp add:psubsetI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   496
 apply(force dest:subset_antisym)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   497
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   498
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   499
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   500
subsection {* Interference Freedom *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   501
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   502
lemmas modules = Redirect_Edge_def Color_Target_def Blacken_Roots_def 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   503
                 Propagate_Black_def Count_def Append_def
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   504
lemmas Invariants = PBInv_def Auxk_def CountInv_def AppendInv_def
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   505
lemmas abbrev = collector_defs mutator_defs Invariants
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   506
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   507
lemma interfree_Blacken_Roots_Redirect_Edge: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   508
 "interfree_aux (Some Blacken_Roots, {}, Some Redirect_Edge)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   509
apply (unfold modules)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   510
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   511
apply safe
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   512
apply (simp_all add:Graph6 Graph12 abbrev)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   513
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   514
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   515
lemma interfree_Redirect_Edge_Blacken_Roots: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   516
  "interfree_aux (Some Redirect_Edge, {}, Some Blacken_Roots)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   517
apply (unfold modules)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   518
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   519
apply safe
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   520
apply(simp add:abbrev)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   521
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   522
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   523
lemma interfree_Blacken_Roots_Color_Target: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   524
  "interfree_aux (Some Blacken_Roots, {}, Some Color_Target)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   525
apply (unfold modules)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   526
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   527
apply safe
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   528
apply(simp_all add:Graph7 Graph8 nth_list_update abbrev)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   529
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   530
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   531
lemma interfree_Color_Target_Blacken_Roots: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   532
  "interfree_aux (Some Color_Target, {}, Some Blacken_Roots)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   533
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   534
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   535
apply safe
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   536
apply(simp add:abbrev)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   537
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   538
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   539
lemma interfree_Propagate_Black_Redirect_Edge: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   540
  "interfree_aux (Some Propagate_Black, {}, Some Redirect_Edge)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   541
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   542
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   543
--{* 11 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   544
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   545
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   546
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   547
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   548
apply(erule conjE)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   549
apply(erule disjE, erule disjI1, rule disjI2, rule allI, (rule impI)+, case_tac "R=i", rule conjI, erule sym)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   550
 apply(erule Graph4) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   551
   apply(simp)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   552
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   553
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   554
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   555
 apply (force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   556
apply(erule Graph4)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   557
   apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   558
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   559
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   560
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   561
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   562
apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   563
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   564
--{* 7 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   565
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   566
apply(erule conjE)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   567
apply(erule disjE, erule disjI1, rule disjI2, rule allI, (rule impI)+, case_tac "R=i", rule conjI, erule sym)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   568
 apply(erule Graph4) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   569
   apply(simp)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   570
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   571
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   572
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   573
 apply (force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   574
apply(erule Graph4)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   575
   apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   576
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   577
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   578
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   579
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   580
apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   581
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   582
--{* 6 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   583
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   584
apply(erule conjE)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   585
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   586
 apply(erule disjE, erule disjI1, rule disjI2, rule allI, (rule impI)+, case_tac "R=i", rule conjI, erule sym)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   587
  apply(erule Graph4) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   588
    apply(simp)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   589
   apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   590
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   591
 apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   592
  apply (force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   593
 apply(erule Graph4)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   594
    apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   595
   apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   596
   apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   597
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   598
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   599
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   600
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   601
apply(simp add:BtoW_def nth_list_update) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   602
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   603
--{* 5 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   604
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   605
--{* 4 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   606
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   607
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   608
 apply(erule disjE, erule disjI1, rule disjI2, rule allI, (rule impI)+, case_tac "R=i", rule conjI, erule sym)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   609
  apply(erule Graph4) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   610
    apply(simp)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   611
   apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   612
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   613
 apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   614
  apply (force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   615
 apply(erule Graph4)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   616
    apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   617
   apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   618
   apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   619
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   620
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   621
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   622
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   623
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   624
 apply(simp add:nth_list_update)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   625
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   626
apply(rule impI, rule impI, erule disjE, erule disjI1, case_tac "R = (ind x)" ,case_tac "M x ! T = Black")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   627
  apply(force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   628
 apply(case_tac "M x !snd (E x ! ind x)=Black")
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   629
  apply(rule disjI2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   630
  apply simp
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   631
  apply (erule Graph5)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   632
  apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   633
 apply(force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   634
apply(force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   635
--{* 3 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   636
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   637
--{* 2 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   638
apply(clarify, simp add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   639
apply(erule disjE, erule disjI1, rule disjI2, rule allI, (rule impI)+, case_tac "R=i", rule conjI, erule sym)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   640
 apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   641
 apply(erule Graph4) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   642
   apply(simp)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   643
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   644
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   645
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   646
 apply (force simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   647
apply(erule Graph4)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   648
   apply simp+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   649
  apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   650
  apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   651
 apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   652
 apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   653
apply (simp add:BtoW_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   654
apply force
13022
b115b305612f New order in the loading of theories (Quote-antiquote right before the OG_Syntax and RG_Syntax respectively)
prensani
parents: 13020
diff changeset
   655
--{* 1 subgoal left *}
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   656
apply(simp add:abbrev)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   657
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   658
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   659
lemma interfree_Redirect_Edge_Propagate_Black: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   660
  "interfree_aux (Some Redirect_Edge, {}, Some Propagate_Black)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   661
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   662
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   663
apply(clarify, simp add:abbrev)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   664
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   665
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   666
lemma interfree_Propagate_Black_Color_Target: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   667
  "interfree_aux (Some Propagate_Black, {}, Some Color_Target)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   668
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   669
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   670
--{* 11 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   671
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   672
apply(erule conjE)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   673
apply(erule disjE,rule disjI1,erule psubset_subset_trans,erule Graph9, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   674
      case_tac "M x!T=Black", rule disjI2,rotate_tac -1, simp add: Graph10, clarify,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   675
      erule allE, erule impE, assumption, erule impE, assumption, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   676
      simp add:BtoW_def, rule disjI1, erule subset_psubset_trans, erule Graph11, force) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   677
--{* 7 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   678
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   679
apply(erule conjE)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   680
apply(erule disjE,rule disjI1,erule psubset_subset_trans,erule Graph9, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   681
      case_tac "M x!T=Black", rule disjI2,rotate_tac -1, simp add: Graph10, clarify,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   682
      erule allE, erule impE, assumption, erule impE, assumption, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   683
      simp add:BtoW_def, rule disjI1, erule subset_psubset_trans, erule Graph11, force) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   684
--{* 6 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   685
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   686
apply clarify
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   687
apply (rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   688
 apply(erule disjE,rule disjI1,erule psubset_subset_trans,erule Graph9, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   689
      case_tac "M x!T=Black", rule disjI2,rotate_tac -1, simp add: Graph10, clarify,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   690
      erule allE, erule impE, assumption, erule impE, assumption, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   691
      simp add:BtoW_def, rule disjI1, erule subset_psubset_trans, erule Graph11, force) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   692
apply(simp add:nth_list_update)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   693
--{* 5 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   694
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   695
--{* 4 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   696
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   697
apply (rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   698
 apply(erule disjE,rule disjI1,erule psubset_subset_trans,erule Graph9, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   699
      case_tac "M x!T=Black", rule disjI2,rotate_tac -1, simp add: Graph10, clarify,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   700
      erule allE, erule impE, assumption, erule impE, assumption, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   701
      simp add:BtoW_def, rule disjI1, erule subset_psubset_trans, erule Graph11, force) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   702
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   703
apply(simp add:nth_list_update)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   704
apply(rule impI,rule impI, case_tac "M x!T=Black",rotate_tac -1, force simp add: BtoW_def Graph10, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   705
      erule subset_psubset_trans, erule Graph11, force)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   706
--{* 3 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   707
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   708
--{* 2 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   709
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   710
apply(erule disjE,rule disjI1,erule psubset_subset_trans,erule Graph9, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   711
      case_tac "M x!T=Black", rule disjI2,rotate_tac -1, simp add: Graph10, clarify,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   712
      erule allE, erule impE, assumption, erule impE, assumption, 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   713
      simp add:BtoW_def, rule disjI1, erule subset_psubset_trans, erule Graph11, force) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   714
--{* 3 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   715
apply(simp add:abbrev)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   716
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   717
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   718
lemma interfree_Color_Target_Propagate_Black: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   719
  "interfree_aux (Some Color_Target, {}, Some Propagate_Black)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   720
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   721
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   722
apply(clarify, simp add:abbrev)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   723
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   724
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   725
lemma interfree_Count_Redirect_Edge: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   726
  "interfree_aux (Some Count, {}, Some Redirect_Edge)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   727
apply (unfold modules)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   728
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   729
--{* 9 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   730
apply(simp_all add:abbrev Graph6 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   731
--{* 6 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   732
apply(clarify, simp add:abbrev Graph6 Graph12,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   733
      erule disjE,erule disjI1,rule disjI2,rule subset_trans, erule Graph3,force,force)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   734
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   735
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   736
lemma interfree_Redirect_Edge_Count: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   737
  "interfree_aux (Some Redirect_Edge, {}, Some Count)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   738
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   739
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   740
apply(clarify,simp add:abbrev)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   741
apply(simp add:abbrev)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   742
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   743
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   744
lemma interfree_Count_Color_Target: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   745
  "interfree_aux (Some Count, {}, Some Color_Target)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   746
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   747
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   748
--{* 9 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   749
apply(simp_all add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   750
--{* 6 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   751
apply(clarify,simp add:abbrev Graph7 Graph8 Graph12,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   752
      erule disjE, erule disjI1, rule disjI2,erule subset_trans, erule Graph9)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   753
--{* 2 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   754
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   755
apply(rule conjI)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   756
 apply(erule disjE, erule disjI1, rule disjI2,erule subset_trans, erule Graph9) 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   757
apply(simp add:nth_list_update)
13022
b115b305612f New order in the loading of theories (Quote-antiquote right before the OG_Syntax and RG_Syntax respectively)
prensani
parents: 13020
diff changeset
   758
--{* 1 subgoal left *}
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   759
apply(clarify, simp add:abbrev Graph7 Graph8 Graph12,
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   760
      erule disjE, erule disjI1, rule disjI2,erule subset_trans, erule Graph9)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   761
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   762
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   763
lemma interfree_Color_Target_Count: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   764
  "interfree_aux (Some Color_Target, {}, Some Count)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   765
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   766
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   767
apply(clarify, simp add:abbrev)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   768
apply(simp add:abbrev)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   769
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   770
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   771
lemma interfree_Append_Redirect_Edge: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   772
  "interfree_aux (Some Append, {}, Some Redirect_Edge)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   773
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   774
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   775
apply( simp_all add:abbrev Graph6 Append_to_free0 Append_to_free1 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   776
apply(clarify, simp add:abbrev Graph6 Append_to_free0 Append_to_free1 Graph12, force dest:Graph3)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   777
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   778
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   779
lemma interfree_Redirect_Edge_Append: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   780
  "interfree_aux (Some Redirect_Edge, {}, Some Append)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   781
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   782
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   783
apply(clarify, simp add:abbrev Append_to_free0)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   784
apply (force simp add: Append_to_free2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   785
apply(clarify, simp add:abbrev Append_to_free0)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   786
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   787
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   788
lemma interfree_Append_Color_Target: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   789
  "interfree_aux (Some Append, {}, Some Color_Target)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   790
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   791
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   792
apply(clarify, simp add:abbrev Graph7 Graph8 Append_to_free0 Append_to_free1 Graph12 nth_list_update)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   793
apply(simp add:abbrev Graph7 Graph8 Append_to_free0 Append_to_free1 Graph12 nth_list_update)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   794
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   795
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   796
lemma interfree_Color_Target_Append: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   797
  "interfree_aux (Some Color_Target, {}, Some Append)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   798
apply (unfold modules )
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   799
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   800
apply(clarify, simp add:abbrev Append_to_free0)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   801
apply (force simp add: Append_to_free2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   802
apply(clarify,simp add:abbrev Append_to_free0)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   803
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   804
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   805
lemmas collector_mutator_interfree = 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   806
 interfree_Blacken_Roots_Redirect_Edge interfree_Blacken_Roots_Color_Target 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   807
 interfree_Propagate_Black_Redirect_Edge interfree_Propagate_Black_Color_Target  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   808
 interfree_Count_Redirect_Edge interfree_Count_Color_Target 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   809
 interfree_Append_Redirect_Edge interfree_Append_Color_Target 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   810
 interfree_Redirect_Edge_Blacken_Roots interfree_Color_Target_Blacken_Roots 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   811
 interfree_Redirect_Edge_Propagate_Black interfree_Color_Target_Propagate_Black  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   812
 interfree_Redirect_Edge_Count interfree_Color_Target_Count 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   813
 interfree_Redirect_Edge_Append interfree_Color_Target_Append
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   814
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   815
subsubsection {* Interference freedom Collector-Mutator *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   816
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   817
lemma interfree_Collector_Mutator:
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   818
 "interfree_aux (Some Collector, {}, Some Mutator)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   819
apply(unfold Collector_def Mutator_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   820
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   821
apply(simp_all add:collector_mutator_interfree)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   822
apply(unfold modules collector_defs mutator_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   823
apply(tactic  {* TRYALL (interfree_aux_tac) *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   824
--{* 32 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   825
apply(simp_all add:Graph6 Graph7 Graph8 Append_to_free0 Append_to_free1 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   826
--{* 20 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   827
apply(tactic{* TRYALL Clarify_tac *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   828
apply(simp_all add:Graph6 Graph7 Graph8 Append_to_free0 Append_to_free1 Graph12)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   829
apply(tactic {* TRYALL (etac disjE) *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   830
apply simp_all
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   831
apply(tactic {* TRYALL(EVERY'[rtac disjI2,rtac subset_trans,etac (thm "Graph3"),Force_tac, assume_tac]) *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   832
apply(tactic {* TRYALL(EVERY'[rtac disjI2,etac subset_trans,rtac (thm "Graph9"),Force_tac]) *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   833
apply(tactic {* TRYALL(EVERY'[rtac disjI1,etac psubset_subset_trans,rtac (thm "Graph9"),Force_tac]) *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   834
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   835
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   836
subsubsection {* Interference freedom Mutator-Collector *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   837
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   838
lemma interfree_Mutator_Collector:
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   839
 "interfree_aux (Some Mutator, {}, Some Collector)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   840
apply(unfold Collector_def Mutator_def)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   841
apply interfree_aux
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   842
apply(simp_all add:collector_mutator_interfree)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   843
apply(unfold modules collector_defs mutator_defs)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   844
apply(tactic  {* TRYALL (interfree_aux_tac) *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   845
--{* 64 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   846
apply(simp_all add:nth_list_update Invariants Append_to_free0)+
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   847
apply(tactic{* TRYALL Clarify_tac *})
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   848
--{* 4 subgoals left *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   849
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   850
apply(simp add:Append_to_free2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   851
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   852
apply(simp add:Append_to_free2)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   853
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   854
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   855
subsubsection {* The Garbage Collection algorithm *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   856
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   857
text {* In total there are 289 verification conditions.  *}
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   858
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   859
lemma Gar_Coll: 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   860
  "\<parallel>- .{\<acute>Proper \<and> \<acute>Mut_init \<and> \<acute>z}.  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   861
  COBEGIN  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   862
   Collector
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   863
  .{False}.
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   864
 \<parallel>  
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   865
   Mutator
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   866
  .{False}. 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   867
 COEND 
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   868
  .{False}."
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   869
apply oghoare
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   870
apply(force simp add: Mutator_def Collector_def modules)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   871
apply(rule Collector)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   872
apply(rule Mutator)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   873
apply(simp add:interfree_Collector_Mutator)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   874
apply(simp add:interfree_Mutator_Collector)
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   875
apply force
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   876
done
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   877
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
   878
end