Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F
theory CSP_F_law_alpha_par(*-------------------------------------------* | CSP-Prover on Isabelle2004 | | May 2005 | | June 2005 (modified) | | September 2005 (modified) | | | | CSP-Prover on Isabelle2005 | | November 2005 (modified) | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_F_law_alpha_par = CSP_F_op_alpha_par + CSP_F_law_decompo + CSP_T_law_alpha_par : (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite UnionT and InterT. *) (* Union (B ` A) = (UN x:A. B x) *) (* Inter (B ` A) = (INT x:A. B x) *) declare Union_image_eq [simp del] declare Inter_image_eq [simp del] (***************************************************************** 1. associativity of |[X,Y]| 2. commutativity of |[X,Y]| 3. monotonicity of |[X,Y]| 4. *****************************************************************) (********************************************************* P |[X,Y]| Q *********************************************************) (************************************ | SKIP and SKIP | ************************************) (*------------------* | csp law | *------------------*) lemma cspF_SKIP_Alpha_parallel: "(SKIP |[{}, {}]| SKIP) =F SKIP" apply (simp add: cspF_cspT_semantics) apply (simp add: cspT_SKIP_Alpha_parallel) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_failures_Alpha_parallel) apply (elim conjE exE) apply (simp add: in_failures) apply (elim disjE) apply (simp_all) apply (simp add: Evset_def) apply (subgoal_tac "(s = <> | s = <Tick>)") apply (erule disjE) apply (simp) apply (fast) apply (simp) apply (simp add: sett_subset_Tick) apply (subgoal_tac "(s = <> | s = <Tick>)") apply (erule disjE) apply (simp) apply (simp) apply (simp add: sett_subset_Tick) (* <= *) apply (rule) apply (simp add: in_failures_Alpha_parallel) apply (rule_tac x="X" in exI) apply (rule_tac x="X" in exI) apply (simp) apply (simp add: in_failures) apply (auto) done (************************************ | associativity | ************************************) (*------------------* | csp law | *------------------*) lemma cspF_Alpha_parallel_ass_lm1: "Ya Int insert Tick (Ev ` X1) Un (Za Int insert Tick (Ev ` X2) Un Z Int insert Tick (Ev ` X3)) = Ya Int insert Tick (Ev ` X1) Un (Za Int insert Tick (Ev ` X2) Un Z Int insert Tick (Ev ` X3)) Int insert Tick (Ev ` (X2 Un X3))" by (auto) lemma cspF_Alpha_parallel_assoc: "(P1 |[X1, X2]| P2) |[X1 Un X2, X3]| P3 =F P1 |[X1, X2 Un X3]| (P2 |[X2, X3]| P3)" apply (simp add: cspF_cspT_semantics) apply (simp add: cspT_Alpha_parallel_assoc) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_failures_Alpha_parallel) apply (elim conjE exE) apply (simp add: Un_upper1 Un_upper2 rest_tr_of_rest_tr_subset) apply (rule_tac x="Ya" in exI, simp) apply (rule_tac x="(Za Int insert Tick (Ev ` X2)) Un (Z Int insert Tick (Ev ` X3))" in exI) apply (simp add: Un_assoc) apply (simp add: cspF_Alpha_parallel_ass_lm1) apply (rule_tac x="Za" in exI, simp) apply (rule_tac x="Z" in exI, simp) apply (force) (* <= *) apply (rule) apply (simp add: in_failures_Alpha_parallel) apply (elim conjE exE) apply (simp add: Un_upper1 Un_upper2 rest_tr_of_rest_tr_subset) apply (rule_tac x="Y Int insert Tick (Ev ` X1) Un (Ya Int insert Tick (Ev ` X2))" in exI) apply (rule_tac x="Za" in exI) apply (simp add: Un_assoc) apply (rule conjI) apply (fast) apply (rule_tac x="Y" in exI, simp) apply (rule_tac x="Ya" in exI, simp) apply (force) done lemma cspF_Alpha_parallel_assoc_sym: "P1 |[X1, X2 Un X3]| (P2 |[X2, X3]| P3) =F (P1 |[X1, X2]| P2) |[X1 Un X2, X3]| P3" apply (rule cspF_sym) by (simp add: cspF_Alpha_parallel_assoc) (************************************ | commutativity | ************************************) (*------------------* | csp law | *------------------*) lemma cspF_Alpha_parallel_commut: "(P1 |[X1, X2]| P2) =F (P2 |[X2, X1]| P1)" apply (simp add: cspF_cspT_semantics) apply (simp add: cspT_Alpha_parallel_commut) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_failures_Alpha_parallel) apply (elim conjE exE) apply (rule_tac x="Z" in exI) apply (rule_tac x="Y" in exI) apply (simp add: Un_sym) (* <= *) apply (rule) apply (simp add: in_failures_Alpha_parallel) apply (elim conjE exE) apply (rule_tac x="Z" in exI) apply (rule_tac x="Y" in exI) apply (simp add: Un_sym) done (************************************ | monotonicity | ************************************) (*------------------* | csp law | *------------------*) lemma cspF_Alpha_parallel_mono: "[| X1 = X2 ; Y1 = Y2 ; P1 <=F Q1 ; P2 <=F Q2 |] ==> P1 |[X1,Y1]| P2 <=F Q1 |[X2,Y2]| Q2" apply (simp add: Alpha_parallel_def) apply (simp add: cspF_Parallel_mono) done lemma cspF_Alpha_parallel_cong: "[| X1 = X2 ; Y1 = Y2 ; P1 =F Q1 ; P2 =F Q2 |] ==> P1 |[X1,Y1]| P2 =F Q1 |[X2,Y2]| Q2" by (simp add: cspF_eq_ref_iff cspF_Alpha_parallel_mono) lemmas cspF_decompo_Alpha_parallel = cspF_Alpha_parallel_mono cspF_Alpha_parallel_cong (****************** to add them again ******************) declare Union_image_eq [simp] declare Inter_image_eq [simp] end
lemma cspF_SKIP_Alpha_parallel:
SKIP |[{},{}]| SKIP =F SKIP
lemma cspF_Alpha_parallel_ass_lm1:
Ya ∩ insert Tick (Ev ` X1.0) ∪ (Za ∩ insert Tick (Ev ` X2.0) ∪ Z ∩ insert Tick (Ev ` X3.0)) = Ya ∩ insert Tick (Ev ` X1.0) ∪ (Za ∩ insert Tick (Ev ` X2.0) ∪ Z ∩ insert Tick (Ev ` X3.0)) ∩ insert Tick (Ev ` (X2.0 ∪ X3.0))
lemma cspF_Alpha_parallel_assoc:
P1.0 |[X1.0,X2.0]| P2.0 |[X1.0 ∪ X2.0,X3.0]| P3.0 =F P1.0 |[X1.0,X2.0 ∪ X3.0]| (P2.0 |[X2.0,X3.0]| P3.0)
lemma cspF_Alpha_parallel_assoc_sym:
P1.0 |[X1.0,X2.0 ∪ X3.0]| (P2.0 |[X2.0,X3.0]| P3.0) =F P1.0 |[X1.0,X2.0]| P2.0 |[X1.0 ∪ X2.0,X3.0]| P3.0
lemma cspF_Alpha_parallel_commut:
P1.0 |[X1.0,X2.0]| P2.0 =F P2.0 |[X2.0,X1.0]| P1.0
lemma cspF_Alpha_parallel_mono:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 <=F Q1.0; P2.0 <=F Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 <=F Q1.0 |[X2.0,Y2.0]| Q2.0
lemma cspF_Alpha_parallel_cong:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 =F Q1.0; P2.0 =F Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 =F Q1.0 |[X2.0,Y2.0]| Q2.0
lemmas cspF_decompo_Alpha_parallel:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 <=F Q1.0; P2.0 <=F Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 <=F Q1.0 |[X2.0,Y2.0]| Q2.0
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 =F Q1.0; P2.0 =F Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 =F Q1.0 |[X2.0,Y2.0]| Q2.0
lemmas cspF_decompo_Alpha_parallel:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 <=F Q1.0; P2.0 <=F Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 <=F Q1.0 |[X2.0,Y2.0]| Q2.0
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 =F Q1.0; P2.0 =F Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 =F Q1.0 |[X2.0,Y2.0]| Q2.0