Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F
theory CSP_F_law_step_ext(*-------------------------------------------* | CSP-Prover on Isabelle2005 | | December 2005 (modified) | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_F_law_step_ext = CSP_F_law_basic + CSP_T_law_step_ext: (***************************************************************** 1. step laws 2. 3. 4. *****************************************************************) (********************************************************* (P1 [> P2) |[X]| (Q1 [> Q2) *********************************************************) (* The following law in p.288 does not hold. *) (* (P1 [> P2) |[X]| (Q1 [> Q2) *) (* =F (P1 |[X]| Q1) [> ((P2 |[X]| (Q1 [> Q2)) |~| ((P1 [> P2) |[X]| Q2)) *) (* *) (* a counter example: *) (* P1 = a -> STOP, P2 = STOP, Q1 = STOP, Q2 = b -> STOP, X = {} *) (* where (a ~= b) *) (* *) (* check the following lemmas *) lemma "a ~= b ==> (<Ev a>, {Ev b}) ~:f failures ((a -> STOP [> STOP) |[{}]| (STOP [> (b -> STOP)))" apply (simp add: in_failures in_traces) apply (intro allI impI) apply (simp add: par_tr_Ev) apply (erule disjE) apply (auto) done lemma "(<Ev a>, {Ev b}) :f failures (((a -> STOP) |[{}]| STOP) [> ((STOP |[{}]| (STOP [> (b -> STOP))) |~| (((a -> STOP [> STOP) |[X]| (b -> STOP)))))" apply (simp add: in_failures in_traces) apply (rule disjI1) apply (rule_tac x="{Ev b}" in exI) apply (rule_tac x="{Ev b}" in exI) apply (simp) apply (rule_tac x="<Ev a>" in exI) apply (simp add: par_tr_nil_right) done (********************************************************* (P [> Q) |[X]| (? :Y -> Rf) *********************************************************) (* The following law in p.289 does not hold. *) (* *) (* (P [> Q) |[X]| (? :Y -> Rf) =F *) (* (? x:(Y - X) -> ((P [> Q) |[X]| Rf x)) *) (* [+] ((P |[X]| (? :Y -> Rf)) [> (Q |[X]| (? :Y -> Rf))) *) (* *) (* a counter example: *) (* P = STOP, Q = b -> STOP, Y = {a}, Rf = (%x. STOP), X = {} *) (* where (a ~= b) *) (* *) (* check the following lemmas *) lemma "a ~= b ==> (<Ev a>, {Ev b}) ~:f failures ((STOP [> (b -> STOP)) |[{}]| (? x:{a} -> STOP))" apply (simp add: in_failures in_traces) apply (intro allI impI) apply (simp add: par_tr_Ev) apply (erule disjE) apply (auto) done lemma "a ~= b ==> (<Ev a>, {Ev b}) :f failures ((? x:({a} - {}) -> ((STOP [> (b -> STOP)) |[{}]| STOP)) [+] ((STOP |[{}]| (? x:{a} -> STOP)) [> ((b -> STOP) |[{}]| (? x:{a} -> STOP))))" apply (fold Timeout_def) apply (simp add: in_failures in_failures_Timeout in_traces) apply (rule disjI2) apply (rule disjI2) apply (rule_tac x="{Ev b}" in exI) apply (rule_tac x="{Ev b}" in exI) apply (simp) apply (rule_tac x="<Ev a>" in exI) apply (simp add: par_tr_nil_left) done (********************************************************* Parallel expansion & distribbution *********************************************************) lemma cspF_Parallel_Timeout_split: "((? :Y -> Pf) [> P) |[X]| ((? :Z -> Qf) [> Q) =F (? x:((X Int Y Int Z) Un (Y - X) Un (Z - X)) -> IF (x : X) THEN (Pf x |[X]| Qf x) ELSE IF (x : Y & x : Z) THEN ((Pf x |[X]| ((? x:Z -> Qf x) [> Q)) |~| (((? x:Y -> Pf x) [> P) |[X]| Qf x)) ELSE IF (x : Y) THEN (Pf x |[X]| ((? x:Z -> Qf x) [> Q)) ELSE (((? x:Y -> Pf x) [> P) |[X]| Qf x)) [> (((P |[X]| ((? :Z -> Qf) [> Q)) |~| (((? :Y -> Pf) [> P) |[X]| Q)))" apply (simp add: cspF_cspT_semantics) apply (simp add: cspT_Parallel_Timeout_split) apply (fold Timeout_def) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (force) apply (rule disjI1) apply (rule_tac x="Y" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sa" in exI) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (simp) apply (rule disjI1) apply (rule_tac x="Y" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sa" in exI) apply (rule_tac x="<>" in exI) apply (simp) apply (rule disjI2) apply (rule disjI1) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Z" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp) apply (rule disjI2) apply (rule disjI1) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Z" in exI) apply (simp) apply (rule_tac x="<>" in exI) apply (rule_tac x="t" in exI) apply (simp) (* main part *) apply (case_tac "s = <>", simp, simp) apply (rule disjI2) apply (rule disjI2) apply (simp add: par_tr_head_Ev_Ev) apply (elim exE disjE) apply (rule_tac x="c" in exI) apply (rule_tac x="v" in exI) apply (elim conjE disjE) (* sync *) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* left *) apply (simp) apply (case_tac "c:Z") apply (simp) apply (rule disjI1) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* right *) apply (simp) apply (case_tac "c:Y") apply (simp) apply (rule disjI2) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* others *) apply (simp add: in_traces) apply (simp add: in_traces) apply (simp add: in_traces) (* <= *) apply (rule) apply (simp add: in_failures_Timeout in_failures) apply (elim conjE exE disjE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* main part *) (* sync *) apply (simp add: in_failures_Parallel) apply (elim disjE conjE exE) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) (* no_sync *) apply (simp add: in_failures_IF) apply (case_tac "a:Z") apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) (* a ~: Z *) apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (simp add: in_traces) (* no_sync *) apply (simp add: in_failures_IF) apply (case_tac "a:Y") apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) (* a ~: Y *) apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) (* others *) apply (simp add: in_traces) done (********************************************************* Parallel expansion & distribbution 2 *********************************************************) (*** left ****) lemma cspF_Parallel_Timeout_input_l: "((? :Y -> Pf) [> P) |[X]| (? :Z -> Qf) =F (? x:((X Int Y Int Z) Un (Y - X) Un (Z - X)) -> IF (x : X) THEN (Pf x |[X]| Qf x) ELSE IF (x : Y & x : Z) THEN ((Pf x |[X]| (? x:Z -> Qf x)) |~| (((? x:Y -> Pf x) [> P) |[X]| Qf x)) ELSE IF (x : Y) THEN (Pf x |[X]| (? x:Z -> Qf x)) ELSE (((? x:Y -> Pf x) [> P) |[X]| Qf x)) [> (((P |[X]| (? :Z -> Qf))))" apply (simp add: cspF_cspT_semantics) apply (simp add: cspT_Parallel_Timeout_input) apply (fold Timeout_def) apply (rule order_antisym) (* => *) apply (rule) apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (force) apply (rule disjI1) apply (rule_tac x="Y" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sa" in exI) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (simp) apply (simp add: par_tr_nil_right) apply (rule disjI2) apply (rule_tac x="a" in exI) apply (rule_tac x="sb" in exI) apply (elim conjE) apply (simp add: image_iff) apply (case_tac "a : Z") apply (simp) apply (rule disjI1) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<>" in exI) apply (simp add: par_tr_nil_right) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<>" in exI) apply (simp add: par_tr_nil_right) apply (simp add: in_traces) (* main part *) apply (case_tac "s = <>", simp, simp) apply (rule disjI2) apply (simp add: par_tr_head_Ev_Ev) apply (elim exE disjE) apply (rule_tac x="c" in exI) apply (rule_tac x="v" in exI) apply (elim conjE disjE) (* sync *) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* left *) apply (simp) apply (case_tac "c:Z") apply (simp) apply (rule disjI1) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* right *) apply (simp) apply (case_tac "c:Y") apply (simp) apply (rule disjI2) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* others *) apply (simp add: in_traces) (* <= *) apply (rule) apply (simp add: in_failures_Timeout in_failures) apply (elim conjE exE disjE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sa" in exI) apply (rule_tac x="<>" in exI) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (force) (* main part *) (* sync *) apply (simp add: in_failures_Parallel) apply (elim disjE conjE exE) apply (simp) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) (* no_sync *) apply (simp add: in_failures_IF) apply (case_tac "a:Z") apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev aa> ^^ sc" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (simp add: in_traces) (* a ~: Z *) apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="<>" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (simp add: in_traces) (* no_sync *) apply (simp add: in_failures_IF) apply (case_tac "a:Y") apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev a> ^^ sb" in exI) apply (rule_tac x="<Ev aa> ^^ sc" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev aa> ^^ sc" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (simp add: in_traces) (* a ~: Y *) apply (simp add: in_failures_Timeout in_failures) apply (elim disjE conjE exE) apply (simp_all) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="sb" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (rule_tac x="Ya" in exI) apply (rule_tac x="Za" in exI) apply (simp) apply (rule_tac x="<Ev aa> ^^ sc" in exI) apply (rule_tac x="<Ev a> ^^ t" in exI) apply (simp add: par_tr_head) apply (simp add: in_traces) (* others *) apply (simp add: in_traces) done (*** right ****) lemma cspF_Parallel_Timeout_input_r: "(? :Y -> Pf) |[X]| ((? :Z -> Qf) [> Q) =F (? x:((X Int Y Int Z) Un (Y - X) Un (Z - X)) -> IF (x : X) THEN (Pf x |[X]| Qf x) ELSE IF (x : Y & x : Z) THEN ((Pf x |[X]| ((? x:Z -> Qf x) [> Q)) |~| ((? x:Y -> Pf x) |[X]| Qf x)) ELSE IF (x : Y) THEN (Pf x |[X]| ((? x:Z -> Qf x) [> Q)) ELSE ((? x:Y -> Pf x) |[X]| Qf x)) [> ((? :Y -> Pf) |[X]| Q)" apply (rule cspF_rw_left) apply (rule cspF_commut) apply (rule cspF_rw_left) apply (rule cspF_Parallel_Timeout_input_l) apply (rule cspF_decompo) apply (rule cspF_decompo) apply (rule cspF_decompo) apply (force) apply (rule cspF_decompo) apply (simp) apply (rule cspF_commut) apply (case_tac "a : Z & a : Y") apply (simp) apply (rule cspF_rw_left) apply (rule cspF_IF_True) apply (rule cspF_rw_right) apply (rule cspF_IF_True) apply (rule cspF_rw_left) apply (rule cspF_commut) apply (rule cspF_decompo) apply (rule cspF_commut) apply (rule cspF_commut) apply (simp (no_asm_simp)) apply (rule cspF_rw_left) apply (rule cspF_IF_False) apply (rule cspF_rw_right) apply (subgoal_tac "~ (a : Y & a : Z)") apply (simp (no_asm_simp)) apply (rule cspF_IF_False) apply (force) apply (case_tac "a : Z") apply (simp) apply (rule cspF_rw_left) apply (rule cspF_IF_True) apply (rule cspF_rw_right) apply (rule cspF_IF_False) apply (rule cspF_commut) apply (simp) apply (rule cspF_rw_left) apply (rule cspF_IF_False) apply (rule cspF_rw_right) apply (rule cspF_IF_True) apply (rule cspF_commut) apply (rule cspF_reflex) apply (rule cspF_commut) done lemmas cspF_Parallel_Timeout_input = cspF_Parallel_Timeout_input_l cspF_Parallel_Timeout_input_r (*** cspF_step_ext ***) lemmas cspF_step_ext = cspF_Parallel_Timeout_split cspF_Parallel_Timeout_input end
lemma
a ≠ b ==> (<Ev a>, {Ev b}) ~:f failures ((a -> STOP [> STOP) ||| (STOP [> b -> STOP))
lemma
(<Ev a>, {Ev b}) :f failures (a -> STOP ||| STOP [> (STOP ||| (STOP [> b -> STOP) |~| (a -> STOP [> STOP) |[X]| b -> STOP))
lemma
a ≠ b ==> (<Ev a>, {Ev b}) ~:f failures ((STOP [> b -> STOP) ||| ? x:{a} -> STOP)
lemma
a ≠ b ==> (<Ev a>, {Ev b}) :f failures (? x:({a} - {}) -> ((STOP [> b -> STOP) ||| STOP) [+] STOP ||| ? x:{a} -> STOP [> b -> STOP ||| ? x:{a} -> STOP)
lemma cspF_Parallel_Timeout_split:
(? :Y -> Pf [> P) |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE (? :Y -> Pf [> P) |[X]| Qf x [> (P |[X]| (? :Z -> Qf [> Q) |~| (? :Y -> Pf [> P) |[X]| Q)
lemma cspF_Parallel_Timeout_input_l:
(? :Y -> Pf [> P) |[X]| ? :Z -> Qf =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| ? :Z -> Qf |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| ? :Z -> Qf ELSE (? :Y -> Pf [> P) |[X]| Qf x [> P |[X]| ? :Z -> Qf
lemma cspF_Parallel_Timeout_input_r:
? :Y -> Pf |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| ? :Y -> Pf |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE ? :Y -> Pf |[X]| Qf x [> ? :Y -> Pf |[X]| Q
lemmas cspF_Parallel_Timeout_input:
(? :Y -> Pf [> P) |[X]| ? :Z -> Qf =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| ? :Z -> Qf |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| ? :Z -> Qf ELSE (? :Y -> Pf [> P) |[X]| Qf x [> P |[X]| ? :Z -> Qf
? :Y -> Pf |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| ? :Y -> Pf |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE ? :Y -> Pf |[X]| Qf x [> ? :Y -> Pf |[X]| Q
lemmas cspF_Parallel_Timeout_input:
(? :Y -> Pf [> P) |[X]| ? :Z -> Qf =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| ? :Z -> Qf |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| ? :Z -> Qf ELSE (? :Y -> Pf [> P) |[X]| Qf x [> P |[X]| ? :Z -> Qf
? :Y -> Pf |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| ? :Y -> Pf |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE ? :Y -> Pf |[X]| Qf x [> ? :Y -> Pf |[X]| Q
lemmas cspF_step_ext:
(? :Y -> Pf [> P) |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE (? :Y -> Pf [> P) |[X]| Qf x [> (P |[X]| (? :Z -> Qf [> Q) |~| (? :Y -> Pf [> P) |[X]| Q)
(? :Y -> Pf [> P) |[X]| ? :Z -> Qf =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| ? :Z -> Qf |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| ? :Z -> Qf ELSE (? :Y -> Pf [> P) |[X]| Qf x [> P |[X]| ? :Z -> Qf
? :Y -> Pf |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| ? :Y -> Pf |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE ? :Y -> Pf |[X]| Qf x [> ? :Y -> Pf |[X]| Q
lemmas cspF_step_ext:
(? :Y -> Pf [> P) |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE (? :Y -> Pf [> P) |[X]| Qf x [> (P |[X]| (? :Z -> Qf [> Q) |~| (? :Y -> Pf [> P) |[X]| Q)
(? :Y -> Pf [> P) |[X]| ? :Z -> Qf =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| ? :Z -> Qf |~| (? :Y -> Pf [> P) |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| ? :Z -> Qf ELSE (? :Y -> Pf [> P) |[X]| Qf x [> P |[X]| ? :Z -> Qf
? :Y -> Pf |[X]| (? :Z -> Qf [> Q) =F ? x:(X ∩ Y ∩ Z ∪ (Y - X) ∪ (Z - X)) -> IF (x ∈ X) THEN Pf x |[X]| Qf x ELSE IF (x ∈ Y ∧ x ∈ Z) THEN Pf x |[X]| (? :Z -> Qf [> Q) |~| ? :Y -> Pf |[X]| Qf x ELSE IF (x ∈ Y) THEN Pf x |[X]| (? :Z -> Qf [> Q) ELSE ? :Y -> Pf |[X]| Qf x [> ? :Y -> Pf |[X]| Q