Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T
theory CSP_T_op_alpha_par(*-------------------------------------------* | CSP-Prover on Isabelle2004 | | April 2005 | | June 2005 (modified) | | September 2005 (modified) | | | | CSP-Prover on Isabelle2005 | | October 2005 (modified) | | April 2006 (modified) | | March 2007 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_T_op_alpha_par imports CSP_T_traces begin (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite (notick | t = <>) *) (* *) (* disj_not1: (~ P | Q) = (P --> Q) *) declare disj_not1 [simp del] (********************************************************* Preparation (traces operated by par and hide) *********************************************************) (*** par rest ***) (*** if ***) lemma par_tr_rest_tr_if_all: "sett(u) <= insert Tick (Ev ` (X Un Y)) --> u : u rest-tr X |[X Int Y]|tr u rest-tr Y" apply (induct_tac u rule: induct_trace) apply (simp_all) apply (simp add: par_tr_head) apply (case_tac "a : X") apply (case_tac "a : Y") apply (auto) done lemma par_tr_rest_tr_if: "sett(u) <= insert Tick (Ev ` (X Un Y)) ==> u : u rest-tr X |[X Int Y]|tr u rest-tr Y" by (simp add: par_tr_rest_tr_if_all) (*** only if ***) lemma par_tr_rest_tr_only_if_all: "ALL s t. (sett s <= insert Tick (Ev ` X) & sett t <= insert Tick (Ev ` Y) & u : s |[X Int Y]|tr t) --> (s = u rest-tr X & t = u rest-tr Y & sett(u) <= insert Tick (Ev ` (X Un Y)))" apply (induct_tac u rule: induct_trace) apply (simp_all) apply (intro allI impI) apply (simp add: par_tr_head) apply (elim conjE exE) (* sync *) apply (erule disjE) apply (elim conjE exE) apply (drule_tac x="s'" in spec) apply (drule_tac x="t'" in spec) apply (simp) (* left *) apply (erule disjE) apply (elim conjE exE) apply (drule_tac x="s'" in spec) apply (drule_tac x="t" in spec) apply (simp) apply (case_tac "a : X") apply (simp) apply (fast) (* right *) apply (elim conjE exE) apply (drule_tac x="sa" in spec) apply (drule_tac x="t'" in spec) apply (simp) apply (case_tac "a : Y") apply (simp) apply (fast) done (*** par rest ***) lemma par_tr_rest_tr: "[| sett s <= insert Tick (Ev ` X) ; sett t <= insert Tick (Ev ` Y) |] ==> u : s |[X Int Y]|tr t = (s = u rest-tr X & t = u rest-tr Y & sett(u) <= insert Tick (Ev ` (X Un Y)))" apply (rule iffI) apply (insert par_tr_rest_tr_only_if_all[of X Y u]) apply (drule_tac x="s" in spec) apply (drule_tac x="t" in spec) apply (simp) apply (simp add: par_tr_rest_tr_if) done (********************************************************* Alphabetized Parallel eval *********************************************************) (*** Par and SKIP ***) lemma in_traces_Parallel_SKIP: "(u :t traces (P |[X]| SKIP) M) = (u :t traces P M & sett(u) Int (Ev ` X) = {})" apply (simp add: in_traces) apply (rule iffI) (* => *) apply (elim conjE exE) apply (erule disjE) (* t = <> *) apply (simp add: par_tr_nil) apply (elim conjE, simp) (* t = [Tick]t *) apply (simp add: par_tr_Tick) apply (elim conjE, simp) (* <= *) apply (case_tac "Tick ~: sett u") (* t = <> *) apply (rule_tac x="u" in exI) apply (rule_tac x="<>" in exI) apply (simp add: par_tr_nil) apply (erule conjE) apply (simp) (* t = <Tick> *) apply (rule_tac x="u" in exI) apply (rule_tac x="<Tick>" in exI) apply (simp add: par_tr_Tick) done (*** complement ***) lemma in_traces_Parallel_SKIP_comp: "(u :t traces (P |[- X]| SKIP) M) = (u :t traces P M & sett u <= insert Tick (Ev ` X))" apply (simp add: in_traces_Parallel_SKIP) apply (auto) apply (insert event_Tick_or_Ev) apply (drule_tac x="x" in spec) apply (auto) done (*** Alpha_parallel_evalT ***) lemma in_traces_Alpha_parallel: "(u :t traces (P |[X1,X2]| Q) M) = ((u rest-tr X1) :t traces P M & (u rest-tr X2) :t traces Q M & sett(u) <= insert Tick (Ev ` (X1 Un X2)))" apply (simp add: Alpha_parallel_def) apply (simp add: in_traces_Parallel[of _ _ "X1 Int X2"]) apply (simp add: in_traces_Parallel_SKIP_comp) apply (rule iffI) (* => *) apply (elim conjE exE) apply (simp add: par_tr_rest_tr) (* <= *) apply (rule_tac x="u rest-tr X1" in exI) apply (rule_tac x="u rest-tr X2" in exI) apply (simp add: par_tr_rest_tr_if) done (*** Semantics for alphabetized parallel on T ***) lemma traces_Alpha_parallel: "traces (P |[X1,X2]| Q) M = {u. ((u rest-tr X1) :t traces P M & (u rest-tr X2) :t traces Q M & sett(u) <= insert Tick (Ev ` (X1 Un X2)))}t" apply (simp add: in_traces_Alpha_parallel[THEN sym]) done (****************** to add it again ******************) declare disj_not1 [simp] end
lemma par_tr_rest_tr_if_all:
sett u ⊆ insert Tick (Ev ` (X ∪ Y)) --> u ∈ u rest-tr X |[X ∩ Y]|tr u rest-tr Y
lemma par_tr_rest_tr_if:
sett u ⊆ insert Tick (Ev ` (X ∪ Y)) ==> u ∈ u rest-tr X |[X ∩ Y]|tr u rest-tr Y
lemma par_tr_rest_tr_only_if_all:
∀s t. sett s ⊆ insert Tick (Ev ` X) ∧ sett t ⊆ insert Tick (Ev ` Y) ∧ u ∈ s |[X ∩ Y]|tr t --> s = u rest-tr X ∧ t = u rest-tr Y ∧ sett u ⊆ insert Tick (Ev ` (X ∪ Y))
lemma par_tr_rest_tr:
[| sett s ⊆ insert Tick (Ev ` X); sett t ⊆ insert Tick (Ev ` Y) |] ==> (u ∈ s |[X ∩ Y]|tr t) = (s = u rest-tr X ∧ t = u rest-tr Y ∧ sett u ⊆ insert Tick (Ev ` (X ∪ Y)))
lemma in_traces_Parallel_SKIP:
(u :t traces (P |[X]| SKIP) M) = (u :t traces P M ∧ sett u ∩ Ev ` X = {})
lemma in_traces_Parallel_SKIP_comp:
(u :t traces (P |[- X]| SKIP) M) = (u :t traces P M ∧ sett u ⊆ insert Tick (Ev ` X))
lemma in_traces_Alpha_parallel:
(u :t traces (P |[X1.0,X2.0]| Q) M) = (u rest-tr X1.0 :t traces P M ∧ u rest-tr X2.0 :t traces Q M ∧ sett u ⊆ insert Tick (Ev ` (X1.0 ∪ X2.0)))
lemma traces_Alpha_parallel:
traces (P |[X1.0,X2.0]| Q) M = {u. u rest-tr X1.0 :t traces P M ∧ u rest-tr X2.0 :t traces Q M ∧ sett u ⊆ insert Tick (Ev ` (X1.0 ∪ X2.0))}t