diff -r 07593a0a27f4 -r effd8fcabca2 src/HOL/Hoare_Parallel/Mul_Gar_Coll.thy --- a/src/HOL/Hoare_Parallel/Mul_Gar_Coll.thy Tue Aug 27 23:54:23 2013 +0200 +++ b/src/HOL/Hoare_Parallel/Mul_Gar_Coll.thy Wed Aug 28 00:18:50 2013 +0200 @@ -32,21 +32,21 @@ definition Mul_Redirect_Edge :: "nat \ nat \ mul_gar_coll_state ann_com" where "Mul_Redirect_Edge j n \ - .{\Mul_mut_init n \ Z (\Muts!j)}. + \\Mul_mut_init n \ Z (\Muts!j)\ \IF T(\Muts!j) \ Reach \E THEN \E:= \E[R (\Muts!j):= (fst (\E!R(\Muts!j)), T (\Muts!j))] FI,, \Muts:= \Muts[j:= (\Muts!j) \Z:=False\]\" definition Mul_Color_Target :: "nat \ nat \ mul_gar_coll_state ann_com" where "Mul_Color_Target j n \ - .{\Mul_mut_init n \ \ Z (\Muts!j)}. + \\Mul_mut_init n \ \ Z (\Muts!j)\ \\M:=\M[T (\Muts!j):=Black],, \Muts:=\Muts[j:= (\Muts!j) \Z:=True\]\" definition Mul_Mutator :: "nat \ nat \ mul_gar_coll_state ann_com" where "Mul_Mutator j n \ - .{\Mul_mut_init n \ Z (\Muts!j)}. + \\Mul_mut_init n \ Z (\Muts!j)\ WHILE True - INV .{\Mul_mut_init n \ Z (\Muts!j)}. + INV \\Mul_mut_init n \ Z (\Muts!j)\ DO Mul_Redirect_Edge j n ;; Mul_Color_Target j n OD" @@ -67,7 +67,7 @@ lemma Mul_Color_Target: "0\j \ j \ Mul_Color_Target j n - .{\Mul_mut_init n \ Z (\Muts!j)}." + \\Mul_mut_init n \ Z (\Muts!j)\" apply (unfold mul_mutator_defs) apply annhoare apply(simp_all) @@ -76,7 +76,7 @@ done lemma Mul_Mutator: "0\j \ j - \ Mul_Mutator j n .{False}." + \ Mul_Mutator j n \False\" apply(unfold Mul_Mutator_def) apply annhoare apply(simp_all add:Mul_Redirect_Edge Mul_Color_Target) @@ -139,13 +139,13 @@ subsubsection {* Modular Parameterized Mutators *} lemma Mul_Parameterized_Mutators: "0 - \- .{\Mul_mut_init n \ (\iMuts!i))}. + \- \\Mul_mut_init n \ (\iMuts!i))\ COBEGIN SCHEME [0\ j< n] Mul_Mutator j n - .{False}. + \False\ COEND - .{False}." + \False\" apply oghoare apply(force simp add:Mul_Mutator_def mul_mutator_defs nth_list_update) apply(erule Mul_Mutator) @@ -175,22 +175,22 @@ definition Mul_Blacken_Roots :: "nat \ mul_gar_coll_state ann_com" where "Mul_Blacken_Roots n \ - .{\Mul_Proper n}. + \\Mul_Proper n\ \ind:=0;; - .{\Mul_Proper n \ \ind=0}. + \\Mul_Proper n \ \ind=0\ WHILE \indM - INV .{\Mul_Proper n \ (\i<\ind. i\Roots \ \M!i=Black) \ \ind\length \M}. - DO .{\Mul_Proper n \ (\i<\ind. i\Roots \ \M!i=Black) \ \indM}. + INV \\Mul_Proper n \ (\i<\ind. i\Roots \ \M!i=Black) \ \ind\length \M\ + DO \\Mul_Proper n \ (\i<\ind. i\Roots \ \M!i=Black) \ \indM\ IF \ind\Roots THEN - .{\Mul_Proper n \ (\i<\ind. i\Roots \ \M!i=Black) \ \indM \ \ind\Roots}. + \\Mul_Proper n \ (\i<\ind. i\Roots \ \M!i=Black) \ \indM \ \ind\Roots\ \M:=\M[\ind:=Black] FI;; - .{\Mul_Proper n \ (\i<\ind+1. i\Roots \ \M!i=Black) \ \indM}. + \\Mul_Proper n \ (\i<\ind+1. i\Roots \ \M!i=Black) \ \indM\ \ind:=\ind+1 OD" lemma Mul_Blacken_Roots: "\ Mul_Blacken_Roots n - .{\Mul_Proper n \ Roots \ Blacks \M}." + \\Mul_Proper n \ Roots \ Blacks \M\" apply (unfold Mul_Blacken_Roots_def) apply annhoare apply(simp_all add:mul_collector_defs Graph_defs) @@ -213,40 +213,40 @@ definition Mul_Propagate_Black :: "nat \ mul_gar_coll_state ann_com" where "Mul_Propagate_Black n \ - .{\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M - \ (\Safe \ \l\\Queue \ \obc\Blacks \M)}. + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M + \ (\Safe \ \l\\Queue \ \obc\Blacks \M)\ \ind:=0;; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ Blacks \M\Blacks \M \ \bc\Blacks \M - \ (\Safe \ \l\\Queue \ \obc\Blacks \M) \ \ind=0}. + \ (\Safe \ \l\\Queue \ \obc\Blacks \M) \ \ind=0\ WHILE \indE - INV .{\Mul_Proper n \ Roots\Blacks \M + INV \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M - \ \Mul_PBInv \ \ind\length \E}. - DO .{\Mul_Proper n \ Roots\Blacks \M + \ \Mul_PBInv \ \ind\length \E\ + DO \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M - \ \Mul_PBInv \ \indE}. + \ \Mul_PBInv \ \indE\ IF \M!(fst (\E!\ind))=Black THEN - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M - \ \Mul_PBInv \ (\M!fst(\E!\ind))=Black \ \indE}. + \ \Mul_PBInv \ (\M!fst(\E!\ind))=Black \ \indE\ \k:=snd(\E!\ind);; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M \ (\Safe \ \obc\Blacks \M \ \l<\Queue \ (\i<\ind. \BtoW(\E!i,\M)) \ \l\\Queue \ \Mul_Auxk ) \ \kM \ \M!fst(\E!\ind)=Black - \ \indE}. + \ \indE\ \\M:=\M[\k:=Black],,\ind:=\ind+1\ - ELSE .{\Mul_Proper n \ Roots\Blacks \M + ELSE \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M - \ \Mul_PBInv \ \indE}. + \ \Mul_PBInv \ \indE\ \IF \M!(fst (\E!\ind))\Black THEN \ind:=\ind+1 FI\ FI OD" lemma Mul_Propagate_Black: "\ Mul_Propagate_Black n - .{\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M - \ (\Safe \ \obc\Blacks \M \ \l<\Queue \ (\l\\Queue \ \obc\Blacks \M))}." + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M + \ (\Safe \ \obc\Blacks \M \ \l<\Queue \ (\l\\Queue \ \obc\Blacks \M))\" apply(unfold Mul_Propagate_Black_def) apply annhoare apply(simp_all add:Mul_PBInv_def mul_collector_defs Mul_Auxk_def Graph6 Graph7 Graph8 Graph12 mul_collector_defs Queue_def) @@ -295,51 +295,51 @@ definition Mul_Count :: "nat \ mul_gar_coll_state ann_com" where "Mul_Count n \ - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M) ) - \ \q \bc={}}. + \ \q \bc={}\ \ind:=0;; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M) ) - \ \q \bc={} \ \ind=0}. + \ \q \bc={} \ \ind=0\ WHILE \indM - INV .{\Mul_Proper n \ Roots\Blacks \M + INV \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ \Mul_CountInv \ind \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \ind\length \M}. - DO .{\Mul_Proper n \ Roots\Blacks \M + \ \q \ind\length \M\ + DO \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ \Mul_CountInv \ind \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \indM}. + \ \q \indM\ IF \M!\ind=Black - THEN .{\Mul_Proper n \ Roots\Blacks \M + THEN \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ \Mul_CountInv \ind \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \indM \ \M!\ind=Black}. + \ \q \indM \ \M!\ind=Black\ \bc:=insert \ind \bc FI;; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ \Mul_CountInv (\ind+1) \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \indM}. + \ \q \indM\ \ind:=\ind+1 OD" lemma Mul_Count: "\ Mul_Count n - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ Blacks \Ma\\bc \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \q" apply (unfold Mul_Count_def) apply annhoare apply(simp_all add:Mul_CountInv_def mul_collector_defs Mul_Auxk_def Graph6 Graph7 Graph8 Graph12 mul_collector_defs Queue_def) @@ -393,26 +393,26 @@ definition Mul_Append :: "nat \ mul_gar_coll_state ann_com" where "Mul_Append n \ - .{\Mul_Proper n \ Roots\Blacks \M \ \Safe}. + \\Mul_Proper n \ Roots\Blacks \M \ \Safe\ \ind:=0;; - .{\Mul_Proper n \ Roots\Blacks \M \ \Safe \ \ind=0}. + \\Mul_Proper n \ Roots\Blacks \M \ \Safe \ \ind=0\ WHILE \indM - INV .{\Mul_Proper n \ \Mul_AppendInv \ind \ \ind\length \M}. - DO .{\Mul_Proper n \ \Mul_AppendInv \ind \ \indM}. + INV \\Mul_Proper n \ \Mul_AppendInv \ind \ \ind\length \M\ + DO \\Mul_Proper n \ \Mul_AppendInv \ind \ \indM\ IF \M!\ind=Black THEN - .{\Mul_Proper n \ \Mul_AppendInv \ind \ \indM \ \M!\ind=Black}. + \\Mul_Proper n \ \Mul_AppendInv \ind \ \indM \ \M!\ind=Black\ \M:=\M[\ind:=White] ELSE - .{\Mul_Proper n \ \Mul_AppendInv \ind \ \indM \ \ind\Reach \E}. + \\Mul_Proper n \ \Mul_AppendInv \ind \ \indM \ \ind\Reach \E\ \E:=Append_to_free(\ind,\E) FI;; - .{\Mul_Proper n \ \Mul_AppendInv (\ind+1) \ \indM}. + \\Mul_Proper n \ \Mul_AppendInv (\ind+1) \ \indM\ \ind:=\ind+1 OD" lemma Mul_Append: "\ Mul_Append n - .{\Mul_Proper n}." + \\Mul_Proper n\" apply(unfold Mul_Append_def) apply annhoare apply(simp_all add: mul_collector_defs Mul_AppendInv_def @@ -431,52 +431,52 @@ definition Mul_Collector :: "nat \ mul_gar_coll_state ann_com" where "Mul_Collector n \ -.{\Mul_Proper n}. -WHILE True INV .{\Mul_Proper n}. +\\Mul_Proper n\ +WHILE True INV \\Mul_Proper n\ DO Mul_Blacken_Roots n ;; -.{\Mul_Proper n \ Roots\Blacks \M}. +\\Mul_Proper n \ Roots\Blacks \M\ \obc:={};; -.{\Mul_Proper n \ Roots\Blacks \M \ \obc={}}. +\\Mul_Proper n \ Roots\Blacks \M \ \obc={}\ \bc:=Roots;; -.{\Mul_Proper n \ Roots\Blacks \M \ \obc={} \ \bc=Roots}. +\\Mul_Proper n \ Roots\Blacks \M \ \obc={} \ \bc=Roots\ \l:=0;; -.{\Mul_Proper n \ Roots\Blacks \M \ \obc={} \ \bc=Roots \ \l=0}. +\\Mul_Proper n \ Roots\Blacks \M \ \obc={} \ \bc=Roots \ \l=0\ WHILE \lMul_Proper n \ Roots\Blacks \M \ \bc\Blacks \M \ - (\Safe \ (\l\\Queue \ \bc\Blacks \M) \ \lMul_Proper n \ Roots\Blacks \M \ \bc\Blacks \M - \ (\Safe \ \l\\Queue \ \bc\Blacks \M)}. + INV \\Mul_Proper n \ Roots\Blacks \M \ \bc\Blacks \M \ + (\Safe \ (\l\\Queue \ \bc\Blacks \M) \ \l + DO \\Mul_Proper n \ Roots\Blacks \M \ \bc\Blacks \M + \ (\Safe \ \l\\Queue \ \bc\Blacks \M)\ \obc:=\bc;; Mul_Propagate_Black n;; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M \ (\Safe \ \obc\Blacks \M \ \l<\Queue - \ (\l\\Queue \ \obc\Blacks \M))}. + \ (\l\\Queue \ \obc\Blacks \M))\ \bc:={};; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \M \ \bc\Blacks \M \ (\Safe \ \obc\Blacks \M \ \l<\Queue - \ (\l\\Queue \ \obc\Blacks \M)) \ \bc={}}. + \ (\l\\Queue \ \obc\Blacks \M)) \ \bc={}\ \ \Ma:=\M,, \q:=\Queue \;; Mul_Count n;; - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ Blacks \Ma\\bc \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \q IF \obc=\bc THEN - .{\Mul_Proper n \ Roots\Blacks \M + \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ Blacks \Ma\\bc \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \obc=\bc}. + \ \q \obc=\bc\ \l:=\l+1 - ELSE .{\Mul_Proper n \ Roots\Blacks \M + ELSE \\Mul_Proper n \ Roots\Blacks \M \ \obc\Blacks \Ma \ Blacks \Ma\Blacks \M \ \bc\Blacks \M \ length \Ma=length \M \ Blacks \Ma\\bc \ (\Safe \ \obc\Blacks \Ma \ \l<\q \ (\q\\Queue \ \obc\Blacks \M)) - \ \q \obc\\bc}. + \ \q \obc\\bc\ \l:=0 FI OD;; Mul_Append n @@ -488,7 +488,7 @@ lemma Mul_Collector: "\ Mul_Collector n - .{False}." + \False\" apply(unfold Mul_Collector_def) apply annhoare apply(simp_all only:pre.simps Mul_Blacken_Roots @@ -1237,16 +1237,16 @@ text {* The total number of verification conditions is 328 *} lemma Mul_Gar_Coll: - "\- .{\Mul_Proper n \ \Mul_mut_init n \ (\iMuts!i))}. + "\- \\Mul_Proper n \ \Mul_mut_init n \ (\iMuts!i))\ COBEGIN Mul_Collector n - .{False}. + \False\ \ SCHEME [0\ j< n] Mul_Mutator j n - .{False}. + \False\ COEND - .{False}." + \False\" apply oghoare --{* Strengthening the precondition *} apply(rule Int_greatest)