(* Title: HOL/HOLCF/IOA/RefCorrectness.thy Author: Olaf Müller *)
section‹Correctness of Refinement Mappings in HOLCF/IOA›
theory RefCorrectness imports RefMappings begin
definition corresp_exC :: "('a, 's2) ioa ==> ('s1 ==> 's2) ==> ('a, 's1) pairs → ('s1 ==> ('a, 's2) pairs)" where"corresp_exC A f = (fix ⋅ (LAM h ex. (λs. case ex of nil ==> nil | x ## xs ==> flift1 (λpr. (SOME cex. move A cex (f s) (fst pr) (f (snd pr))) @@ ((h ⋅ xs) (snd pr))) ⋅ x)))"
definition corresp_ex :: "('a, 's2) ioa ==> ('s1 ==> 's2) ==> ('a, 's1) execution ==> ('a, 's2) execution" where"corresp_ex A f ex = (f (fst ex), (corresp_exC A f ⋅ (snd ex)) (fst ex))"
definition is_fair_ref_map :: "('s1 ==> 's2) ==> ('a, 's1) ioa ==> ('a, 's2) ioa ==> bool" where"is_fair_ref_map f C A ⟷ is_ref_map f C A ∧ (∀ex ∈ executions C. fair_ex C ex ⟶ fair_ex A (corresp_ex A f ex))"
text‹ Axioms for fair trace inclusion proof support, not for the correctness proof of refinement mappings! Note: Everything is superseded by 🍋‹LiveIOA.thy›. ›
axiomatizationwhere
corresp_laststate: "Finite ex ==> laststate (corresp_ex A f (s, ex)) = f (laststate (s, ex))"
axiomatizationwhere
corresp_Finite: "Finite (snd (corresp_ex A f (s, ex))) = Finite ex"
axiomatizationwhere
FromAtoC: "fin_often (λx. P (snd x)) (snd (corresp_ex A f (s, ex))) ==> fin_often (λy. P (f (snd y))) ex"
axiomatizationwhere
FromCtoA: "inf_often (λy. P (fst y)) ex ==> inf_often (λx. P (fst x)) (snd (corresp_ex A f (s,ex)))"
text‹ Proof by case on ‹inf W›in ex: If so, ok. If not, only ‹fin W› in ex, ie. there is an index ‹i›from which on no ‹W› in ex. But ‹W› inf enabled, ie at least once after ‹i›‹W› is enabled. As ‹W› does not occur after ‹i› and ‹W› is ‹enabling_persistent›,‹W› keeps enabled until infinity, ie. indefinitely ›
axiomatizationwhere
persistent: "inf_often (λx. Enabled A W (snd x)) ex ==> en_persistent A W ==> inf_often (λx. fst x ∈ W) ex ∨ fin_often (λx. ¬ Enabled A W (snd x)) ex"
axiomatizationwhere
infpostcond: "is_exec_frag A (s,ex) ==> inf_often (λx. fst x ∈ W) ex ==> inf_often (λx. set_was_enabled A W (snd x)) ex"
subsection‹‹corresp_ex›\›
lemma corresp_exC_unfold: "corresp_exC A f = (LAM ex. (λs. case ex of nil ==> nil | x ## xs ==> (flift1 (λpr. (SOME cex. move A cex (f s) (fst pr) (f (snd pr))) @@ ((corresp_exC A f ⋅ xs) (snd pr))) ⋅ x)))" apply (rule trans) apply (rule fix_eq2) apply (simp only: corresp_exC_def) apply (rule beta_cfun) apply (simp add: flift1_def) done
lemma corresp_exC_UU: "(corresp_exC A f ⋅ UU) s = UU" apply (subst corresp_exC_unfold) apply simp done
lemma corresp_exC_nil: "(corresp_exC A f ⋅ nil) s = nil" apply (subst corresp_exC_unfold) apply simp done
lemma corresp_exC_cons: "(corresp_exC A f ⋅ (at ↝ xs)) s = (SOME cex. move A cex (f s) (fst at) (f (snd at))) @@ ((corresp_exC A f ⋅ xs) (snd at))" apply (rule trans) apply (subst corresp_exC_unfold) apply (simp add: Consq_def flift1_def) apply simp done
lemma move_is_move: "is_ref_map f C A ==> reachable C s ==> (s, a, t) ∈ trans_of C ==> move A (SOME x. move A x (f s) a (f t)) (f s) a (f t)" apply (unfold is_ref_map_def) apply (subgoal_tac "∃ex. move A ex (f s) a (f t) ") prefer 2 apply simp apply (erule exE) apply (rule someI) apply assumption done
lemma move_subprop1: "is_ref_map f C A ==> reachable C s ==> (s, a, t) ∈ trans_of C ==> is_exec_frag A (f s, SOME x. move A x (f s) a (f t))" apply (cut_tac move_is_move) defer apply assumption+ apply (simp add: move_def) done
lemma move_subprop2: "is_ref_map f C A ==> reachable C s ==> (s, a, t) ∈ trans_of C ==> Finite ((SOME x. move A x (f s) a (f t)))" apply (cut_tac move_is_move) defer apply assumption+ apply (simp add: move_def) done
lemma move_subprop3: "is_ref_map f C A ==> reachable C s ==> (s, a, t) ∈ trans_of C ==> laststate (f s, SOME x. move A x (f s) a (f t)) = (f t)" apply (cut_tac move_is_move) defer apply assumption+ apply (simp add: move_def) done
lemma move_subprop4: "is_ref_map f C A ==> reachable C s ==> (s, a, t) ∈ trans_of C ==> mk_trace A ⋅ ((SOME x. move A x (f s) a (f t))) = (if a ∈ ext A then a ↝ nil else nil)" apply (cut_tac move_is_move) defer apply assumption+ apply (simp add: move_def) done
subsection‹TRACE INCLUSION Part 1: Traces coincide›
subsubsection ‹Lemmata for ‹<==›\›
text‹Lemma 1.1: Distribution of ‹mk_trace›and ‹@@›\›
lemma mk_traceConc: "mk_trace C ⋅ (ex1 @@ ex2) = (mk_trace C ⋅ ex1) @@ (mk_trace C ⋅ ex2)" by (simp add: mk_trace_def filter_act_def MapConc)
text‹Lemma 1 : Traces coincide›
lemma lemma_1: "is_ref_map f C A ==> ext C = ext A ==> ∀s. reachable C s ∧ is_exec_frag C (s, xs) ⟶ mk_trace C ⋅ xs = mk_trace A ⋅ (snd (corresp_ex A f (s, xs)))"
supply if_split [split del] apply (unfold corresp_ex_def) apply (pair_induct xs simp: is_exec_frag_def) text‹cons case› apply (auto simp add: mk_traceConc) apply (frule reachable.reachable_n) apply assumption apply (auto simp add: move_subprop4 split: if_split) done
subsection‹TRACE INCLUSION Part 2: corresp_ex is execution›
lemma lemma_2: "is_ref_map f C A ==> ∀s. reachable C s ∧ is_exec_frag C (s, xs) ⟶ is_exec_frag A (corresp_ex A f (s, xs))" apply (unfold corresp_ex_def)
lemma fininf: "(~inf_often P s) = fin_often P s" by (auto simp: fin_often_def)
lemma WF_alt: "is_wfair A W (s, ex) = (fin_often (λx. ¬ Enabled A W (snd x)) ex ⟶ inf_often (λx. fst x ∈ W) ex)" by (auto simp add: is_wfair_def fin_often_def)
lemma WF_persistent: "is_wfair A W (s, ex) ==> inf_often (λx. Enabled A W (snd x)) ex ==> en_persistent A W ==> inf_often (λx. fst x ∈ W) ex" apply (drule persistent) apply assumption apply (simp add: WF_alt) apply auto done
lemma fair_trace_inclusion: assumes"is_ref_map f C A" and"ext C = ext A" and"∧ex. ex ∈ executions C ==> fair_ex C ex ==> fair_ex A (corresp_ex A f ex)" shows"fairtraces C ⊆ fairtraces A" apply (insert assms) apply (simp add: fairtraces_def fairexecutions_def) apply auto apply (rule_tac x = "corresp_ex A f ex"in exI) apply auto
lemma fair_trace_inclusion2: "inp C = inp A ==> out C = out A ==> is_fair_ref_map f C A ==> fair_implements C A" apply (simp add: is_fair_ref_map_def fair_implements_def fairtraces_def fairexecutions_def) apply auto apply (rule_tac x = "corresp_ex A f ex"in exI) apply auto
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.