Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T
theory CSP_T_law_SKIP (*-------------------------------------------*
| CSP-Prover on Isabelle2004 |
| December 2004 |
| July 2005 (modified) |
| September 2005 (modified) |
| |
| CSP-Prover on Isabelle2005 |
| October 2005 (modified) |
| April 2006 (modified) |
| |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_T_law_SKIP = CSP_T_law_basic:
(*****************************************************************
1. SKIP |[X]| SKIP
2. SKIP |[X]| P
3. P |[X]| SKIP
4. SKIP -- X
5. SKIP [[r]]
6. SKIP ;; P
7. P ;; SKIP
8. SKIP |. n
*****************************************************************)
(*********************************************************
SKIP |[X]| SKIP
*********************************************************)
lemma cspT_Parallel_term:
"SKIP |[X]| SKIP =T SKIP"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule)
apply (simp add: in_traces)
apply (elim disjE conjE exE)
apply (simp_all)
(* <= *)
apply (rule)
apply (simp add: in_traces)
apply (elim disjE conjE exE)
apply (simp_all)
done
(*********************************************************
SKIP |[X]| P
*********************************************************)
lemma cspT_Parallel_preterm_l:
"SKIP |[X]| (? :Y -> Qf) =T ? x:(Y-X) -> (SKIP |[X]| Qf x)"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule)
apply (simp add: in_traces)
apply (insert trace_nil_or_Tick_or_Ev)
apply (elim disjE conjE exE)
apply (simp_all)
apply (drule_tac x="t" in spec)
apply (erule disjE, simp)
apply (erule disjE, simp)
apply (elim conjE exE, simp)
apply (simp add: par_tr_head)
apply (rule_tac x="<>" in exI)
apply (rule_tac x="sa" in exI, simp)
apply (drule_tac x="t" in spec)
apply (erule disjE, simp)
apply (erule disjE, simp)
apply (elim conjE exE, simp)
apply (simp add: par_tr_head)
apply (rule_tac x="<Tick>" in exI)
apply (rule_tac x="sa" in exI, simp)
(* <= *)
apply (rule)
apply (simp add: in_traces)
apply (elim disjE conjE exE)
apply (simp_all)
apply (rule_tac x="<>" in exI)
apply (rule_tac x="<Ev a> ^^ ta" in exI, simp)
apply (simp add: par_tr_head)
apply (rule_tac x="<Tick>" in exI)
apply (rule_tac x="<Ev a> ^^ ta" in exI, simp)
apply (simp add: par_tr_head)
done
(*********************************************************
P |[X]| SKIP
*********************************************************)
lemma cspT_Parallel_preterm_r:
"(? :Y -> Pf) |[X]| SKIP
=T ? x:(Y-X) -> (Pf x |[X]| SKIP)"
apply (rule cspT_trans)
apply (rule cspT_Parallel_commut)
apply (rule cspT_trans)
apply (rule cspT_Parallel_preterm_l)
apply (rule cspT_rm_head, simp)
apply (rule cspT_Parallel_commut)
done
lemmas cspT_Parallel_preterm = cspT_Parallel_preterm_l cspT_Parallel_preterm_r
(*********************************************************
SKIP and Parallel
*********************************************************)
(* p.288 *)
lemma cspT_SKIP_Parallel_Ext_choice_SKIP_l:
"((? :Y -> Pf) [+] SKIP) |[X]| SKIP =T
(? x:(Y - X) -> (Pf x |[X]| SKIP)) [+] SKIP"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule, simp add: in_traces)
apply (elim conjE exE disjE)
apply (simp_all)
apply (rule disjI2)
apply (rule disjI1)
apply (simp add: par_tr_nil_right)
apply (elim conjE)
apply (simp add: image_iff)
apply (rule_tac x="sa" in exI)
apply (rule_tac x="<>" in exI)
apply (simp add: par_tr_nil_right)
apply (rule disjI2)
apply (rule disjI1)
apply (simp add: par_tr_Tick_right)
apply (elim conjE)
apply (simp add: image_iff)
apply (rule_tac x="sa" in exI)
apply (rule_tac x="<Tick>" in exI)
apply (simp add: par_tr_Tick_right)
(* <= *)
apply (rule, simp add: in_traces)
apply (elim conjE exE disjE)
apply (simp_all)
apply (simp add: par_tr_nil_right)
apply (elim conjE)
apply (rule_tac x="<Ev a> ^^ sa" in exI)
apply (rule_tac x="<>" in exI)
apply (simp add: par_tr_nil_right)
apply (simp add: image_iff)
apply (simp add: par_tr_Tick_right)
apply (elim conjE)
apply (rule_tac x="<Ev a> ^^ sa" in exI)
apply (rule_tac x="<Tick>" in exI)
apply (simp add: par_tr_Tick_right)
apply (simp add: image_iff)
done
lemma cspT_SKIP_Parallel_Ext_choice_SKIP_r:
"SKIP |[X]| ((? :Y -> Pf) [+] SKIP) =T
(? x:(Y - X) -> (SKIP |[X]| Pf x)) [+] SKIP"
apply (rule cspT_rw_left)
apply (rule cspT_commut)
apply (rule cspT_rw_left)
apply (rule cspT_SKIP_Parallel_Ext_choice_SKIP_l)
apply (rule cspT_rw_left)
apply (rule cspT_decompo)
apply (rule cspT_decompo)
apply (simp)
apply (rule cspT_commut)
apply (rule cspT_reflex)
apply (rule cspT_reflex)
done
lemmas cspT_SKIP_Parallel_Ext_choice_SKIP =
cspT_SKIP_Parallel_Ext_choice_SKIP_l
cspT_SKIP_Parallel_Ext_choice_SKIP_r
(*********************************************************
SKIP -- X
*********************************************************)
lemma cspT_SKIP_Hiding_Id:
"SKIP -- X =T SKIP"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule)
apply (simp add: in_traces)
apply (elim disjE conjE exE)
apply (simp_all)
(* <= *)
apply (rule)
apply (simp add: in_traces)
apply (elim disjE conjE exE)
apply (simp_all)
apply (rule_tac x="<>" in exI)
apply (simp)
apply (rule_tac x="<Tick>" in exI)
apply (simp)
done
(*********************************************************
SKIP and Hiding
*********************************************************)
(* p.288 version
"((? :Y -> Pf) [+] SKIP) -- X =T
IF (Y Int X = {}) THEN ((? x:Y -> (Pf x -- X)) [+] SKIP)
ELSE (((? x:(Y-X) -> (Pf x -- X)) [+] SKIP)
|~| (! x:(Y Int X) .. (Pf x -- X)))"
*)
lemma cspT_SKIP_Hiding_step:
"((? :Y -> Pf) [+] SKIP) -- X =T
((? x:(Y-X) -> (Pf x -- X)) [+] SKIP) |~| (! x:(Y Int X) .. (Pf x -- X))"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule, simp add: in_traces)
apply (elim conjE exE disjE)
apply (simp_all)
apply (case_tac "a : X", force)
apply (force)
(* <= *)
apply (rule)
apply (simp add: in_traces)
apply (elim conjE exE bexE disjE)
apply (simp_all)
apply (force)
apply (rule_tac x="<Ev a> ^^ sa" in exI)
apply (simp)
apply (force)
apply (rule_tac x="<Tick>" in exI)
apply (simp)
apply (force)
apply (rule_tac x="<Ev a> ^^ s" in exI)
apply (simp)
done
(*********************************************************
SKIP [[r]]
*********************************************************)
lemma cspT_SKIP_Renaming_Id:
"SKIP [[r]] =T SKIP"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule)
apply (simp add: in_traces)
apply (force)
(* <= *)
apply (rule)
apply (simp add: in_traces)
apply (force)
done
(*********************************************************
SKIP ;; P
*********************************************************)
lemma cspT_Seq_compo_unit_l: "SKIP ;; P =T P"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule, simp add: in_traces)
apply (force)
(* <= *)
apply (rule, simp add: in_traces)
apply (rule disjI2)
apply (rule_tac x="<>" in exI)
apply (rule_tac x="t" in exI)
apply (simp)
done
(*********************************************************
P ;; SKIP
*********************************************************)
lemma cspT_Seq_compo_unit_r: "P ;; SKIP =T P"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule, simp add: in_traces)
apply (elim conjE exE disjE)
apply (simp_all)
apply (rule memT_prefix_closed, simp)
apply (simp add: rmTick_prefix_rev)
apply (rule memT_prefix_closed, simp, simp)
(* <= *)
apply (rule, simp add: in_traces)
apply (insert trace_last_noTick_or_Tick)
apply (drule_tac x="t" in spec)
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>" in exI)
apply (simp)
done
lemmas cspT_Seq_compo_unit = cspT_Seq_compo_unit_l cspT_Seq_compo_unit_r
(*********************************************************
SKIP and Sequential composition
*********************************************************)
(* p.141 *)
lemma cspT_SKIP_Seq_compo_step:
"((? :X -> Pf) [> SKIP) ;; Q =T (? x:X -> (Pf x ;; Q)) [> Q"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule, simp add: in_traces)
apply (elim conjE exE disjE)
apply (simp_all)
apply (rule disjI1)
apply (fast)
apply (rule disjI2)
apply (rule disjI1)
apply (insert trace_nil_or_Tick_or_Ev)
apply (drule_tac x="s" in spec)
apply (elim disjE conjE exE)
apply (simp_all)
apply (simp add: appt_assoc)
apply (rule disjI2)
apply (rule_tac x="sb" in exI)
apply (rule_tac x="ta" in exI)
apply (simp)
(* <= *)
apply (rule, simp add: in_traces)
apply (elim conjE exE disjE)
apply (simp_all)
apply (rule disjI1)
apply (rule_tac x="<>" in exI)
apply (simp)
apply (rule disjI1)
apply (rule_tac x="<Ev a> ^^ sa" in exI)
apply (simp)
apply (rule disjI2)
apply (rule_tac x="<Ev a> ^^ sa" in exI)
apply (rule_tac x="ta" in exI)
apply (simp add: appt_assoc)
apply (rule disjI1)
apply (rule_tac x="<>" in exI)
apply (simp)
apply (rule disjI2)
apply (rule_tac x="<>" in exI)
apply (rule_tac x="t" in exI)
apply (simp)
done
(*********************************************************
SKIP |. n
*********************************************************)
lemma cspT_SKIP_Depth_rest:
"SKIP |. (Suc n) =T SKIP"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule)
apply (simp add: in_traces)
(* <= *)
apply (rule)
apply (simp add: in_traces)
apply (force)
done
(*********************************************************
cspT_SKIP
*********************************************************)
lemmas cspT_SKIP =
cspT_Parallel_term
cspT_Parallel_preterm
cspT_SKIP_Parallel_Ext_choice_SKIP
cspT_SKIP_Hiding_Id
cspT_SKIP_Hiding_step
cspT_SKIP_Renaming_Id
cspT_Seq_compo_unit
cspT_SKIP_Seq_compo_step
cspT_SKIP_Depth_rest
(*********************************************************
P [+] SKIP
*********************************************************)
(* p.141 *)
lemma cspT_Ext_choice_SKIP_resolve: "P [+] SKIP =T P [> SKIP"
apply (simp add: cspT_semantics)
apply (rule order_antisym)
(* => *)
apply (rule, simp add: in_traces)
(* <= *)
apply (rule, simp add: in_traces)
done
lemma cspT_Ext_choice_SKIP_resolve_sym: "P [> SKIP =T P [+] SKIP"
apply (rule cspT_sym)
apply (simp add: cspT_Ext_choice_SKIP_resolve)
done
end
lemma cspT_Parallel_term:
SKIP |[X]| SKIP =T SKIP
lemma cspT_Parallel_preterm_l:
SKIP |[X]| ? :Y -> Qf =T ? x:(Y - X) -> (SKIP |[X]| Qf x)
lemma cspT_Parallel_preterm_r:
? :Y -> Pf |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP)
lemmas cspT_Parallel_preterm:
SKIP |[X]| ? :Y -> Qf =T ? x:(Y - X) -> (SKIP |[X]| Qf x)
? :Y -> Pf |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP)
lemmas cspT_Parallel_preterm:
SKIP |[X]| ? :Y -> Qf =T ? x:(Y - X) -> (SKIP |[X]| Qf x)
? :Y -> Pf |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP)
lemma cspT_SKIP_Parallel_Ext_choice_SKIP_l:
(? :Y -> Pf [+] SKIP) |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP) [+] SKIP
lemma cspT_SKIP_Parallel_Ext_choice_SKIP_r:
SKIP |[X]| (? :Y -> Pf [+] SKIP) =T ? x:(Y - X) -> (SKIP |[X]| Pf x) [+] SKIP
lemmas cspT_SKIP_Parallel_Ext_choice_SKIP:
(? :Y -> Pf [+] SKIP) |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP) [+] SKIP
SKIP |[X]| (? :Y -> Pf [+] SKIP) =T ? x:(Y - X) -> (SKIP |[X]| Pf x) [+] SKIP
lemmas cspT_SKIP_Parallel_Ext_choice_SKIP:
(? :Y -> Pf [+] SKIP) |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP) [+] SKIP
SKIP |[X]| (? :Y -> Pf [+] SKIP) =T ? x:(Y - X) -> (SKIP |[X]| Pf x) [+] SKIP
lemma cspT_SKIP_Hiding_Id:
SKIP -- X =T SKIP
lemma cspT_SKIP_Hiding_step:
(? :Y -> Pf [+] SKIP) -- X =T ? x:(Y - X) -> Pf x -- X [+] SKIP |~| ! x:(Y ∩ X) .. Pf x -- X
lemma cspT_SKIP_Renaming_Id:
SKIP [[r]] =T SKIP
lemma cspT_Seq_compo_unit_l:
SKIP ;; P =T P
lemma cspT_Seq_compo_unit_r:
P ;; SKIP =T P
lemmas cspT_Seq_compo_unit:
SKIP ;; P =T P
P ;; SKIP =T P
lemmas cspT_Seq_compo_unit:
SKIP ;; P =T P
P ;; SKIP =T P
lemma cspT_SKIP_Seq_compo_step:
(? :X -> Pf [> SKIP) ;; Q =T ? x:X -> (Pf x ;; Q) [> Q
lemma cspT_SKIP_Depth_rest:
SKIP |. Suc n =T SKIP
lemmas cspT_SKIP:
SKIP |[X]| SKIP =T SKIP
SKIP |[X]| ? :Y -> Qf =T ? x:(Y - X) -> (SKIP |[X]| Qf x)
? :Y -> Pf |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP)
(? :Y -> Pf [+] SKIP) |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP) [+] SKIP
SKIP |[X]| (? :Y -> Pf [+] SKIP) =T ? x:(Y - X) -> (SKIP |[X]| Pf x) [+] SKIP
SKIP -- X =T SKIP
(? :Y -> Pf [+] SKIP) -- X =T ? x:(Y - X) -> Pf x -- X [+] SKIP |~| ! x:(Y ∩ X) .. Pf x -- X
SKIP [[r]] =T SKIP
SKIP ;; P =T P
P ;; SKIP =T P
(? :X -> Pf [> SKIP) ;; Q =T ? x:X -> (Pf x ;; Q) [> Q
SKIP |. Suc n =T SKIP
lemmas cspT_SKIP:
SKIP |[X]| SKIP =T SKIP
SKIP |[X]| ? :Y -> Qf =T ? x:(Y - X) -> (SKIP |[X]| Qf x)
? :Y -> Pf |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP)
(? :Y -> Pf [+] SKIP) |[X]| SKIP =T ? x:(Y - X) -> (Pf x |[X]| SKIP) [+] SKIP
SKIP |[X]| (? :Y -> Pf [+] SKIP) =T ? x:(Y - X) -> (SKIP |[X]| Pf x) [+] SKIP
SKIP -- X =T SKIP
(? :Y -> Pf [+] SKIP) -- X =T ? x:(Y - X) -> Pf x -- X [+] SKIP |~| ! x:(Y ∩ X) .. Pf x -- X
SKIP [[r]] =T SKIP
SKIP ;; P =T P
P ;; SKIP =T P
(? :X -> Pf [> SKIP) ;; Q =T ? x:X -> (Pf x ;; Q) [> Q
SKIP |. Suc n =T SKIP
lemma cspT_Ext_choice_SKIP_resolve:
P [+] SKIP =T P [> SKIP
lemma cspT_Ext_choice_SKIP_resolve_sym:
P [> SKIP =T P [+] SKIP