Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory CSP_law_SKIP = CSP_law_commut + CSP_law_decompo:(*-------------------------------------------* | CSP-Prover | | December 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_law_SKIP = CSP_law_commut + CSP_law_decompo: (* The following simplification is sometimes unexpected. *) (* *) (* not_None_eq: (x ~= None) = (EX y. x = Some y) *) declare not_None_eq [simp del] (***************************************************************** 1. SKIP ;; P 2. P ;; SKIP 3. SKIP |[X]| P 4. P |[X]| SKIP 5. SKIP |[X]| SKIP 6. SKIP -- X 7. SKIP [[r]] *****************************************************************) (********************************************************* SKIP ;; P *********************************************************) (*** domT ***) lemma domT_Seq_compo_unit_l: "[[SKIP ;; P]]T ev = [[P]]T ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) apply (force) (* <= *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) done (*** domF ***) lemma domF_Seq_compo_unit_l: "[[SKIP ;; P]]F ev = [[P]]F ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) apply (elim conjE disjE) apply (simp_all add: Evset_def) (* <= *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) done (*** domSF ***) lemma domSF_Seq_compo_unit_l: "[[SKIP ;; P]]SF ev = [[P]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Seq_compo_unit_l) apply (simp add: domF_Seq_compo_unit_l) done (*------------------* | csp law | *------------------*) lemma csp_Seq_compo_unit_l: "LET:fp df IN SKIP ;; P =F LET:fp df IN P" apply (induct_tac fp) by (simp_all add: eqF_def domSF_Seq_compo_unit_l) (********************************************************* P ;; SKIP *********************************************************) (*** domT ***) lemma domT_Seq_compo_unit_r: "[[P ;; SKIP]]T ev = [[P]]T ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) apply (elim conjE exE disjE) apply (simp) apply (rule memT_prefix_closed, simp) apply (simp add: rmtick_prefix_rev) apply (simp) apply (rule memT_prefix_closed, simp, simp) apply (simp) (* <= *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) apply (insert trace_last_notick_or_tick) apply (drule_tac x="t" in spec) apply (simp add: not_None_T) apply (erule disjE) apply (rule disjI1) apply (rule_tac x="t" in exI, simp) (* *) apply (rule disjI2) apply (elim conjE exE) apply (rule_tac x="s" in exI) apply (rule_tac x="[Tick]t" in exI) apply (simp) done (*** domF ***) lemma domF_Seq_compo_unit_r: "[[P ;; SKIP]]F ev = [[P]]F ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) apply (elim conjE exE disjE) apply (rule memF_F2, simp, fast) apply (rule domSF_F2_F4, simp_all) apply (case_tac "notick sa", simp_all) apply (rule domSF_T3, simp_all) apply (case_tac "notick sa", simp_all) (* <= *) apply (rule) apply (simp add: Seq_compo_mem) apply (simp add: SKIP_mem) apply (insert trace_last_notick_or_tick) apply (drule_tac x="s" in spec) apply (simp add: not_None_F) apply (erule disjE) apply (case_tac "Tick : X") apply (rule disjI1, simp) apply (subgoal_tac "insert Tick X = X", simp, fast) (* Tick ~: X *) apply (case_tac "s @t [Tick]t ~:t [[P]]T ev") apply (rule disjI1, simp) apply (rule domSF_F3[of "[[P]]T ev" "[[P]]F ev" _ _ "{Tick}", simplified]) apply (simp_all) (* *) apply (rule disjI2) apply (rule_tac x="s" in exI) apply (rule_tac x="[]t" in exI, simp) apply (simp add: Evset_def, fast) (* *) apply (elim conjE exE, simp) apply (rule_tac x="sa" in exI) apply (rule_tac x="[Tick]t" in exI) apply (simp) apply (rule domSF_T2[of _ "[[P]]F ev"], simp_all) done (*** domSF ***) lemma domSF_Seq_compo_unit_r: "[[P ;; SKIP]]SF ev = [[P]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Seq_compo_unit_r) apply (simp add: domF_Seq_compo_unit_r) done (*------------------* | csp law | *------------------*) lemma csp_Seq_compo_unit_r: "LET:fp df IN P ;; SKIP =F LET:fp df IN P" apply (induct_tac fp) by (simp_all add: eqF_def domSF_Seq_compo_unit_r) (********************************************************* SKIP |[X]| P *********************************************************) (*** domT ***) lemma domT_Parallel_preterm_l: "[[SKIP |[X]| (? :Y -> Qf)]]T ev = [[? x:(Y-X) -> (SKIP |[X]| Qf x)]]T ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (simp add: Ext_pre_choice_mem) apply (insert trace_nil_or_Tick_or_Ev) apply (elim disjE conjE exE) apply (simp_all) apply (drule_tac x="t" 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 (simp add: not_None_T) apply (rule_tac x="a" in exI) apply (rule_tac x="sb" in exI, simp) apply (simp add: Parallel_mem SKIP_mem) apply (fast) apply (drule_tac x="t" 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 (drule_tac x="t" 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 (simp add: not_None_T) apply (rule_tac x="a" in exI) apply (rule_tac x="sb" in exI, simp) apply (simp add: Parallel_mem SKIP_mem) apply (fast) (* <= *) apply (rule) apply (simp add: Ext_pre_choice_mem) apply (erule disjE, simp) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="[]t" in exI) apply (rule_tac x="[Ev a]t @t ta" in exI, simp) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) apply (rule_tac x="[Tick]t" in exI) apply (rule_tac x="[Ev a]t @t ta" in exI, simp) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) done (*** domF ***) lemma domF_Parallel_preterm_l_set1: "[| Ya - insert Tick (Ev ` X) = Z - insert Tick (Ev ` X) ; Ev ` Y Int Z = {} |] ==> Ev ` (Y - X) Int (Ya Un Z) = {}" by (auto) lemma domF_Parallel_preterm_l: "[[SKIP |[X]| (? :Y -> Qf)]]F ev = [[? x:(Y-X) -> (SKIP |[X]| Qf x)]]F ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (simp add: Ext_pre_choice_mem) apply (insert trace_nil_or_Tick_or_Ev) apply (elim disjE conjE exE) apply (simp_all) apply (simp add: domF_Parallel_preterm_l_set1) 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 (simp add: not_None_F) apply (simp add: Parallel_mem SKIP_mem) apply (fast) 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 (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 (simp add: not_None_F) apply (simp add: Parallel_mem SKIP_mem) apply (fast) (* <= *) apply (rule) apply (simp add: Ext_pre_choice_mem) apply (erule disjE, simp) apply (simp add: Parallel_mem) apply (rule_tac x="Xa - {Tick}" in exI) apply (rule_tac x="Xa - (Ev ` X)" in exI) apply (rule conjI, fast) apply (rule conjI, fast) apply (simp add: SKIP_mem) apply (rule conjI) apply (simp add: Evset_def, fast) apply (simp add: Ext_pre_choice_mem) apply (fast) (* *) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Z" in exI, simp) apply (rule_tac x="[]t" in exI) apply (rule_tac x="[Ev a]t @t t" in exI, simp) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Z" in exI, simp) apply (rule_tac x="[Tick]t" in exI) apply (rule_tac x="[Ev a]t @t t" in exI, simp) apply (simp add: par_tr_head) apply (simp add: Ext_pre_choice_mem) apply (fast) done (*** domSF ***) lemma domSF_Parallel_preterm_l: "[[SKIP |[X]| (? :Y -> Qf)]]SF ev = [[? x:(Y-X) -> (SKIP |[X]| Qf x)]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Parallel_preterm_l) apply (simp add: domF_Parallel_preterm_l) done (*------------------* | csp law | *------------------*) lemma csp_Parallel_preterm_l: "LET:fp df IN SKIP |[X]| (? :Y -> Qf) =F LET:fp df IN ? x:(Y-X) -> (SKIP |[X]| Qf x)" apply (induct_tac fp) by (simp_all add: eqF_def domSF_Parallel_preterm_l) (********************************************************* P |[X]| SKIP *********************************************************) lemma csp_Parallel_preterm_r: "LET:fp df IN (? :Y -> Pf) |[X]| SKIP =F LET:fp df IN ? x:(Y-X) -> (Pf x |[X]| SKIP)" apply (rule csp_trans) apply (rule csp_Parallel_commut) apply (rule csp_trans) apply (rule csp_Parallel_preterm_l) apply (rule csp_rm_head, simp) apply (rule csp_Parallel_commut) done (********************************************************* SKIP |[X]| SKIP *********************************************************) (*** domT ***) lemma domT_Parallel_term: "[[SKIP |[X]| SKIP]]T ev = [[SKIP]]T ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) apply (insert trace_nil_or_Tick_or_Ev) apply (drule_tac x="t" in spec) apply (simp add: par_tr_not_None) apply (erule disjE, simp)+ apply (elim conjE exE, simp) apply (simp add: par_tr_head) apply (drule_tac x="t" in spec) apply (simp add: par_tr_not_None) apply (erule disjE, simp)+ apply (elim conjE exE, simp) apply (simp add: par_tr_head) (* <= *) apply (rule) apply (simp add: SKIP_mem) apply (erule disjE, simp) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) done (*** domF ***) lemma domF_Parallel_term: "[[SKIP |[X]| SKIP]]F ev = [[SKIP]]F ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) apply (fast) 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 (elim conjE exE, simp) apply (simp add: par_tr_head) apply (drule_tac x="s" in spec) apply (simp add: par_tr_not_None) apply (erule disjE, simp)+ apply (elim conjE exE, simp) apply (simp add: par_tr_head) (* <= *) apply (rule) apply (simp add: SKIP_mem) apply (erule disjE) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (fast) apply (simp add: Parallel_mem) apply (simp add: SKIP_mem) apply (fast) done (*** domSF ***) lemma domSF_Parallel_term: "[[SKIP |[X]| SKIP]]SF ev = [[SKIP]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_Parallel_term) apply (simp add: domF_Parallel_term) done (*------------------* | csp law | *------------------*) lemma csp_Parallel_term: "LET:fp df IN SKIP |[X]| SKIP =F LET:fp df IN SKIP" apply (induct_tac fp) by (simp_all add: eqF_def domSF_Parallel_term) (********************************************************* SKIP -- X *********************************************************) (*** domT ***) lemma domT_SKIP_Hiding_Id: "[[SKIP -- X]]T ev = [[SKIP]]T ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Hiding_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) (* <= *) apply (rule) apply (simp add: SKIP_mem) apply (erule disjE, simp) apply (simp add: Hiding_mem) apply (rule_tac x="[Tick]t" in exI) apply (simp add: SKIP_mem) done (*** domF ***) lemma domF_SKIP_Hiding_Id: "[[SKIP -- X]]F ev = [[SKIP]]F ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Hiding_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) apply (fast) (* <= *) apply (rule) apply (simp add: SKIP_mem) apply (simp add: Hiding_mem) apply (simp add: SKIP_mem) apply (erule disjE) apply (rule_tac x="[]t" in exI) apply (simp add: Evset_def, fast) apply (rule_tac x="[Tick]t" in exI) apply (simp) done (*** domSF ***) lemma domSF_SKIP_Hiding_Id: "[[SKIP -- X]]SF ev = [[SKIP]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_SKIP_Hiding_Id) apply (simp add: domF_SKIP_Hiding_Id) done (*------------------* | csp law | *------------------*) lemma csp_SKIP_Hiding_Id: "LET:fp df IN SKIP -- X =F LET:fp df IN SKIP" apply (induct_tac fp) by (simp_all add: eqF_def domSF_SKIP_Hiding_Id) (********************************************************* SKIP [[r]] *********************************************************) (*** domT ***) lemma domT_SKIP_Renaming_Id: "[[SKIP [[r]]]]T ev = [[SKIP]]T ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Renaming_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) (* <= *) apply (rule) apply (simp add: SKIP_mem) apply (erule disjE, simp) apply (simp add: Renaming_mem) apply (simp add: SKIP_mem) done (*** domF ***) lemma domF_SKIP_Renaming_Id: "[[SKIP [[r]]]]F ev = [[SKIP]]F ev" apply (rule eq_iffI) (* => *) apply (rule) apply (simp add: Renaming_mem) apply (simp add: SKIP_mem) apply (elim disjE conjE exE) apply (simp_all) (* <= *) apply (rule) apply (simp add: SKIP_mem) apply (simp add: Renaming_mem) apply (simp add: SKIP_mem) apply (erule disjE) apply (simp_all) done (*** domSF ***) lemma domSF_SKIP_Renaming_Id: "[[SKIP [[r]]]]SF ev = [[SKIP]]SF ev" apply (simp add: proc_eqSF_decompo) apply (simp add: domT_SKIP_Renaming_Id) apply (simp add: domF_SKIP_Renaming_Id) done (*------------------* | csp law | *------------------*) lemma csp_SKIP_Renaming_Id: "LET:fp df IN SKIP [[r]] =F LET:fp df IN SKIP" apply (induct_tac fp) by (simp_all add: eqF_def domSF_SKIP_Renaming_Id) (****************** to add them again ******************) declare not_None_eq [simp] end
lemma domT_Seq_compo_unit_l:
[[SKIP ;; P]]T ev = [[P]]T ev
lemma domF_Seq_compo_unit_l:
[[SKIP ;; P]]F ev = [[P]]F ev
lemma domSF_Seq_compo_unit_l:
[[SKIP ;; P]]SF ev = [[P]]SF ev
lemma csp_Seq_compo_unit_l:
LET:fp df IN SKIP ;; P =F LET:fp df IN P
lemma domT_Seq_compo_unit_r:
[[P ;; SKIP]]T ev = [[P]]T ev
lemma domF_Seq_compo_unit_r:
[[P ;; SKIP]]F ev = [[P]]F ev
lemma domSF_Seq_compo_unit_r:
[[P ;; SKIP]]SF ev = [[P]]SF ev
lemma csp_Seq_compo_unit_r:
LET:fp df IN P ;; SKIP =F LET:fp df IN P
lemma domT_Parallel_preterm_l:
[[SKIP |[X]| ? :Y -> Qf]]T ev = [[? x:(Y - X) -> (SKIP |[X]| Qf x)]]T ev
lemma domF_Parallel_preterm_l_set1:
[| Ya - insert Tick (Ev ` X) = Z - insert Tick (Ev ` X); Ev ` Y ∩ Z = {} |] ==> Ev ` (Y - X) ∩ (Ya ∪ Z) = {}
lemma domF_Parallel_preterm_l:
[[SKIP |[X]| ? :Y -> Qf]]F ev = [[? x:(Y - X) -> (SKIP |[X]| Qf x)]]F ev
lemma domSF_Parallel_preterm_l:
[[SKIP |[X]| ? :Y -> Qf]]SF ev = [[? x:(Y - X) -> (SKIP |[X]| Qf x)]]SF ev
lemma csp_Parallel_preterm_l:
LET:fp df IN SKIP |[X]| ? :Y -> Qf =F LET:fp df IN ? x:(Y - X) -> (SKIP |[X]| Qf x)
lemma csp_Parallel_preterm_r:
LET:fp df IN ? :Y -> Pf |[X]| SKIP =F LET:fp df IN ? x:(Y - X) -> (Pf x |[X]| SKIP)
lemma domT_Parallel_term:
[[SKIP |[X]| SKIP]]T ev = [[SKIP]]T ev
lemma domF_Parallel_term:
[[SKIP |[X]| SKIP]]F ev = [[SKIP]]F ev
lemma domSF_Parallel_term:
[[SKIP |[X]| SKIP]]SF ev = [[SKIP]]SF ev
lemma csp_Parallel_term:
LET:fp df IN SKIP |[X]| SKIP =F LET:fp df IN SKIP
lemma domT_SKIP_Hiding_Id:
[[SKIP -- X]]T ev = [[SKIP]]T ev
lemma domF_SKIP_Hiding_Id:
[[SKIP -- X]]F ev = [[SKIP]]F ev
lemma domSF_SKIP_Hiding_Id:
[[SKIP -- X]]SF ev = [[SKIP]]SF ev
lemma csp_SKIP_Hiding_Id:
LET:fp df IN SKIP -- X =F LET:fp df IN SKIP
lemma domT_SKIP_Renaming_Id:
[[SKIP [[r]]]]T ev = [[SKIP]]T ev
lemma domF_SKIP_Renaming_Id:
[[SKIP [[r]]]]F ev = [[SKIP]]F ev
lemma domSF_SKIP_Renaming_Id:
[[SKIP [[r]]]]SF ev = [[SKIP]]SF ev
lemma csp_SKIP_Renaming_Id:
LET:fp df IN SKIP [[r]] =F LET:fp df IN SKIP