theory JBC_Expressiveness imports JBC_VCG_Completeness begin consts Expressiveness::"('a \ (('b \ 'c) \ 'b \ 'c) set) \ 'd \ 'd \ ('d list \ 'd) \ ('d \ 'd \ 'd) \ ('a \ 'b \ 'c \ 'd \ bool) \ ('a \ 'b list) \ ('a \ 'b) \ ('a \ 'b \ 'd) \ ('a \ 'b \ 'b ~~> 'd) \ ('a \ bool) \ ('a \ 'd) \ ('a \ 'b \ 'b \ 'd \ 'd) \ ('a \ 'b \ 'd) \ bool" defs Expressiveness_def [simp]: "Expressiveness \ exprSL" lemma succsTyF_wpFcorrect: assumes wf_Pi: "wf \" assumes p'_B_succsTyF: "(p',B) \ set (succsTyF \ p)" assumes p_B: "\,(p,\,e) \ B" assumes p_p'_effS: "((p,\,e),(p',\',e')) \ effS \" assumes p_wpF: "\,(p,\,e) \ wpF \ p p' Q" shows "\,(p',\',e') \ Q" (*<*) proof - obtain s where s_def: "s = (p,\,e)" by fastsimp obtain s' where s'_def: "s' = (p',\',e')" by fastsimp from p'_B_succsTyF p_B s_def have s_inv_Ty: "\,s \ inv_Ty \ p" apply - apply (simp add: upg_def succsTyF_def split_def split del: option.split_asm) apply (erule imageE) apply simp done from p'_B_succsTyF p_B s_def have s_inv_ExTys: "\,s \ inv_ExTys \ p" apply - apply (simp add: upg_def succsTyF_def succsExTysF_def split_def split del: option.split_asm) apply (erule imageE)+ apply simp done from p'_B_succsTyF p_B s_def have s_inv_FrNr: "\,s \ inv_FrNr \ p" apply - apply (simp add: upg_def succsTyF_def succsExTysF_def succsFrNrF_def split_def split del: option.split_asm) apply (erule imageE)+ apply simp done from p'_B_succsTyF p_B s_def have s_inv_Pos: "\,s \ inv_Pos \ p" apply - apply (simp add: upg_def addPos_def succsTyF_def succsExTysF_def succsFrNrF_def succsF_def split del: option.split_asm) apply (erule disjE) apply (erule imageE)+ apply (simp add: split_def inv_Pos_def) apply (erule imageE)+ apply (simp add: split_def inv_Pos_def) done from p'_B_succsTyF p_B s_def obtain B' where p'_B'_succsF: "(p',B') \ set (succsF \ p)" and s_B': "\,s \ B'" apply - apply (simp add: upg_def addPos_def succsTyF_def succsExTysF_def succsFrNrF_def split del: option.split_asm) apply (erule imageE)+ apply (simp add: split_def) apply fastsimp done from wf_Pi s_def s'_def s_inv_Pos s_inv_Ty s_inv_ExTys p'_B'_succsF s_B' p_p'_effS have evalE_wpF: "evalE \ (p, \, e) (wpF \ p p' Q) = evalE \ (p',\',e') Q" apply - apply (subgoal_tac "\ I. evalE \ (p, \, e\lv:= I\) (wpF \ p p' Q) = evalE \ (p',\',e'\lv:= I\) Q") prefer 2 apply (rule_tac s="s" and s'="s'" in effS_wpF) apply (simp)+ apply (erule_tac x="lv e" in allE) apply (subgoal_tac "e\lv:= (lv e)\ = e") prefer 2 apply simp apply (simp only:) apply (frule effS_lv_inv) apply (subgoal_tac "e'\lv:= (lv e')\ = e'") prefer 2 apply simp apply (simp only:) done from p_wpF evalE_wpF show ?thesis by simp qed (*>*) constdefs finals::"jbc_prog \ pos set" "finals \ \ {p. p \ set (domC \) \ \ (\ p' B. (p',B) \ set (succsTyF \ p))}" constdefs specF:: "jbc_prog \ pos \ expr option" "specF \ p \ (if p=ipc \ then Some (initF \) else (if (p \ finals \) then Some (aF \ p) else None))" lemma specFpos: "\ \ p. p \ {ipc \}\finals \ = (specF \ p \ None)" (*<*) apply (rule allI)+ apply (rule iffI) apply simp apply (erule disjE) apply (simp add: specF_def) apply (simp add: specF_def) apply (rule classical) apply (simp add: specF_def) done (*>*) lemma wf_ipc_succsF: "wf \ \ p \ set (domC \) \ ipc \ \ set (map fst (succsF \ p))" (*<*) apply (simp add: in_set_conv_decomp) apply (erule exE)+ apply (simp add: wf_def checkPos_split split add: split_if_asm) apply (rule classical) apply (simp add: succsF_def) apply (erule imageE) apply (simp add: addPos_append addPos_def) apply (erule disjE) apply (erule imageE) apply (simp add: in_set_conv_decomp) apply (erule exE)+ apply (simp add: split_def) apply (erule imageE) apply (simp add: in_set_conv_decomp) apply (erule exE)+ apply (simp add: split_def) done (*>*) lemma wf_ipc_succsTyF: "wf \ \ p \ set (domC \) \ ipc \ \ set (map fst (succsTyF \ p))" (*<*) apply (drule wf_ipc_succsF) apply assumption apply (rule classical) apply simp apply (erule imageE) apply (simp add: succsTyF_def upg_def) apply (erule imageE) apply (simp add: succsExTysF_def upg_def) apply (erule imageE) apply (simp add: succsFrNrF_def upg_def) apply (erule imageE) apply (simp add: split_def) done (*>*) lemma ExpressivenessIns: "Expressiveness effS TT FF And Imp valid domC ipc anF succsTyF wf initF wpF specF" (*<*) apply (simp only: Expressiveness_def) apply (rule VCG_Completeness.exprSL.intro) --{* SafetyLogic *} apply (rule SafetyLogicIns) --{* CFG *} apply (rule CFG_axioms_succsTyF) --{* AbsSem *} apply (cut_tac AbsSemIns) apply (simp only: AbsSem_def) --{* completeVCG *} apply (cut_tac completeVCG_Ins_Ty) apply (simp add: completeVCG_def) --{* Expressiveness axioms *} apply (simp only: exprSL_axioms_def) apply (rule conjI) apply (rule allI | rule impI)+ apply (subgoal_tac "\ \ e. m = (\,e)") prefer 2 apply fastsimp apply (subgoal_tac "\ \' e'. m' = (\',e')") prefer 2 apply fastsimp apply (erule exE)+ apply (simp only: ) apply (rule_tac B="B" and \'="\'" and e'="e'" in succsTyF_wpFcorrect) apply simp apply simp apply simp apply simp apply simp --{* specFpos *} apply (rule conjI) apply (cut_tac specFpos) apply (simp add: finals_def) --{* specFipc *} apply (rule conjI) apply (simp add: specF_def) --{* succsFipc *} apply (rule allI | rule impI)+ apply (case_tac "p \ set (domC \)") apply (rule wf_ipc_succsTyF) apply simp apply simp apply (rule classical) apply simp apply (erule imageE) apply (subgoal_tac "\ p' B. x = (p',B)") prefer 2 apply fastsimp apply (erule exE)+ apply (simp add: succsTyF_domC) done (*>*) end