Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T
theory CSP_T_law_alpha_par(*-------------------------------------------* | CSP-Prover on Isabelle2004 | | May 2005 | | June 2005 (modified) | | September 2005 (modified) | | | | CSP-Prover on Isabelle2005 | | October 2005 (modified) | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_T_law_alpha_par = CSP_T_op_alpha_par + CSP_T_law_decompo: (* 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 cspT_SKIP_Alpha_parallel: "(SKIP |[{}, {}]| SKIP) =T SKIP" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_traces in_traces_Alpha_parallel) apply (simp add: sett_subset_Tick) (* <= *) apply (rule) apply (simp add: in_traces in_traces_Alpha_parallel) apply (simp add: sett_subset_Tick) apply (insert rest_tr_sett_subseteq_sett[of _ "{}"]) apply (auto) done (************************************ | associativity | ************************************) (*------------------* | csp law | *------------------*) lemma cspT_Alpha_parallel_assoc: "(P1 |[X1, X2]| P2) |[X1 Un X2, X3]| P3 =T P1 |[X1, X2 Un X3]| (P2 |[X2, X3]| P3)" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_traces_Alpha_parallel) apply (elim conjE exE) apply (simp add: Un_upper1 Un_upper2 rest_tr_of_rest_tr_subset) apply (simp add: Un_assoc) (* <= *) apply (rule) apply (simp add: in_traces_Alpha_parallel) apply (elim conjE exE) apply (simp add: Un_upper1 Un_upper2 rest_tr_of_rest_tr_subset) apply (simp add: Un_assoc) done lemma cspT_Alpha_parallel_assoc_sym: "P1 |[X1, X2 Un X3]| (P2 |[X2, X3]| P3) =T (P1 |[X1, X2]| P2) |[X1 Un X2, X3]| P3" apply (rule cspT_sym) by (simp add: cspT_Alpha_parallel_assoc) (************************************ | commutativity | ************************************) (*------------------* | csp law | *------------------*) lemma cspT_Alpha_parallel_commut: "(P1 |[X1, X2]| P2) =T (P2 |[X2, X1]| P1)" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_traces_Alpha_parallel) apply (fast) (* <= *) apply (rule) apply (simp add: in_traces_Alpha_parallel) apply (fast) done (************************************ | monotonicity | ************************************) (*------------------* | csp law | *------------------*) lemma cspT_Alpha_parallel_mono: "[| X1 = X2 ; Y1 = Y2 ; P1 <=T Q1 ; P2 <=T Q2 |] ==> P1 |[X1,Y1]| P2 <=T Q1 |[X2,Y2]| Q2" apply (simp add: Alpha_parallel_def) apply (simp add: cspT_Parallel_mono) done lemma cspT_Alpha_parallel_cong: "[| X1 = X2 ; Y1 = Y2 ; P1 =T Q1 ; P2 =T Q2 |] ==> P1 |[X1,Y1]| P2 =T Q1 |[X2,Y2]| Q2" by (simp add: cspT_eq_ref_iff cspT_Alpha_parallel_mono) lemmas cspT_decompo_Alpha_parallel = cspT_Alpha_parallel_mono cspT_Alpha_parallel_cong (****************** to add them again ******************) declare Union_image_eq [simp] declare Inter_image_eq [simp] end
lemma cspT_SKIP_Alpha_parallel:
SKIP |[{},{}]| SKIP =T SKIP
lemma cspT_Alpha_parallel_assoc:
P1.0 |[X1.0,X2.0]| P2.0 |[X1.0 ∪ X2.0,X3.0]| P3.0 =T P1.0 |[X1.0,X2.0 ∪ X3.0]| (P2.0 |[X2.0,X3.0]| P3.0)
lemma cspT_Alpha_parallel_assoc_sym:
P1.0 |[X1.0,X2.0 ∪ X3.0]| (P2.0 |[X2.0,X3.0]| P3.0) =T P1.0 |[X1.0,X2.0]| P2.0 |[X1.0 ∪ X2.0,X3.0]| P3.0
lemma cspT_Alpha_parallel_commut:
P1.0 |[X1.0,X2.0]| P2.0 =T P2.0 |[X2.0,X1.0]| P1.0
lemma cspT_Alpha_parallel_mono:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 <=T Q1.0 |[X2.0,Y2.0]| Q2.0
lemma cspT_Alpha_parallel_cong:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 =T Q1.0 |[X2.0,Y2.0]| Q2.0
lemmas cspT_decompo_Alpha_parallel:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 <=T Q1.0 |[X2.0,Y2.0]| Q2.0
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 =T Q1.0 |[X2.0,Y2.0]| Q2.0
lemmas cspT_decompo_Alpha_parallel:
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 <=T Q1.0 |[X2.0,Y2.0]| Q2.0
[| X1.0 = X2.0; Y1.0 = Y2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X1.0,Y1.0]| P2.0 =T Q1.0 |[X2.0,Y2.0]| Q2.0