diff --git a/lib/concurrency/Atomicity_Lib.thy b/lib/concurrency/Atomicity_Lib.thy index f6f5fcd2ba..7801d68bfe 100644 --- a/lib/concurrency/Atomicity_Lib.thy +++ b/lib/concurrency/Atomicity_Lib.thy @@ -31,7 +31,7 @@ lemmas prefix_refinement_env_steps_Await = lemma pfx_refn_interferences: "env_stable AR R sr iosr (\_. True) - \ prefix_refinement sr iosr iosr \\ AR R \\ \\ interferences interferences" + \ prefix_refinement sr iosr iosr dc AR R \\ \\ interferences interferences" apply (rule prefix_refinement_repeat) apply (erule prefix_refinement_interference) apply wp+ @@ -64,14 +64,12 @@ lemma repeat_pre_triv_refinement[simplified]: apply (simp add: repeat_def select_early) apply (rule triv_refinement_select_concrete_All; clarsimp) apply (rule_tac x="Suc x" in triv_refinement_select_abstract_x; simp) - apply (rule triv_refinement_refl) done lemma repeat_none_triv_refinement: "triv_refinement (repeat f) (return ())" apply (simp add: repeat_def) apply (rule_tac x="0" in triv_refinement_select_abstract_x; simp) - apply (rule triv_refinement_refl) done lemmas repeat_triv_refinement_consume_1 = @@ -466,7 +464,6 @@ lemma rel_tr_refinement_bind_right_general: apply (simp add: rely_cond_append list_all2_same reflpD[where R=sr] rel_prod_sel) done -lemmas validI_triv' = rg_weaken_pre[OF validI_triv, simplified] lemmas rel_tr_refinement_bind_right = rel_tr_refinement_bind_right_general[where C'=False, simplified] @@ -810,7 +807,7 @@ lemma adjust_tr_relation_equivp: done lemma prefix_refinement_i_modify_split: - "\adjust_tr_relation tr_r sr; \s t. isr s t \ P s \ Q t \ intsr (f s) (g t); + "\adjust_tr_relation tr_r sr; \s t. \isr s t; P s; Q t\ \ intsr (f s) (g t); \s. tr_r s (g s); \s t. R s t \ R (g s) (g t); not_env_steps_first b; prefix_refinement sr intsr osr rvr' AR R P' Q' d (do x \ interferences; b od)\ \ prefix_refinement sr isr osr rvr' AR R (\s0 s. P s \ P' s0 (f s)) (\s0 s. Q s \ Q' s0 (g s)) diff --git a/lib/concurrency/examples/Peterson_Atomicity.thy b/lib/concurrency/examples/Peterson_Atomicity.thy index f4f810939f..04907808bb 100644 --- a/lib/concurrency/examples/Peterson_Atomicity.thy +++ b/lib/concurrency/examples/Peterson_Atomicity.thy @@ -373,9 +373,9 @@ lemmas prefix_refinement_interference_peterson_cs1 = prefix_refinement_interference[OF env_stable_peterson_sr_cs1] lemmas prefix_refinement_bind_2left_2right - = prefix_refinement_bind[where a="bind a a'" and c="bind c c'" for a a' c c', simplified bind_assoc] + = prefix_refinement_bind[where a="Trace_Monad.bind a a'" and c="Trace_Monad.bind c c'" for a a' c c', simplified bind_assoc] lemmas rel_tr_refinement_bind_left_general_2left_2right - = rel_tr_refinement_bind_left_general[where f="bind f f'" and g="bind g g'" for f f' g g', + = rel_tr_refinement_bind_left_general[where f="Trace_Monad.bind f f'" and g="Trace_Monad.bind g g'" for f f' g g', simplified bind_assoc] lemma peterson_rel_imp_invs: @@ -393,7 +393,7 @@ lemma peterson_rel_set_label: by (simp add: peterson_rel_def set_label_def) lemma acquire_lock_refinement: - "prefix_refinement peterson_sr peterson_sr peterson_sr \\ + "prefix_refinement peterson_sr peterson_sr peterson_sr dc (peterson_rel (other_ident ident)) (peterson_rel (other_ident ident)) \\ \\ (acquire_lock ident) (acquire_lock ident)" @@ -429,12 +429,12 @@ lemma peterson_sr_ab_label: by (simp add: peterson_sr_def) lemma critical_section_refinement: - "prefix_refinement peterson_sr peterson_sr peterson_sr \\ + "prefix_refinement peterson_sr peterson_sr peterson_sr dc (peterson_rel (other_ident ident)) (peterson_rel (other_ident ident)) (\_ s. invs s \ ab_label s ident = Critical) \\ abs_critical_section critical_section" apply (simp add: abs_critical_section_def critical_section_def) - apply (rule prefix_refinement_weaken_pre) + apply pfx_refn_pre apply (rule prefix_refinement_interferences_split) apply (rule prefix_refinement_bind_sr) apply (rule prefix_refinement_interference_peterson) @@ -457,20 +457,20 @@ lemma critical_section_refinement: apply (rule prefix_refinement_bind_sr) apply (rule prefix_refinement_interference_peterson) apply (rule prefix_refinement_bind[where intsr=peterson_sr_cs1]) - apply (rule pfx_refn_modifyT) + apply (rule prefix_refinement_modifyT) apply (clarsimp simp add: peterson_sr_def peterson_sr_cs1_def) apply (rule prefix_refinement_bind_sr) apply (rule cs_refine) apply (rule prefix_refinement_interference_peterson) - apply (wpsimp wp: validI_triv[OF cs_closed])+ + apply (wpsimp wp: cs_closed)+ apply (subst peterson_rel_imp_label[symmetric], assumption, simp) apply (drule peterson_rel_imp_invs, simp) apply (simp add: peterson_sr_ab_label) done lemma release_lock_refinement: - "prefix_refinement peterson_sr peterson_sr peterson_sr \\ + "prefix_refinement peterson_sr peterson_sr peterson_sr dc (peterson_rel (other_ident ident)) (peterson_rel (other_ident ident)) \\ \\ (release_lock ident) (release_lock ident)" @@ -532,7 +532,7 @@ lemma acquire_lock_prefix_closed[simp]: simp: cs_closed acquire_lock_def) theorem peterson_proc_refinement: - "prefix_refinement peterson_sr peterson_sr peterson_sr \\ + "prefix_refinement peterson_sr peterson_sr peterson_sr dc (peterson_rel (other_ident ident)) (peterson_rel (other_ident ident)) (\_ s. invs s \ ab_label s ident = Exited) (\_ s. invs s \ ab_label s ident = Exited) @@ -545,7 +545,7 @@ theorem peterson_proc_refinement: apply (rule prefix_refinement_bind_sr) apply (rule critical_section_refinement) apply (rule release_lock_refinement) - apply (wpsimp wp: validI_triv acquire_lock_wp + apply (wpsimp wp: acquire_lock_wp simp: pred_conj_def)+ done @@ -597,18 +597,17 @@ lemma peterson_proc_mutual_excl_helper: peterson_proc ident \peterson_rel3 ident\, \\rv s0 s. peterson_rel3 ident s0 s \ invs s \ ab_label s ident = Exited\" - apply (rule prefix_refinement_validI') + apply (rule prefix_refinement_validI) apply (rule peterson_proc_refinement) apply (rule abs_peterson_proc_mutual_excl) - apply (clarsimp simp: peterson_sr_peterson_rel3 peterson_sr_ab_label) - apply (clarsimp simp: peterson_sr_peterson_rel3) - apply clarsimp - apply (rule_tac x=t0 in exI) - apply (rule_tac x="t \cs1_v := cs1_v t0\" in exI) - apply (clarsimp simp: peterson_rel_def peterson_sr_def) - apply clarsimp - apply (rule_tac x="t \cs1_v := cs1_v s0\" in exI) - apply (clarsimp simp: peterson_rel_def peterson_sr_def invs_def invs_defs) + apply clarsimp + apply (rule_tac x=t0 in exI) + apply (rule_tac x="t \cs1_v := cs1_v t0\" in exI) + apply (clarsimp simp: peterson_rel_def peterson_sr_def) + apply (rule_tac x="t \cs1_v := cs1_v s0\" in exI) + apply (clarsimp simp: peterson_rel_def peterson_sr_def invs_def invs_defs) + apply (clarsimp simp: peterson_sr_peterson_rel3) + apply (clarsimp simp: peterson_sr_peterson_rel3 peterson_sr_ab_label) apply clarsimp done @@ -687,7 +686,7 @@ lemma abs_peterson_proc_prefix_closed[simp]: simp: cs_closed abs_peterson_proc_def acquire_lock_def release_lock_def) lemma peterson_repeat_refinement: - "prefix_refinement peterson_sr peterson_sr peterson_sr \\ + "prefix_refinement peterson_sr peterson_sr peterson_sr dc (peterson_rel (other_ident ident)) (peterson_rel (other_ident ident)) (\s0 s. peterson_rel ident s0 s \ invs s \ ab_label s ident = Exited) (\s0 s. peterson_rel ident s0 s \ invs s \ ab_label s ident = Exited) @@ -707,11 +706,11 @@ lemma peterson_repeat_refinement: apply (rule peterson_proc_refinement[THEN prefix_refinement_weaken_pre]) apply simp+ apply (rule prefix_refinement_interference_peterson) - apply (wpsimp wp: validI_triv)+ + apply wpsimp+ done theorem peterson_proc_system_refinement: - "prefix_refinement peterson_sr peterson_sr peterson_sr \\ + "prefix_refinement peterson_sr peterson_sr peterson_sr dc (\s0 s. s0 = s) (\t0 t. t0 = t) (\s0 s. s0 = s \ invs s \ ab_label s = (\_. Exited)) (\t0 t. t0 = t \ invs t \ ab_label t = (\_. Exited)) @@ -761,12 +760,12 @@ theorem peterson_proc_system_mutual_excl: peterson_proc_system \\s0 s. invs s0 \ invs s\, \\rv s0 s. invs s\" - apply (rule prefix_refinement_validI') + apply (rule prefix_refinement_validI) apply (rule peterson_proc_system_refinement) apply (rule abs_peterson_proc_system_mutual_excl) - apply clarsimp - apply (clarsimp simp: peterson_sr_invs_sym ) - apply (fastforce simp: peterson_rel_def peterson_sr_def) + apply (fastforce simp: peterson_rel_def peterson_sr_def) + apply clarsimp + apply (clarsimp simp: peterson_sr_invs_sym ) apply clarsimp apply (fastforce simp: peterson_sr_def) done diff --git a/lib/concurrency/examples/Plus2_Prefix.thy b/lib/concurrency/examples/Plus2_Prefix.thy index cde918273a..aba52c3b8a 100644 --- a/lib/concurrency/examples/Plus2_Prefix.thy +++ b/lib/concurrency/examples/Plus2_Prefix.thy @@ -117,9 +117,9 @@ abbreviation (input) prefix_refinement (\s t. t = mainv s) (\s t. t = mainv s) (\s t. t = mainv s) rvr AR R P Q" theorem pfx_refn_plus2_x: - "p_refn (\\) AR R (=) (\\) (plus2_x tid) plus2" + "p_refn dc AR R (=) (\\) (plus2_x tid) plus2" apply (simp add: plus2_x_def plus2_def) - apply (rule prefix_refinement_weaken_pre) + apply pfx_refn_pre apply (rule pfx_refn_bind prefix_refinement_interference prefix_refinement_env_steps pfx_refn_modifyT env_stable | wpsimp)+ @@ -140,17 +140,17 @@ theorem plus2_parallel: parallel plus2 plus2 \\s0 s. True\,\\_ s0 s. s = 4\" apply (rule_tac sr="\s t. t = mainv s" in prefix_refinement_validI) - apply (rule prefix_refinement_parallel_triv; - ((rule par_tr_fin_plus2_x prefix_closed_plus2)?)) - apply (rule pfx_refn_plus2_x[where tid=1]) - apply (rule pfx_refn_plus2_x[where tid=2]) + apply (rule prefix_refinement_parallel_triv; + ((rule par_tr_fin_plus2_x prefix_closed_plus2 twp_post_taut)+)?) + apply (rule pfx_refn_plus2_x[where tid=1]) + apply (rule pfx_refn_plus2_x[where tid=2]) + apply (rule plus2_x_parallel) + apply clarsimp + apply (clarsimp simp: plus2_xstate.splits) + apply (strengthen exI[where x="f(1 := x, 2 := y)" for f x y]) + apply simp apply clarsimp - apply (rule rg_strengthen_post) - apply (rule plus2_x_parallel[simplified]) - apply clarsimp - apply (clarsimp simp: plus2_xstate.splits) - apply (strengthen exI[where x="f(1 := x, 2 := y)" for f x y]) - apply simp + apply clarsimp apply clarsimp apply (intro prefix_closed_parallel prefix_closed_plus2) done @@ -215,16 +215,16 @@ lemma bipred_disj_top_eq: by auto lemma fold_parallel_pfx_refn_induct: - "\list_all2 (prefix_refinement sr sr sr (\_ _. True) (\\) (\\) P Q) xs ys; - prefix_refinement sr sr sr (\_ _. True) (\\) (\\) P Q x y; + "\list_all2 (prefix_refinement sr sr sr dc (\\) (\\) P Q) xs ys; + prefix_refinement sr sr sr dc (\\) (\\) P Q x y; \x \ set (x # xs). par_tr_fin_principle x; \y \ set (y # ys). prefix_closed y\ - \ prefix_refinement sr sr sr (\_ _. True) (\\) (\\) P Q + \ prefix_refinement sr sr sr dc(\\) (\\) P Q (fold parallel (rev xs) x) (fold parallel (rev ys) y)" apply (induct rule: list_all2_induct; simp) apply (rule prefix_refinement_parallel_triv[simplified bipred_disj_top_eq]; simp?) apply (clarsimp simp: fold_parallel_par_tr_fin_principle - fold_parallel_prefix_closed)+ + fold_parallel_prefix_closed rg_TrueI)+ done lemmas fold_parallel_pfx_refn = @@ -236,22 +236,23 @@ theorem plus2_n_parallel: fold parallel (replicate (n - 1) plus2) plus2 \\s0 s. True\,\\_ s0 s. s = n * 2\" apply (rule_tac sr="\s t. t = mainv s" in prefix_refinement_validI) - apply (rule prefix_refinement_weaken_rely, - rule_tac xs="map plus2_x [1 ..< n]" in fold_parallel_pfx_refn) - apply (clarsimp simp: list_all2_conv_all_nth) - apply (rule pfx_refn_plus2_x) - apply (rule pfx_refn_plus2_x[where tid=0]) - apply (simp add: par_tr_fin_plus2_x) - apply (simp add: prefix_closed_plus2) - apply (simp add: le_fun_def) - apply (simp add: le_fun_def) - apply simp - apply (rule rg_strengthen_post, rule plus2_x_n_parallel[simplified], simp) + apply (rule prefix_refinement_weaken_rely, + rule_tac xs="map plus2_x [1 ..< n]" in fold_parallel_pfx_refn) + apply (clarsimp simp: list_all2_conv_all_nth) + apply (rule pfx_refn_plus2_x) + apply (rule pfx_refn_plus2_x[where tid=0]) + apply (simp add: par_tr_fin_plus2_x) + apply (simp add: prefix_closed_plus2) + apply (simp add: le_fun_def) + apply (simp add: le_fun_def) + apply (rule plus2_x_n_parallel, simp) + apply clarsimp + apply (clarsimp simp: plus2_xstate.splits exI[where x="\_. 0"]) apply clarsimp - apply (clarsimp simp: plus2_xstate.splits exI[where x="\_. 0"]) + apply (rule exI, strengthen refl) + apply (clarsimp simp: plus2_rel_def plus2_inv_def) + apply clarsimp apply clarsimp - apply (rule exI, strengthen refl) - apply (clarsimp simp: plus2_rel_def plus2_inv_def) apply (rule fold_parallel_prefix_closed) apply (simp add: prefix_closed_plus2) done