From 293b97cb1710e55433101b470a25573161624e38 Mon Sep 17 00:00:00 2001 From: Corey Lewis Date: Thu, 24 Aug 2023 12:15:28 +1000 Subject: [PATCH] lib/monads/trace: prove more lemmas connecting valid and validI Signed-off-by: Corey Lewis --- lib/Monads/trace/Trace_RG.thy | 37 +++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/lib/Monads/trace/Trace_RG.thy b/lib/Monads/trace/Trace_RG.thy index f4d3164cca..3dec5f51b0 100644 --- a/lib/Monads/trace/Trace_RG.thy +++ b/lib/Monads/trace/Trace_RG.thy @@ -235,6 +235,14 @@ lemma last_st_tr_Cons[simp]: "last_st_tr (x # xs) s = snd x" by (simp add: last_st_tr_def) +lemma no_trace_last_st_tr: + "\no_trace f; (tr, res) \ f s\ \ last_st_tr tr s0 = s0" + by (fastforce simp: no_trace_def) + +lemma no_trace_rely_cond: + "\no_trace f; (tr, res) \ f s\ \ rely_cond R s0 tr" + by (fastforce simp: no_trace_def rely_cond_def) + lemma bind_twp[wp_split]: "\ \r. \Q' r\,\R\ g r \G\,\Q\; \P\,\R\ f \G\,\Q'\ \ \ \P\,\R\ f >>= (\r. g r) \G\,\Q\" @@ -532,11 +540,19 @@ lemma no_trace_prefix_closed: "no_trace f \ prefix_closed f" by (auto simp add: prefix_closed_def dest: no_trace_emp) +lemma validI_valid_no_trace_eq: + "no_trace f \ \P\,\R\ f \G\,\Q\ = (\s0. \P s0\ f \\v. Q v s0\)" + apply (rule iffI) + apply (fastforce simp: rely_def validI_def valid_def mres_def + dest: no_trace_emp) + apply (clarsimp simp: rely_def validI_def valid_def mres_def no_trace_prefix_closed) + apply (fastforce simp: eq_snd_iff dest: no_trace_emp) + done + lemma valid_validI_wp[wp_comb]: "\no_trace f; \s0. \P s0\ f \\v. Q v s0 \\ \ \P\,\R\ f \G\,\Q\" - by (fastforce simp: rely_def validI_def valid_def mres_def no_trace_prefix_closed dest: no_trace_emp - elim: image_eqI[rotated]) + by (clarsimp simp: validI_valid_no_trace_eq) lemma env_steps_twp[wp]: @@ -725,4 +741,21 @@ lemma repeat_prefix_closed[intro!]: apply (auto intro: prefix_closed_bind) done +lemma rely_cond_True[simp]: + "rely_cond \\ s0 tr = True" + by (clarsimp simp: rely_cond_def) + +lemma guar_cond_True[simp]: + "guar_cond \\ s0 tr = True" + by (clarsimp simp: guar_cond_def) + +lemma validI_valid_wp: + "\\P\,\\\\ f \G\,\\rv _ s. Q rv s\\ + \ \P s0\ f \Q\" + by (auto simp: rely_def validI_def valid_def mres_def) + +lemma validI_triv_valid_eq: + "prefix_closed f \ \P\,\\\\ f \\\\,\\rv _ s. Q rv s\ = (\s0. \\s. P s0 s\ f \Q\)" + by (fastforce simp: rely_def validI_def valid_def mres_def image_def) + end \ No newline at end of file