Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T
theory CSP_T_law_DIV(*-------------------------------------------* | CSP-Prover on Isabelle2005 | | December 2005 | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_T_law_DIV imports CSP_T_law_basic begin (***************************************************************** 1. DIV |[X]| DIV 2. DIV |[X]| P 3. P |[X]| DIV 4. DIV -- X 5. DIV [[r]] 6. DIV ;; P 7. P ;; DIV 8. DIV |. n *****************************************************************) (********************************************************* DIV |[X]| DIV *********************************************************) (* T *) lemma cspT_DIV_Parallel: "DIV |[X]| DIV =T[M1,M2] DIV" apply (simp add: cspT_semantics) apply (rule order_antisym) apply (rule, simp add: in_traces)+ done (********************************************************* DIV |[X]| P *********************************************************) lemma cspT_DIV_Parallel_step_l: "DIV |[X]| (? :Y -> Qf) =T[M,M] (? x:(Y-X) -> (DIV |[X]| Qf x)) [+] DIV" 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="s" in exI, simp) (* <= *) apply (rule) apply (simp add: in_traces) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="<Ev a> ^^ ta" in exI, simp) apply (simp add: par_tr_head) done (*** r ***) lemma cspT_DIV_Parallel_step_r: "(? :Y -> Pf) |[X]| DIV =T[M,M] (? x:(Y - X) -> (Pf x |[X]| DIV)) [+] DIV" apply (rule cspT_rw_left) apply (rule cspT_commut) apply (rule cspT_rw_left) apply (rule cspT_DIV_Parallel_step_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_DIV_Parallel_step = cspT_DIV_Parallel_step_l cspT_DIV_Parallel_step_r (********************************************************* DIV and Parallel *********************************************************) lemma cspT_DIV_Parallel_Ext_choice_DIV_l: "(P [+] DIV) |[X]| DIV =T[M,M] (P |[X]| DIV)" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule, simp add: in_traces) apply (elim conjE exE disjE) apply (simp_all) apply (fast) (* <= *) apply (rule, simp add: in_traces) apply (fast) done lemma cspT_DIV_Parallel_Ext_choice_DIV_r: "DIV |[X]| (P [+] DIV) =T[M,M] (DIV |[X]| P)" apply (rule cspT_rw_left) apply (rule cspT_commut) apply (rule cspT_rw_left) apply (rule cspT_DIV_Parallel_Ext_choice_DIV_l) apply (rule cspT_commut) done lemmas cspT_DIV_Parallel_Ext_choice_DIV = cspT_DIV_Parallel_Ext_choice_DIV_l cspT_DIV_Parallel_Ext_choice_DIV_r (********************************************************* DIV -- X *********************************************************) lemma cspT_DIV_Hiding_Id: "DIV -- X =T[M1,M2] DIV" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_traces) (* <= *) apply (rule) apply (simp add: in_traces) done (*** div-hide-step ***) lemma cspT_DIV_Hiding_step: "((? :Y -> Pf) [+] DIV) -- X =T[M,M] (((? x:(Y-X) -> (Pf x -- X)) [+] DIV) |~| (! 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="<Ev a> ^^ s" in exI) apply (simp) done (********************************************************* DIV [[r]] *********************************************************) lemma cspT_DIV_Renaming_Id: "DIV [[r]] =T[M1,M2] DIV" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_traces) (* <= *) apply (rule) apply (simp add: in_traces) done (********************************************************* DIV ;; P *********************************************************) lemma cspT_DIV_Seq_compo: "DIV ;; P =T[M1,M2] DIV" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule, simp add: in_traces) apply (force) (* <= *) apply (rule, simp add: in_traces) done (********************************************************* DIV and Sequential composition *********************************************************) lemma cspT_DIV_Seq_compo_step: "((? :X -> Pf) [> DIV) ;; Q =T[M,M] (? x:X -> (Pf x ;; Q)) [> DIV" 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) done (********************************************************* DIV |. n *********************************************************) lemma cspT_DIV_Depth_rest: "DIV |. n =T[M1,M2] DIV" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_traces) (* <= *) apply (rule) apply (simp add: in_traces) done (********************************************************* cspT_DIV *********************************************************) lemmas cspT_DIV = cspT_DIV_Parallel cspT_DIV_Parallel_step cspT_DIV_Parallel_Ext_choice_DIV cspT_DIV_Hiding_Id cspT_DIV_Hiding_step cspT_DIV_Renaming_Id cspT_DIV_Seq_compo cspT_DIV_Seq_compo_step cspT_DIV_Depth_rest (********************************************************* P [+] DIV *********************************************************) lemma cspT_Ext_choice_DIV_resolve: "P [+] DIV =T[M,M] P [> DIV" apply (simp add: cspT_semantics) apply (rule order_antisym) (* => *) apply (rule, simp add: in_traces) (* <= *) apply (rule, simp add: in_traces) done end
lemma cspT_DIV_Parallel:
DIV |[X]| DIV =T[M1.0,M2.0] DIV
lemma cspT_DIV_Parallel_step_l:
DIV |[X]| ? :Y -> Qf =T[M,M] ? x:(Y - X) -> (DIV |[X]| Qf x) [+] DIV
lemma cspT_DIV_Parallel_step_r:
? :Y -> Pf |[X]| DIV =T[M,M] ? x:(Y - X) -> (Pf x |[X]| DIV) [+] DIV
lemmas cspT_DIV_Parallel_step:
DIV |[X]| ? :Y -> Qf =T[M,M] ? x:(Y - X) -> (DIV |[X]| Qf x) [+] DIV
? :Y -> Pf |[X]| DIV =T[M,M] ? x:(Y - X) -> (Pf x |[X]| DIV) [+] DIV
lemmas cspT_DIV_Parallel_step:
DIV |[X]| ? :Y -> Qf =T[M,M] ? x:(Y - X) -> (DIV |[X]| Qf x) [+] DIV
? :Y -> Pf |[X]| DIV =T[M,M] ? x:(Y - X) -> (Pf x |[X]| DIV) [+] DIV
lemma cspT_DIV_Parallel_Ext_choice_DIV_l:
(P [+] DIV) |[X]| DIV =T[M,M] P |[X]| DIV
lemma cspT_DIV_Parallel_Ext_choice_DIV_r:
DIV |[X]| (P [+] DIV) =T[M,M] DIV |[X]| P
lemmas cspT_DIV_Parallel_Ext_choice_DIV:
(P [+] DIV) |[X]| DIV =T[M,M] P |[X]| DIV
DIV |[X]| (P [+] DIV) =T[M,M] DIV |[X]| P
lemmas cspT_DIV_Parallel_Ext_choice_DIV:
(P [+] DIV) |[X]| DIV =T[M,M] P |[X]| DIV
DIV |[X]| (P [+] DIV) =T[M,M] DIV |[X]| P
lemma cspT_DIV_Hiding_Id:
DIV -- X =T[M1.0,M2.0] DIV
lemma cspT_DIV_Hiding_step:
(? :Y -> Pf [+] DIV) -- X =T[M,M] ? x:(Y - X) -> Pf x -- X [+] DIV |~| ! x:(Y ∩ X) .. Pf x -- X
lemma cspT_DIV_Renaming_Id:
DIV [[r]] =T[M1.0,M2.0] DIV
lemma cspT_DIV_Seq_compo:
DIV ;; P =T[M1.0,M2.0] DIV
lemma cspT_DIV_Seq_compo_step:
(? :X -> Pf [> DIV) ;; Q =T[M,M] ? x:X -> (Pf x ;; Q) [> DIV
lemma cspT_DIV_Depth_rest:
DIV |. n =T[M1.0,M2.0] DIV
lemmas cspT_DIV:
DIV |[X]| DIV =T[M1.0,M2.0] DIV
DIV |[X]| ? :Y -> Qf =T[M,M] ? x:(Y - X) -> (DIV |[X]| Qf x) [+] DIV
? :Y -> Pf |[X]| DIV =T[M,M] ? x:(Y - X) -> (Pf x |[X]| DIV) [+] DIV
(P [+] DIV) |[X]| DIV =T[M,M] P |[X]| DIV
DIV |[X]| (P [+] DIV) =T[M,M] DIV |[X]| P
DIV -- X =T[M1.0,M2.0] DIV
(? :Y -> Pf [+] DIV) -- X =T[M,M] ? x:(Y - X) -> Pf x -- X [+] DIV |~| ! x:(Y ∩ X) .. Pf x -- X
DIV [[r]] =T[M1.0,M2.0] DIV
DIV ;; P =T[M1.0,M2.0] DIV
(? :X -> Pf [> DIV) ;; Q =T[M,M] ? x:X -> (Pf x ;; Q) [> DIV
DIV |. n =T[M1.0,M2.0] DIV
lemmas cspT_DIV:
DIV |[X]| DIV =T[M1.0,M2.0] DIV
DIV |[X]| ? :Y -> Qf =T[M,M] ? x:(Y - X) -> (DIV |[X]| Qf x) [+] DIV
? :Y -> Pf |[X]| DIV =T[M,M] ? x:(Y - X) -> (Pf x |[X]| DIV) [+] DIV
(P [+] DIV) |[X]| DIV =T[M,M] P |[X]| DIV
DIV |[X]| (P [+] DIV) =T[M,M] DIV |[X]| P
DIV -- X =T[M1.0,M2.0] DIV
(? :Y -> Pf [+] DIV) -- X =T[M,M] ? x:(Y - X) -> Pf x -- X [+] DIV |~| ! x:(Y ∩ X) .. Pf x -- X
DIV [[r]] =T[M1.0,M2.0] DIV
DIV ;; P =T[M1.0,M2.0] DIV
(? :X -> Pf [> DIV) ;; Q =T[M,M] ? x:X -> (Pf x ;; Q) [> DIV
DIV |. n =T[M1.0,M2.0] DIV
lemma cspT_Ext_choice_DIV_resolve:
P [+] DIV =T[M,M] P [> DIV