More general rules for assignment!
This commit is contained in:
parent
c272e56c4e
commit
0167124a74
|
@ -99,7 +99,7 @@ lemma conj_prog_hoare:
|
|||
section \<open>Hoare Logic for SKIP\<close>
|
||||
|
||||
lemma skip_prog_hoare[hoare_sp_rules, hoare_wp_rules]:
|
||||
"\<lbrace>p\<rbrace>SKIP\<lbrace>p\<rbrace>\<^sub>P"
|
||||
"\<lbrace>P\<rbrace>SKIP\<lbrace>P\<rbrace>\<^sub>P"
|
||||
by (simp add: prog_rep_eq hoare_des)
|
||||
|
||||
lemma skip_prog_hoare_intro:
|
||||
|
@ -113,17 +113,50 @@ lemma assigns_prog_hoare_backward_intro:
|
|||
shows "\<lbrace>p\<rbrace>\<langle>\<sigma>\<rangle>\<^sub>p\<lbrace>q\<rbrace>\<^sub>P"
|
||||
using assms
|
||||
by (simp add: prog_rep_eq hoare_des)
|
||||
|
||||
|
||||
lemma assigns_prog_hoare_backward[hoare_wp_rules]:
|
||||
"\<lbrace>\<sigma> \<dagger> p\<rbrace>\<langle>\<sigma>\<rangle>\<^sub>p\<lbrace>p\<rbrace>\<^sub>P"
|
||||
"\<lbrace>\<sigma> \<dagger> P\<rbrace>\<langle>\<sigma>\<rangle>\<^sub>p\<lbrace>P\<rbrace>\<^sub>P"
|
||||
by (simp add: prog_rep_eq hoare_des)
|
||||
|
||||
lemma "((image (\<lambda>st. (t, t)) UNIV) \<inter> {(st, _). t = \<sigma> st }) \<subseteq>
|
||||
(image (\<lambda>st. (st, t)) UNIV)"
|
||||
by auto
|
||||
|
||||
lemma "((image (\<lambda>st. (s\<^sub>0, t)) P) \<inter> {(_, tt). t = \<sigma> s\<^sub>0 }) \<subseteq>
|
||||
(image (\<lambda>st. (s\<^sub>0, \<sigma> s\<^sub>0)) P)"
|
||||
by auto
|
||||
|
||||
|
||||
lemma
|
||||
"(s\<^sub>0, t) \<in> P \<and> t = \<sigma> s\<^sub>0 \<longrightarrow> (s\<^sub>0, \<sigma> s\<^sub>0) \<in> P"
|
||||
by auto
|
||||
|
||||
lemma
|
||||
"(\<forall>s\<^sub>0 t. (s\<^sub>0, t) \<in> P \<and> t = \<sigma> s\<^sub>0) \<longrightarrow> (\<forall>s\<^sub>0. \<exists>s. (s\<^sub>0, \<sigma> s) \<in> P)"
|
||||
by auto
|
||||
|
||||
lemma
|
||||
"(\<sigma> s\<^sub>0, t) \<in> P \<and> t = \<sigma> s\<^sub>0 \<longrightarrow> (t, t) \<in> P"
|
||||
by auto
|
||||
|
||||
|
||||
lemma
|
||||
"\<lbrace>P\<lbrakk>e/x\<rbrakk>\<rbrace>x :== e\<lbrace>P\<rbrace>\<^sub>P"
|
||||
apply (simp add: prog_rep_eq )
|
||||
apply rel_simp
|
||||
done
|
||||
lemma assigns_prog_floyd[hoare_sp_rules]:
|
||||
assumes "vwb_lens x"
|
||||
shows \<open>\<lbrace>p\<rbrace>x :== e\<lbrace>\<^bold>\<exists>v \<bullet> p\<lbrakk>\<guillemotleft>v\<guillemotright>/x\<rbrakk> \<and> &x =\<^sub>u e\<lbrakk>\<guillemotleft>v\<guillemotright>/x\<rbrakk>\<rbrace>\<^sub>P\<close>
|
||||
shows \<open>\<lbrace>P\<rbrace>x :== e\<lbrace>\<^bold>\<exists>v \<bullet> P\<lbrakk>\<guillemotleft>v\<guillemotright>/x\<rbrakk> \<and> &x =\<^sub>u e\<lbrakk>\<guillemotleft>v\<guillemotright>/x\<rbrakk>\<rbrace>\<^sub>P\<close>
|
||||
using assms
|
||||
by (simp add: assms prog_rep_eq hoare_des)
|
||||
|
||||
lemma
|
||||
shows \<open>\<lbrace>P\<rbrace>\<langle>\<sigma>\<rangle>\<^sub>p\<lbrace>\<^bold>\<exists>v \<bullet> ((subst_upd \<sigma> (1\<^sub>L) \<guillemotleft>v\<guillemotright>) \<dagger> P)\<rbrace>\<^sub>P\<close>
|
||||
apply (simp add: prog_rep_eq )
|
||||
apply rel_simp
|
||||
done
|
||||
|
||||
section \<open>Hoare Logic for Sequential Composition\<close>
|
||||
|
||||
lemma seq_prog_hoare_invariant:
|
||||
|
|
Loading…
Reference in New Issue