Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory CSP_law_step1 = CSP_proc:(*-------------------------------------------* | CSP-Prover | | December 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_law_step1 = CSP_proc: (* The following simplification is sometimes unexpected. *) (* *) (* not_None_eq: (x ~= None) = (EX y. x = Some y) *) declare not_None_eq [simp del] (***************************************************************** 1. step laws 2. 3. 4. *****************************************************************) consts Ext_choice_step :: "'a set => 'a set => ('a => ('n,'a) proc) => ('a => ('n,'a) proc) => ('n,'a) proc" Parallel_step :: "'a set => 'a set => 'a set => ('a => ('n,'a) proc) => ('a => ('n,'a) proc) => ('n,'a) proc" Hiding_step :: "'a set => 'a set => ('a => ('n,'a) proc) => ('n,'a) proc" defs Ext_choice_step_def : "Ext_choice_step X Y Pf Qf == ? x:(X Un Y) -> (IF (x : X & x : Y) THEN Pf x |~| Qf x ELSE IF (x : X) THEN Pf x ELSE Qf x)" defs Parallel_step_def : "Parallel_step X Y Z Pf Qf == ? x:((X Int Y Int Z) Un (Y - X) Un (Z - X)) -> IF (x : X) THEN (Pf x |[X]| Qf x) ELSE IF (x : Y & x : Z) THEN ((Pf x |[X]| ? x:Z -> Qf x) |~| (? x:Y -> Pf x |[X]| Qf x)) ELSE IF (x : Y) THEN (Pf x |[X]| ? x:Z -> Qf x) ELSE (? x:Y -> Pf x |[X]| Qf x)" defs Hiding_step_def : "Hiding_step X Y Pf == IF (Y Int X = {}) THEN (? x:Y -> (Pf x -- X)) ELSE ((? x:(Y-X) -> (Pf x -- X)) [> (! x:(Y Int X) .. (Pf x -- X)))" (********************************************************* stop expansion *********************************************************) lemma domSF_STOP_step: "[[STOP]]SF ev = [[? x:{} -> DIV]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: evalT_def) apply (simp add: evalF_def) done (*------------------* | csp law | *------------------*) lemma csp_STOP_step: "LET:fp df IN STOP =F LET:fp df IN ? x:{} -> DIV" apply (induct fp) by (simp_all add: eqF_def domSF_STOP_step) (********************************************************* Act_prefix expansion *********************************************************) lemma domSF_Act_prefix_step: "[[a -> P]]SF ev = [[? x:{a} -> P]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: evalT_def) apply (simp add: evalF_def) done (*------------------* | csp law | *------------------*) lemma csp_Act_prefix_step: "LET:fp df IN a -> P =F LET:fp df IN ? x:{a} -> P" apply (induct fp) by (simp_all add: eqF_def domSF_Act_prefix_step) (********************************************************* Ext choice expansion *********************************************************) (*** domT ***) lemma domT_Ext_choice_step: "[[? :X -> Pf [+] ? :Y -> Qf]]T ev = [[Ext_choice_step X Y Pf Qf]]T ev" apply (simp add: Ext_choice_step_def) apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Ext_choice_mem) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="a" in exI) apply (rule_tac x="s" in exI) apply (simp add: Conditional_mem Int_choice_mem) apply (rule_tac x="a" in exI) apply (rule_tac x="s" in exI) apply (simp add: Conditional_mem Int_choice_mem) (* <= *) apply (rule) apply (simp add: Ext_choice_mem) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) apply (simp_all add: Conditional_mem) apply (case_tac "a : Y") apply (simp_all add: Conditional_mem Int_choice_mem) apply (fast) apply (fast) apply (case_tac "a : X") apply (simp_all add: Conditional_mem Int_choice_mem) apply (fast) apply (fast) done (*** domF ***) lemma domF_Ext_choice_step: "[[? :X -> Pf [+] ? :Y -> Qf]]F ev = [[Ext_choice_step X Y Pf Qf]]F ev" apply (simp add: Ext_choice_step_def) apply (rule eq_iffI) (* => *) (* 1 *) apply (rule) apply (simp add: Ext_choice_mem) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) apply (simp_all) apply (simp add: memF_IntF) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 2 *) apply (simp add: memF_UnF) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) apply (rule_tac x="a" in exI) apply (rule_tac x="sa" in exI) apply (simp add: Conditional_mem Int_choice_mem) apply (rule_tac x="a" in exI) apply (rule_tac x="sa" in exI) apply (simp add: Conditional_mem Int_choice_mem) (* 3 *) apply (simp add: memT_UnT) apply (simp add: Ext_pre_choice_mem) (* <= *) (* 1 *) apply (rule) apply (simp add: Ext_choice_mem) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) apply (simp add: memF_IntF) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 2 *) apply (simp add: memF_UnF) apply (simp add: Ext_pre_choice_mem) apply (case_tac "a : Y") apply (simp add: Conditional_mem Int_choice_mem) apply (fast) apply (simp add: Conditional_mem Int_choice_mem) apply (fast) apply (case_tac "a : X") apply (simp add: Conditional_mem Int_choice_mem) apply (simp add: memF_UnF Ext_pre_choice_mem) apply (fast) apply (simp add: Conditional_mem Int_choice_mem) apply (simp add: memF_UnF Ext_pre_choice_mem) apply (fast) done (*** domSF ***) lemma domSF_Ext_choice_step: "[[? :X -> Pf [+] ? :Y -> Qf]]SF ev = [[Ext_choice_step X Y Pf Qf]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Ext_choice_step) apply (simp add: domF_Ext_choice_step) done (*------------------* | csp law | *------------------*) lemma csp_Ext_choice_step: "LET:fp df IN (? :X -> Pf) [+] (? :Y -> Qf) =F LET:fp df IN Ext_choice_step X Y Pf Qf" apply (induct fp) by (simp_all add: eqF_def domSF_Ext_choice_step) (********************************************************* Parallel expansion *********************************************************) (*** domT ***) lemma domT_Parallel_step: "[[(? :Y -> Pf) |[X]| (? :Z -> Qf)]]T ev = [[Parallel_step X Y Z Pf Qf]]T ev" apply (simp add: Parallel_step_def) apply (rule eq_iffI) (* => *) apply (rule) apply (insert trace_nil_or_Tick_or_Ev) apply (drule_tac x="t" in spec) apply (simp add: not_None_T) apply (elim disjE conjE exE) (* []t *) apply (simp) (* [Tick]t *) apply (simp add: Parallel_mem Ext_pre_choice_mem) (* [Ev .]t *) apply (simp add: Parallel_mem) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) (* 1 *) apply (simp) (* 2 *) apply (simp add: par_tr_head) apply (elim conjE exE) apply (simp add: not_None_T) apply (rule_tac x="aa" in exI) apply (rule_tac x="s" in exI) apply (simp) apply (simp add: Conditional_mem) apply (case_tac "aa : Y") apply (simp add: Int_choice_mem) apply (simp add: Parallel_mem) apply (rule disjI2) apply (rule_tac x="[]t" in exI) apply (rule_tac x="sb" in exI) apply (simp) (* aa ~: Y *) apply (simp add: Parallel_mem) apply (rule_tac x="[]t" in exI) apply (rule_tac x="sb" in exI) apply (simp) (* 3 *) apply (simp add: par_tr_head) apply (elim conjE exE) apply (simp add: not_None_T) apply (rule_tac x="aa" in exI) apply (rule_tac x="s" in exI) apply (simp) apply (simp add: Conditional_mem) apply (case_tac "aa : Z") apply (simp add: Int_choice_mem) apply (simp add: Parallel_mem) apply (rule disjI1) apply (rule_tac x="sb" in exI) apply (rule_tac x="[]t" in exI) apply (simp) (* aa ~: Y *) apply (simp add: Parallel_mem) apply (rule_tac x="sb" in exI) apply (rule_tac x="[]t" in exI) apply (simp) (* 4 *) apply (simp add: par_tr_head) apply (elim disjE conjE exE) (* 4-1 *) apply (simp add: not_None_T) apply (rule_tac x="ab" in exI) apply (rule_tac x="s" in exI) apply (simp) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (rule_tac x="sb" in exI) apply (rule_tac x="sc" in exI) apply (simp) (* 4-2 *) apply (simp add: not_None_T) apply (rule_tac x="aa" in exI) apply (rule_tac x="s" in exI) apply (simp) apply (simp add: Conditional_mem) apply (case_tac "aa : Z") apply (simp add: Int_choice_mem) apply (simp add: Parallel_mem) apply (rule disjI1) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev ab]t @t sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* aa ~: Z *) apply (simp add: Parallel_mem) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev ab]t @t sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 4-3 *) apply (simp add: not_None_T) apply (rule_tac x="ab" in exI) apply (rule_tac x="s" in exI) apply (simp) apply (simp add: Conditional_mem) apply (case_tac "ab : Y") apply (simp add: Int_choice_mem) apply (simp add: Parallel_mem) apply (rule disjI2) apply (rule_tac x="[Ev aa]t @t sb" in exI) apply (rule_tac x="sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* ab ~: Y *) apply (simp add: Parallel_mem) apply (rule_tac x="[Ev aa]t @t sb" in exI) apply (rule_tac x="sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* <= *) apply (rule)+ apply (drule_tac x="t" in spec) apply (simp add: not_None_T) apply (elim disjE conjE exE) (* []t *) apply (simp) (* [Tick]t *) apply (simp add: Parallel_mem Ext_pre_choice_mem) (* [Ev .]t *) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) (* 1 *) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="[Ev aa]t @t sb" in exI) apply (rule_tac x="[Ev aa]t @t ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 2 *) apply (simp add: not_None_T) apply (simp add: Conditional_mem) apply (case_tac "aa : Z") apply (simp add: Int_choice_mem) apply (erule disjE) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="[Ev aa]t @t sb" in exI) apply (rule_tac x="ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* *) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev aa]t @t ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* aa ~: Z" *) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="[Ev aa]t @t sb" in exI) apply (rule_tac x="ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 3 *) apply (simp add: not_None_T) apply (simp add: Conditional_mem) apply (case_tac "aa : Y") apply (simp add: Int_choice_mem) apply (erule disjE) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="[Ev aa]t @t sb" in exI) apply (rule_tac x="ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* *) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev aa]t @t ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* aa ~: Y" *) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (elim conjE exE) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev aa]t @t ta" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) done (*** domF ***) (* set 1 *) lemma domF_Parallel_step_set1: "[| Ya - insert Tick (Ev ` X) = Za - insert Tick (Ev ` X) ; Ev ` Y Int Ya = {}; Ev ` Z Int Za = {} |] ==> Ev ` (X Int Y Int Z) Int (Ya Un Za) = {}" by (auto) (* set 2 *) lemma domF_Parallel_step_set2: "[| Ya - insert Tick (Ev ` X) = Za - insert Tick (Ev ` X) ; Ev ` Y Int Ya = {}; Ev ` Z Int Za = {} |] ==> Ev ` (Y - X) Int (Ya Un Za) = {}" apply (rule equalityI) apply (rule subsetI) apply (simp add: inj_image_diff_dist inj_Ev) apply (simp add: in_Ev_set) apply (elim conjE exE) apply (erule disjE) apply (fast) (* *) apply (simp) apply (case_tac "Ev a : Ya") apply (fast) apply (rotate_tac 1) apply (erule equalityE) apply (rotate_tac -1) apply (erule subsetE) apply (drule_tac x="Ev a" in bspec, fast) apply (simp) apply (fast) done (* set 3 *) lemma domF_Parallel_step_set3: "[| Ya - insert Tick (Ev ` X) = Za - insert Tick (Ev ` X) ; Ev ` Y Int Ya = {}; Ev ` Z Int Za = {} |] ==> Ev ` (Z - X) Int (Ya Un Za) = {}" apply (rule equalityI) apply (rule subsetI) apply (simp add: inj_image_diff_dist inj_Ev) apply (simp add: in_Ev_set) apply (elim conjE exE) apply (erule disjE) apply (simp) apply (case_tac "Ev a : Za") apply (fast) apply (rotate_tac 1) apply (erule equalityE) apply (erule subsetE) apply (drule_tac x="Ev a" in bspec, fast) apply (simp) apply (fast) (* *) apply (simp) done (* set 4 *) lemma domF_Parallel_step_set4: "Ev ` (X Int Y Int Z Un (Y - X) Un (Z - X)) Int Xa = {} ==> Xa = Xa - insert Tick (Ev ` X) Un (Xa Int insert Tick (Ev ` X) - Ev ` Y) Un (Xa - insert Tick (Ev ` X) Un (Xa Int insert Tick (Ev ` X) - Ev ` Z))" by (auto) (* set 5 *) lemma domF_Parallel_step_set5: "Ev ` (X Int Y Int Z Un (Y - X) Un (Z - X)) Int Xa = {} ==> Ev ` Y Int (Xa - insert Tick (Ev ` X) Un (Xa Int insert Tick (Ev ` X) - Ev ` Y)) = {} & Ev ` Z Int (Xa - insert Tick (Ev ` X) Un (Xa Int insert Tick (Ev ` X) - Ev ` Z)) = {}" by (auto) (* => *) lemma domF_Parallel_step_sub: "[[(? :Y -> Pf) |[X]| (? :Z -> Qf)]]F ev <= [[Parallel_step X Y Z Pf Qf]]F ev" apply (rule)+ apply (simp add: Parallel_step_def) apply (simp add: Parallel_mem Ext_pre_choice_mem) apply (elim disjE conjE exE) (* (nil,nil) *) apply (simp add: image_Un Int_Un_distrib2) apply (simp add: domF_Parallel_step_set1 domF_Parallel_step_set2 domF_Parallel_step_set3) (* (nil,Ev) *) apply (simp) apply (insert trace_nil_or_Tick_or_Ev) apply (drule_tac x="s" in spec) apply (simp add: par_tr_not_None) apply (erule disjE, simp) apply (erule disjE, simp) apply (elim conjE exE, simp) apply (simp add: par_tr_head) apply (elim conjE exE, simp) apply (simp add: not_None) apply (rule_tac x="aa" in exI) apply (rule_tac x="sc" in exI) apply (simp add: Conditional_mem) apply (case_tac "aa : Y") apply (simp add: Int_choice_mem) apply (rule disjI2) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[]t" in exI) apply (rule_tac x="sb" in exI) apply (simp add: Ext_pre_choice_mem) (* "aa ~: Y" *) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[]t" in exI) apply (rule_tac x="sb" in exI) apply (simp add: Ext_pre_choice_mem) (* (Ev,nil) *) apply (simp) apply (drule_tac x="s" in spec) apply (simp add: par_tr_not_None) apply (erule disjE, simp) apply (erule disjE, simp) apply (elim conjE exE, simp) apply (simp add: par_tr_head) apply (elim conjE exE, simp) apply (simp add: not_None) apply (rule_tac x="a" in exI) apply (rule_tac x="sc" in exI) apply (simp add: Conditional_mem) apply (case_tac "a : Z") apply (simp add: Int_choice_mem) apply (rule disjI1) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[]t" in exI) apply (simp add: Ext_pre_choice_mem) (* "a ~: Z" *) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[]t" in exI) apply (simp add: Ext_pre_choice_mem) (* (Ev,Ev) *) apply (simp) apply (drule_tac x="s" in spec) apply (simp add: par_tr_not_None) apply (erule disjE, simp) apply (erule disjE, simp) apply (elim conjE exE, simp) apply (simp add: par_tr_head) apply (elim disjE conjE exE, simp) (* sync *) apply (simp add: not_None) apply (rule_tac x="aa" in exI) apply (rule_tac x="sd" in exI) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="sc" in exI) apply (simp) (* left *) apply (simp add: not_None) apply (rule_tac x="a" in exI) apply (rule_tac x="sd" in exI) apply (simp add: Conditional_mem) apply (case_tac "a : Z") apply (simp add: Int_choice_mem) apply (rule disjI1) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev aa]t @t sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* "a ~: Z" *) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev aa]t @t sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* right *) apply (simp add: not_None) apply (rule_tac x="aa" in exI) apply (rule_tac x="sd" in exI) apply (simp add: Conditional_mem) apply (case_tac "aa : Y") apply (simp add: Int_choice_mem) apply (rule disjI2) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (rule_tac x="sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* "aa ~: Y" *) apply (simp add: Parallel_mem) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (rule_tac x="sc" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) done (* => *) lemma domF_Parallel_step_sup: "[[Parallel_step X Y Z Pf Qf]]F ev <= [[(? :Y -> Pf) |[X]| (? :Z -> Qf)]]F ev" apply (rule) apply (simp add: Parallel_step_def) apply (simp add: Ext_pre_choice_mem) apply (elim disjE conjE exE) (* nil *) apply (simp add: Parallel_mem) apply (rule_tac x="(Xa - insert Tick (Ev ` X)) Un ((Xa Int insert Tick (Ev ` X)) - Ev ` Y)" in exI) apply (rule_tac x="(Xa - insert Tick (Ev ` X)) Un ((Xa Int insert Tick (Ev ` X)) - Ev ` Z)" in exI) apply (simp add: domF_Parallel_step_set4) apply (rule conjI, force) apply (simp add: Ext_pre_choice_mem) apply (simp add: domF_Parallel_step_set5) (* sync *) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (rule_tac x="[Ev a]t @t t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* left *) apply (simp add: Conditional_mem) apply (case_tac "a : Z") apply (simp add: Int_choice_mem) apply (erule disjE) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* *) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev a]t @t t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* "a ~: Z" *) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* right *) apply (simp add: Conditional_mem) apply (case_tac "a : Y") apply (simp add: Int_choice_mem) apply (erule disjE) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* *) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev a]t @t t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) (* "a ~: Y" *) apply (simp add: Conditional_mem) apply (simp add: Parallel_mem) apply (elim conjE exE, simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="[Ev a]t @t t" in exI) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) done (* domF *) lemma domF_Parallel_step: "[[(? :Y -> Pf) |[X]| (? :Z -> Qf)]]F ev = [[Parallel_step X Y Z Pf Qf]]F ev" apply (rule eq_iffI) apply (simp add: domF_Parallel_step_sub) apply (simp add: domF_Parallel_step_sup) done (*** domSF ***) lemma domSF_Parallel_step: "[[(? :Y -> Pf) |[X]| (? :Z -> Qf)]]SF ev = [[Parallel_step X Y Z Pf Qf]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Parallel_step) apply (simp add: domF_Parallel_step) done (*------------------* | csp law | *------------------*) lemma csp_Parallel_step: "LET:fp df IN (? :Y -> Pf) |[X]| (? :Z -> Qf) =F LET:fp df IN Parallel_step X Y Z Pf Qf" apply (induct fp) by (simp_all add: eqF_def domSF_Parallel_step) (********************************************************* Hide expansion *********************************************************) (*** domT ***) lemma domT_Hiding_step: "[[(? :Y -> Pf) -- X]]T ev = [[Hiding_step X Y Pf]]T ev" apply (simp add: Hiding_step_def) apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (simp add: Ext_pre_choice_mem) apply (erule disjE, simp) apply (elim conjE exE) apply (case_tac "Y Int X = {}") apply (simp) apply (case_tac "a : X", fast) apply (simp add: Conditional_mem) apply (simp add: Ext_pre_choice_mem) apply (rule_tac x="a" in exI) apply (rule_tac x="sa --tr X" in exI) apply (simp add: Hiding_mem) apply (fast) (* Y Int X ~= {} *) apply (simp add: Conditional_mem) apply (simp add: Timeout_mem) apply (case_tac "a : X") apply (rule disjI2) apply (simp add: Rep_int_choice_mem) apply (rule disjI2) apply (rule_tac x="a" in exI) apply (simp add: Hiding_mem) apply (fast) (* a ~: X *) apply (rule disjI1) apply (simp add: Ext_pre_choice_mem) apply (rule_tac x="a" in exI) apply (rule_tac x="sa --tr X" in exI) apply (simp add: Hiding_mem) apply (fast) (* <= *) apply (rule) apply (case_tac "Y Int X = {}") apply (simp add: Conditional_mem) apply (simp add: Ext_pre_choice_mem) apply (erule disjE, simp) apply (elim conjE exE) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (simp add: Ext_pre_choice_mem) apply (case_tac "a : X", fast) apply (rule_tac x="[Ev a]t @t sa" in exI) apply (simp) apply (fast) (* Y Int X = {} *) apply (simp add: Conditional_mem) apply (simp add: Timeout_mem) apply (erule disjE) (* a~:X *) apply (simp add: Ext_pre_choice_mem) apply (erule disjE, simp) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (rule_tac x="[Ev a]t @t sa" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* a:X *) apply (simp add: Rep_int_choice_mem) apply (erule disjE, simp) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (rule_tac x="[Ev a]t @t s" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) done (*** domF ***) lemma domF_Hiding_step: "[[(? :Y -> Pf) -- X]]F ev = [[Hiding_step X Y Pf]]F ev" apply (simp add: Hiding_step_def) apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (simp add: Ext_pre_choice_mem) apply (erule disjE) (* not hidden *) apply (simp) apply (case_tac "Y Int X ~= {}", fast) apply (simp add: Conditional_mem) apply (simp add: Ext_pre_choice_mem) apply (fast) (* hidden *) apply (elim conjE exE) apply (case_tac "a : X") apply (case_tac "Y Int X = {}", fast) apply (simp add: Conditional_mem) apply (simp add: Timeout_mem) apply (rule disjI1) apply (simp add: Rep_int_choice_mem) apply (simp add: Hiding_mem) apply (fast) (* a ~: X *) apply (case_tac "Y Int X = {}") apply (simp add: Conditional_mem) apply (simp add: Ext_pre_choice_mem) apply (simp add: Hiding_mem) apply (fast) (* Y Int X ~= {} *) apply (simp add: Conditional_mem) apply (simp add: Timeout_mem) apply (rule disjI2) apply (simp add: Ext_pre_choice_mem) apply (simp add: Hiding_mem) apply (fast) (* <= *) apply (rule) apply (simp add: Conditional_mem) apply (case_tac "Y Int X = {}") apply (simp add: Ext_pre_choice_mem) apply (erule disjE) apply (simp add: Hiding_mem) apply (rule_tac x="[]t" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* *) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (case_tac "a : X", fast) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* Y Int X ~= {} *) apply (simp add: Timeout_mem) apply (elim disjE) (* 1 *) apply (simp add: Rep_int_choice_mem) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (rule_tac x="[Ev a]t @t sa" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 2 *) apply (simp add: Ext_pre_choice_mem) apply (elim conjE, simp) apply (simp add: Hiding_mem) apply (elim conjE exE) apply (rule_tac x="[Ev a]t @t sb" in exI) apply (simp add: Ext_pre_choice_mem) apply (fast) (* 3 *) apply (simp add: Ext_pre_choice_mem) done (*** domSF ***) lemma domSF_Hiding_step: "[[(? :Y -> Pf) -- X]]SF ev = [[Hiding_step X Y Pf]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Hiding_step) apply (simp add: domF_Hiding_step) done (*------------------* | csp law | *------------------*) lemma csp_Hiding_step: "LET:fp df IN (? :Y -> Pf) -- X =F LET:fp df IN Hiding_step X Y Pf" apply (induct fp) by (simp_all add: eqF_def domSF_Hiding_step) (****************** to add them again ******************) declare not_None_eq [simp] end
lemma domSF_STOP_step:
[[STOP]]SF ev = [[? x:{} -> DIV]]SF ev
lemma csp_STOP_step:
LET:fp df IN STOP =F LET:fp df IN ? x:{} -> DIV
lemma domSF_Act_prefix_step:
[[a -> P]]SF ev = [[? x:{a} -> P]]SF ev
lemma csp_Act_prefix_step:
LET:fp df IN a -> P =F LET:fp df IN ? x:{a} -> P
lemma domT_Ext_choice_step:
[[? :X -> Pf [+] ? :Y -> Qf]]T ev = [[Ext_choice_step X Y Pf Qf]]T ev
lemma domF_Ext_choice_step:
[[? :X -> Pf [+] ? :Y -> Qf]]F ev = [[Ext_choice_step X Y Pf Qf]]F ev
lemma domSF_Ext_choice_step:
[[? :X -> Pf [+] ? :Y -> Qf]]SF ev = [[Ext_choice_step X Y Pf Qf]]SF ev
lemma csp_Ext_choice_step:
LET:fp df IN ? :X -> Pf [+] ? :Y -> Qf =F LET:fp df IN Ext_choice_step X Y Pf Qf
lemma domT_Parallel_step:
[[? :Y -> Pf |[X]| ? :Z -> Qf]]T ev = [[Parallel_step X Y Z Pf Qf]]T ev
lemma domF_Parallel_step_set1:
[| Ya - insert Tick (Ev ` X) = Za - insert Tick (Ev ` X); Ev ` Y ∩ Ya = {}; Ev ` Z ∩ Za = {} |] ==> Ev ` (X ∩ Y ∩ Z) ∩ (Ya ∪ Za) = {}
lemma domF_Parallel_step_set2:
[| Ya - insert Tick (Ev ` X) = Za - insert Tick (Ev ` X); Ev ` Y ∩ Ya = {}; Ev ` Z ∩ Za = {} |] ==> Ev ` (Y - X) ∩ (Ya ∪ Za) = {}
lemma domF_Parallel_step_set3:
[| Ya - insert Tick (Ev ` X) = Za - insert Tick (Ev ` X); Ev ` Y ∩ Ya = {}; Ev ` Z ∩ Za = {} |] ==> Ev ` (Z - X) ∩ (Ya ∪ Za) = {}
lemma domF_Parallel_step_set4:
Ev ` (X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) ∩ Xa = {} ==> Xa = Xa - insert Tick (Ev ` X) ∪ (Xa ∩ insert Tick (Ev ` X) - Ev ` Y) ∪ (Xa - insert Tick (Ev ` X) ∪ (Xa ∩ insert Tick (Ev ` X) - Ev ` Z))
lemma domF_Parallel_step_set5:
Ev ` (X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) ∩ Xa = {} ==> Ev ` Y ∩ (Xa - insert Tick (Ev ` X) ∪ (Xa ∩ insert Tick (Ev ` X) - Ev ` Y)) = {} ∧ Ev ` Z ∩ (Xa - insert Tick (Ev ` X) ∪ (Xa ∩ insert Tick (Ev ` X) - Ev ` Z)) = {}
lemma domF_Parallel_step_sub:
[[? :Y -> Pf |[X]| ? :Z -> Qf]]F ev ≤ [[Parallel_step X Y Z Pf Qf]]F ev
lemma domF_Parallel_step_sup:
[[Parallel_step X Y Z Pf Qf]]F ev ≤ [[? :Y -> Pf |[X]| ? :Z -> Qf]]F ev
lemma domF_Parallel_step:
[[? :Y -> Pf |[X]| ? :Z -> Qf]]F ev = [[Parallel_step X Y Z Pf Qf]]F ev
lemma domSF_Parallel_step:
[[? :Y -> Pf |[X]| ? :Z -> Qf]]SF ev = [[Parallel_step X Y Z Pf Qf]]SF ev
lemma csp_Parallel_step:
LET:fp df IN ? :Y -> Pf |[X]| ? :Z -> Qf =F LET:fp df IN Parallel_step X Y Z Pf Qf
lemma domT_Hiding_step:
[[(? :Y -> Pf) -- X]]T ev = [[Hiding_step X Y Pf]]T ev
lemma domF_Hiding_step:
[[(? :Y -> Pf) -- X]]F ev = [[Hiding_step X Y Pf]]F ev
lemma domSF_Hiding_step:
[[(? :Y -> Pf) -- X]]SF ev = [[Hiding_step X Y Pf]]SF ev
lemma csp_Hiding_step:
LET:fp df IN (? :Y -> Pf) -- X =F LET:fp df IN Hiding_step X Y Pf