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