Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F
theory CSP_F_surj (*-------------------------------------------*
| CSP-Prover on Isabelle2004 |
| August 2005 (modified) |
| |
| CSP-Prover on Isabelle2005 |
| October 2005 (modified) |
| April 2006 (modified) |
| |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_F_surj = CSP_F_domain + CSP_T_surj:
(* The following simplification rules are deleted in this theory file *)
(* because they unexpectly rewrite UnionT and InterT. *)
(* disj_not1: (~ P | Q) = (P --> Q) *)
declare disj_not1 [simp del]
(*********************************************************
inverse function : DomT => proc
*********************************************************)
consts
head_failures :: "'a setF => 'a set"
tail_failures :: "'a setF => 'a => 'a setF"
Proc_F_rec :: "nat => 'a domF => 'a proc"
Proc_F :: "'a domF => 'a proc"
defs
head_failures_def :
"head_failures F == {a. EX t X. (<Ev a> ^^ t, X) :f F}"
tail_failures_def :
"tail_failures F == (%a. {(t,X). (<Ev a> ^^ t, X) :f F}f)"
primrec
"Proc_F_rec 0 = (%SF. !set X:{X. EX Y. (<>,Y) :f sndF SF &
Ev ` X = Evset - Y & Tick : Y &
(ALL a:X. <Ev a> :t fstF SF)} ..
(? x:X -> DIV))"
"Proc_F_rec (Suc n)
= (%SF. (! a:(head_failures (sndF SF)) .. a ->
Proc_F_rec n (tail_traces (fstF SF) a ,,
tail_failures (sndF SF) a)) [+] DIV)"
defs
Proc_F_def :
"Proc_F SF == Proc_T (fstF SF) |~| (!nat n .. Proc_F_rec n SF)"
(*********************************************************
lemmas
*********************************************************)
(* tail in setF *)
lemma tail_failures_setF: "{(t,X). (<Ev a> ^^ t, X) :f F} : setF"
apply (simp add: setF_def)
apply (simp add: HC_F2_def)
apply (intro allI impI)
apply (rule memF_F2)
by (auto)
(* tail *)
lemma in_tail_failures:
"((s,X) :f tail_failures F a) = ((<Ev a> ^^ s, X) :f F)"
apply (simp add: tail_failures_def)
apply (simp add: tail_failures_setF CollectF_open_memF)
done
(* head & tail *)
lemma head_tail_failures_only_if:
"(<Ev a> ^^ s, X) :f F ==> a : head_failures F & (s,X) :f tail_failures F a"
apply (simp add: in_tail_failures)
apply (auto simp add: head_failures_def)
done
(* iff *)
lemma head_tail_failures:
"(<Ev a> ^^ s, X) :f F = (a : head_failures F & (s,X) :f tail_failures F a)"
apply (rule iffI)
apply (simp add: head_tail_failures_only_if)
apply (simp add: in_tail_failures)
done
(*** domF ***)
(* head *)
lemma head_failures_traces:
"a : head_failures (sndF SF) ==> a : head_traces (fstF SF)"
apply (simp add: head_failures_def)
apply (simp add: head_traces_def)
apply (elim exE)
apply (rule_tac x="t" in exI)
apply (simp add: pairF_domF_T2)
done
(* T2 *)
lemma tail_traces_failures_T2:
"HC_T2 (tail_traces (fstF SF) a , tail_failures (sndF SF) a)"
apply (simp add: HC_T2_def in_traces in_failures)
apply (intro allI impI)
apply (elim exE)
apply (simp add: in_tail_failures)
apply (subgoal_tac "a : head_traces (fstF SF)")
apply (simp add: in_tail_traces)
apply (simp add: pairF_domF_T2)
apply (simp add: head_tail_failures)
apply (simp add: head_failures_traces)
done
(* F3 *)
lemma tail_traces_failures_F3:
"a : head_traces (fstF SF) ==>
HC_F3 (tail_traces (fstF SF) a , tail_failures (sndF SF) a)"
apply (simp add: HC_F3_def in_traces in_failures)
apply (intro allI impI)
apply (elim conjE)
apply (simp add: in_tail_failures)
apply (simp add: in_tail_traces)
apply (rule pairF_domF_F3)
apply (simp)
apply (simp)
apply (simp add: appt_assoc_sym)
done
(* T3_F4 *)
lemma tail_traces_failures_T3_F4:
"a : head_traces (fstF SF) ==>
HC_T3_F4 (tail_traces (fstF SF) a , tail_failures (sndF SF) a)"
apply (simp add: HC_T3_F4_def in_traces in_failures)
apply (intro allI impI)
apply (elim conjE)
apply (simp add: in_tail_failures)
apply (simp add: in_tail_traces)
apply (simp add: appt_assoc_sym)
apply (simp add: pairF_domF_F4)
apply (simp add: pairF_domF_T3)
done
lemma tail_traces_failures_domF:
"a : head_traces (fstF SF) | a : head_failures (sndF SF)
==> (tail_traces (fstF SF) a , tail_failures (sndF SF) a) : domF"
apply (simp add: domF_iff)
apply (subgoal_tac "a : head_traces (fstF SF)")
apply (simp add: tail_traces_failures_T2)
apply (simp add: tail_traces_failures_F3)
apply (simp add: tail_traces_failures_T3_F4)
apply (auto simp add: head_failures_traces)
done
(*-------------------------------------*
| failures (Proc_T_rec n) --> Tick |
*-------------------------------------*)
lemma failures_Proc_T_rec_noTick_lm:
"ALL s T. ((s, X) :f failures (Proc_T_rec n T) & noTick s)
--> (EX t. s ^^ t ^^ <Tick> :t T & noTick t)"
apply (induct_tac n)
(* base *)
apply (simp add: in_traces)
apply (simp add: in_failures)
(* step *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (elim conjE exE disjE bexE)
apply (simp_all)
apply (drule_tac x="sa" in spec)
apply (drule_tac x="(tail_traces T a)" in spec)
apply (simp)
apply (elim conjE exE)
apply (rule_tac x="t" in exI)
apply (simp add: appt_assoc)
apply (simp add: head_tail_traces)
apply (simp add: in_traces)
apply (simp add: in_traces)
apply (case_tac "<Tick> :t T")
apply (simp add: in_failures)
apply (erule disjE)
apply (rule_tac x="<>" in exI)
apply (simp)
apply (simp)
apply (simp add: in_failures)
done
lemma failures_Proc_T_rec_noTick:
"[| (s, X) :f failures (Proc_T_rec n T) ; noTick s|]
==> (EX t. s ^^ t ^^ <Tick> :t T & noTick t)"
by (simp add: failures_Proc_T_rec_noTick_lm)
lemma failures_Proc_T_rec_lm:
"ALL s T. ((s, X) :f failures (Proc_T_rec n T))
--> s :t T"
apply (induct_tac n)
(* base *)
apply (simp add: in_traces)
apply (simp add: in_failures)
(* step *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (elim conjE exE disjE bexE)
apply (simp_all)
apply (drule_tac x="sa" in spec)
apply (drule_tac x="(tail_traces T a)" in spec)
apply (simp add: head_tail_traces)
apply (case_tac "<Tick> :t T")
apply (auto simp add: in_failures)
done
lemma failures_Proc_T_rec:
"(s, X) :f failures (Proc_T_rec n T) ==> s :t T"
by (simp add: failures_Proc_T_rec_lm)
lemma failures_Proc_T_rec_T3:
"[| (s, X) :f failures (Proc_T_rec n (fstF SF)) ; noTick s |]
==> (EX t. (s ^^ t ^^ <Tick>,Y) :f (sndF SF) & noTick t)"
apply (insert failures_Proc_T_rec_noTick_lm[of X n])
apply (drule_tac x="s" in spec)
apply (drule_tac x="fstF SF" in spec)
apply (simp)
apply (elim conjE exE)
apply (rule_tac x="t" in exI)
apply (simp)
apply (simp add: appt_assoc_sym)
apply (simp add: pairF_domF_T3)
done
(*** head T --> head F **)
lemma head_traces_failures_noTick:
"[| a : head_traces (fstF SF);
(s, X) :f failures (Proc_T_rec n (tail_traces (fstF SF) a)) ; noTick s|]
==> a : head_failures (sndF SF)"
apply (insert failures_Proc_T_rec_noTick_lm[of X n])
apply (drule_tac x="s" in spec)
apply (drule_tac x="tail_traces (fstF SF) a" in spec)
apply (simp)
apply (elim conjE exE)
apply (simp add: in_tail_traces)
apply (simp add: head_failures_def)
apply (rule_tac x="s ^^ t ^^ <Tick>" in exI)
apply (rule_tac x="X" in exI)
apply (simp add: appt_assoc_sym)
apply (simp add: pairF_domF_T3)
done
(*** head_traces_failures ***)
lemma head_traces_failures: (* not used *)
"[| a : head_traces (fstF SF);
(s, X) :f failures (Proc_T_rec n (tail_traces (fstF SF) a)) |]
==> a : head_failures (sndF SF)"
apply (case_tac "noTick s")
apply (simp add: head_traces_failures_noTick)
apply (simp add: noTick_def)
apply (simp add: Tick_in_sett)
apply (elim conjE exE)
apply (insert failures_Proc_T_rec_lm[of X n])
apply (drule_tac x="s" in spec)
apply (drule_tac x="tail_traces (fstF SF) a" in spec)
apply (simp add: in_tail_traces)
apply (simp add: appt_assoc_sym)
apply (simp add: head_failures_def)
apply (rule_tac x="t ^^ <Tick>" in exI)
apply (rule_tac x="X" in exI)
apply (simp add: appt_assoc_sym)
apply (simp add: pairF_domF_T3)
done
(*----------------------------*
| Proc_T lemma |
*----------------------------*)
(* traces(Proc_F_rec) => fst SF (lm) *)
lemma Proc_F_to_T_lm:
"ALL SF t. t :t traces (Proc_F_rec n SF) --> t :t fstF SF"
apply (induct_tac n)
(* base *)
apply (simp add: in_traces)
apply (intro allI impI)
apply (elim conjE exE)
apply (erule disjE, simp)
apply (elim conjE exE)
apply (simp)
(* step *)
apply (intro allI impI)
apply (simp add: in_traces)
apply (elim conjE exE disjE bexE)
apply (simp_all)
apply (drule_tac x="(tail_traces (fstF SF) a ,, tail_failures (sndF SF) a)" in spec)
apply (drule_tac x="s" in spec)
apply (simp)
apply (simp add: tail_traces_failures_domF pairF_fstF)
apply (simp add: in_tail_traces head_failures_traces)
done
(* traces(Proc_F_rec) => fst SF *)
lemma Proc_F_to_T:
"t :t traces (Proc_F_rec n SF) ==> t :t fstF SF"
by (simp add: Proc_F_to_T_lm)
(* traces(Proc_F_rec) => fst SF (lm) *)
lemma Proc_T_to_F_lm:
"ALL SF s X.
(s, X) :f failures (Proc_T_rec n (fstF SF)) --> (s, X) :f sndF SF"
apply (induct_tac n)
(* base *)
apply (simp add: in_failures)
(* step *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (elim conjE exE disjE bexE)
apply (simp_all)
apply (drule_tac x="(tail_traces (fstF SF) a ,, tail_failures (sndF SF) a)" in spec)
apply (drule_tac x="sa" in spec)
apply (drule_tac x="X" in spec)
apply (simp add: tail_traces_failures_domF pairF_fstF)
apply (simp add: tail_traces_failures_domF pairF_sndF)
apply (simp add: in_tail_failures)
apply (simp add: in_traces)
apply (simp add: in_traces)
apply (case_tac "<Tick> :t fstF SF")
apply (simp add: in_failures)
apply (erule disjE)
apply (simp add: pairF_domF_F2_F4)
apply (simp add: pairF_domF_T3_Tick)
apply (simp add: in_failures)
done
(* traces(Proc_F_rec) => fst SF *)
lemma Proc_T_to_F:
"(s, X) :f failures (Proc_T_rec n (fstF SF)) ==> (s, X) :f sndF SF"
by (simp add: Proc_T_to_F_lm)
(* failures(Proc_F_rec) => snd SF (lm) *)
lemma Proc_F_to_F_lm:
"ALL SF s X. (s, X) :f failures (Proc_F_rec n SF) --> (s, X) :f sndF SF"
apply (induct_tac n)
(* base *)
apply (simp add: in_failures)
apply (intro allI impI)
apply (elim conjE exE)
apply (rule memF_F2)
apply (simp)
apply (simp add: Evset_def)
apply (blast)
(* step *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (elim conjE exE bexE disjE)
apply (simp_all)
apply (drule_tac x="(tail_traces (fstF SF) a ,, tail_failures (sndF SF) a)" in spec)
apply (drule_tac x="sa" in spec)
apply (drule_tac x="X" in spec)
apply (simp add: tail_traces_failures_domF pairF_fstF)
apply (simp add: tail_traces_failures_domF pairF_sndF)
apply (simp add: head_tail_failures)
apply (simp add: in_traces)
apply (simp add: in_traces)
done
lemma Proc_F_to_F:
"(s, X) :f failures (Proc_F_rec n SF) ==> (s, X) :f sndF SF"
by (simp add: Proc_F_to_F_lm)
(* sndF SF => failures (Proc_F_rec) lm *)
lemma F_Proc_F_lm:
"ALL SF X. ((s, X) :f sndF SF & noTick s & (Tick : X | s ^^ <Tick> ~:t fstF SF))
--> (s, X) :f failures (Proc_F_rec (lengtht s) SF)"
apply (induct_tac s rule: induct_trace)
(* <> *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (rule_tac x="{a. Ev a ~: X & <Ev a> :t fstF SF}" in exI)
apply (rule)
apply (elim conjE)
apply (erule disjE)
(* Tick : X *)
apply (rule_tac x="X Un {Ev a|a. <Ev a> ~:t fstF SF}" in exI)
apply (simp)
apply (rule)
apply (rule pairF_domF_F3)
apply (simp)
apply (simp)
apply (force)
apply (simp add: Evset_def not_Tick_to_Ev)
apply (force)
(* <Tick> ~:t fstF SF *)
apply (rule_tac x="X Un ({Tick} Un {Ev a|a. <Ev a> ~:t fstF SF})" in exI)
apply (rule)
apply (rule pairF_domF_F3)
apply (simp)
apply (simp)
apply (force)
apply (simp add: Evset_def not_Tick_to_Ev)
apply (force)
apply (force)
(* <Tick> *)
apply (simp)
(* <Ev a> ^^ s *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (simp add: head_tail_failures)
apply (drule_tac x="(tail_traces (fstF SF) a ,, tail_failures (sndF SF) a)" in spec)
apply (drule_tac x="X" in spec)
apply (simp add: tail_traces_failures_domF pairF_fstF pairF_sndF)
apply (elim conjE exE disjE)
apply (simp)
apply (simp add: appt_assoc)
apply (simp add: head_failures_traces head_tail_traces)
done
(* sndF SF => failures (Proc_F_rec) *)
lemma F_Proc_F:
"[| (s, X) :f sndF SF ; noTick s ; Tick : X | s ^^ <Tick> ~:t fstF SF |]
==> (s, X) :f failures (Proc_F_rec (lengtht s) SF)"
by (simp add: F_Proc_F_lm)
(* sndF SF => failures (Proc_T_rec) (noTick) lm *)
declare lengtht_app_event_Suc_head [simp del]
declare lengtht_app_decompo1 [simp del]
declare lengtht_app_decompo2 [simp del]
declare Proc_T_rec.simps [simp del]
lemma F_Proc_T_noTick_lm:
"ALL SF X. (s, X) :f sndF SF & noTick s & Tick ~: X & s ^^ <Tick> :t fstF SF
--> (s, X) :f failures (Proc_T_rec (Suc (lengtht s)) (fstF SF))"
apply (induct_tac s rule: induct_trace)
(* <> *)
apply (intro allI impI)
apply (simp add: Proc_T_rec.simps in_failures)
apply (simp add: Evset_def)
apply (fast)
(* <Tick> *)
apply (intro allI impI)
apply (simp add: Proc_T_rec.simps in_failures)
(* <Ev a> ^^ s *)
apply (intro allI impI)
apply (simp (no_asm) add: Proc_T_rec.simps)
apply (simp add: in_failures)
apply (elim conjE)
apply (simp add: appt_assoc)
apply (simp add: head_tail_traces)
apply (drule_tac x="(tail_traces (fstF SF) a ,, tail_failures (sndF SF) a)" in spec)
apply (drule_tac x="X" in spec)
apply (simp)
apply (elim conjE)
apply (simp add: tail_traces_failures_domF pairF_fstF pairF_sndF)
apply (simp add: head_tail_failures)
apply (simp add: lengtht_app_event_Suc_head)
done
(* sndF SF => failures (Proc_T_rec) noTick *)
lemma F_Proc_T_noTick:
"[| (s, X) :f sndF SF ; noTick s ; Tick ~: X ; s ^^ <Tick> :t fstF SF |]
==> (s, X) :f failures (Proc_T_rec (Suc (lengtht s)) (fstF SF))"
by (simp add: F_Proc_T_noTick_lm)
declare lengtht_app_event_Suc_head [simp]
declare lengtht_app_decompo1 [simp]
declare lengtht_app_decompo2 [simp]
declare Proc_T_rec.simps [simp]
(* sndF SF => failures (Proc_T_rec) (Tick) lm *)
lemma F_Proc_T_Tick_lm:
"ALL SF X. ((s, X) :f sndF SF & ~ noTick s)
--> (s, X) :f failures (Proc_T_rec (lengtht s) (fstF SF))"
apply (induct_tac s rule: induct_trace)
(* <> *)
apply (intro allI impI)
apply (simp add: in_failures)
(* <Tick> *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (simp add: pairF_domF_T2)
(* <Ev a> ^^ s *)
apply (intro allI impI)
apply (simp add: in_failures)
apply (elim conjE)
apply (simp add: head_tail_failures)
apply (drule_tac x="(tail_traces (fstF SF) a ,, tail_failures (sndF SF) a)" in spec)
apply (drule_tac x="X" in spec)
apply (simp add: tail_traces_failures_domF pairF_fstF pairF_sndF)
apply (elim conjE)
apply (simp add: head_failures_traces)
done
(* sndF SF => failures (Proc_T_rec) noTick *)
lemma F_Proc_T_Tick:
"[| (s, X) :f sndF SF; ~ noTick s |]
==> (s, X) :f failures (Proc_T_rec (lengtht s) (fstF SF))"
by (simp add: F_Proc_T_Tick_lm)
(*==================================================*
| Proc_F lemma (main) |
*==================================================*)
lemma semF_Proc_F: "[[ Proc_F SF ]]F = SF"
apply (simp add: Proc_F_def)
apply (rule order_antisym)
(* <= *)
apply (simp add: subdomF_decompo)
apply (rule conjI)
(* Proc <= fstF SF *)
apply (rule)
apply (simp add: in_traces)
apply (simp add: semT_Proc_T[simplified semT_def])
apply (erule disjE, simp)
apply (erule disjE, simp)
apply (elim conjE exE)
apply (simp add: Proc_F_to_T)
(* Proc <= sndF SF *)
apply (rule)
apply (simp add: in_failures)
apply (erule disjE)
(* Proc T <= sndF SF *)
apply (simp add: Proc_T_def)
apply (simp add: in_failures)
apply (erule exE)
apply (simp add: Proc_T_to_F)
(* Proc F <= sndF SF *)
apply (erule exE)
apply (simp add: Proc_F_to_F)
(* <= *)
apply (simp add: subdomF_decompo)
apply (rule conjI)
(* fstF SF <= Proc *)
apply (rule)
apply (simp add: in_traces)
apply (simp add: semT_Proc_T[simplified semT_def])
(* sndF SF <= Proc *)
apply (rule)
apply (simp add: in_failures)
apply (case_tac "noTick s & (Tick : X | s ^^ <Tick> ~:t fstF SF)")
apply (rule disjI2)
apply (rule_tac x="lengtht s" in exI)
apply (simp add: F_Proc_F)
apply (simp)
apply (rule disjI1)
apply (simp add: Proc_T_def)
apply (simp add: in_failures)
apply (case_tac "noTick s")
(* noTick s & s ^^ <Tick> :t fstF SF *)
apply (simp)
apply (rule_tac x="Suc (lengtht s)" in exI)
apply (simp add: F_Proc_T_noTick del: Proc_T_rec.simps)
(* ~ noTick s *)
apply (rule_tac x="lengtht s" in exI)
apply (simp add: F_Proc_T_Tick)
done
(*----------------------------*
| [[ ]]F is surjective |
*----------------------------*)
theorem EX_proc_domF: "ALL SF. EX P. [[P]]F = SF"
apply (rule allI)
apply (rule_tac x="Proc_F SF" in exI)
apply (simp add: semF_Proc_F)
done
theorem surj_domF: "surj (%P. [[P]]F)"
apply (simp add: surj_def)
apply (rule allI)
apply (rule_tac x="Proc_F y" in exI)
apply (simp add: semF_Proc_F)
done
(*----------------------------*
| failures and Proc_F SF |
*----------------------------*)
lemma failures_Proc_F: "failures (Proc_F SF) = sndF SF"
apply (insert semF_Proc_F[of SF])
apply (simp add: semF_def)
apply (simp add: eqF_decompo)
done
(*----------------------------*
| traces and Proc_F SF |
*----------------------------*)
lemma traces_Proc_F: "traces (Proc_F SF) = fstF SF"
apply (insert semF_Proc_F[of SF])
apply (simp add: semF_def)
apply (simp add: eqF_decompo)
done
lemma traces_Proc_T_F:
"traces (Proc_T (fstF SF)) = traces (Proc_F SF)"
apply (simp add: traces_Proc_T)
apply (simp add: traces_Proc_F)
done
(*==========================================================*
| |
| Generic Internal Choice |
| |
*==========================================================*)
consts
Gen_int_choice_F :: "'a proc set => 'a proc" ("(1|~~|F _)" [900] 68)
defs
Gen_int_choice_F_def :
"|~~|F Ps == Proc_F ( {t. t = <> | (EX P:Ps. t :t traces(P)) }t ,,
{f. EX P:Ps. f :f failures(P)}f )"
(* lemmas *)
lemma traces_Gen_int_choice_F:
"traces ( |~~|F Ps ) = {t. t = <> | (EX P:Ps. t :t traces(P))}t"
apply (simp add: Gen_int_choice_F_def)
apply (simp add: traces_Proc_F)
apply (simp add: pairF UnionT_UnionF_domF)
done
lemma failures_Gen_int_choice_F:
"failures ( |~~|F Ps ) = {f. EX P:Ps. f :f failures(P)}f"
apply (simp add: Gen_int_choice_F_def)
apply (simp add: failures_Proc_F)
apply (simp add: pairF UnionT_UnionF_domF)
done
lemma semF_Gen_int_choice_F:
"[[ |~~|F Ps ]]F =
({t. t = <> | (EX P:Ps. t :t traces(P)) }t ,,
{f. EX P:Ps. f :f failures(P)}f)"
apply (simp add: semF_def)
apply (simp add: traces_Gen_int_choice_F failures_Gen_int_choice_F)
done
lemma in_traces_Gen_int_choice_F:
"t :t traces ( |~~|F Ps ) = (t = <> | (EX P:Ps. t :t traces(P)))"
apply (simp add: traces_Gen_int_choice_F)
apply (simp add: in_traces_Union_proc)
done
lemma in_failures_Gen_int_choice_F:
"f :f failures ( |~~|F Ps ) = (EX P:Ps. f :f failures(P))"
apply (simp add: failures_Gen_int_choice_F)
apply (simp add: in_failures_Union_proc)
done
(*==========================================================*
| |
| Another Generic Internal Choice |
| non-empty set |
| |
*==========================================================*)
consts
Gen_int_choice_F_plus :: "'a proc set => 'a proc" ("(1|~~|F+ _)" [900] 68)
defs
Gen_int_choice_F_plus_def:
"|~~|F+ Ps == Proc_F( (UnionT {traces(P) |P. P:Ps},,
UnionF {failures(P) |P. P:Ps}))"
(* lemmas *)
lemma traces_Gen_int_choice_F_plus:
"Ps ~= {} ==> traces ( |~~|F+ Ps ) = (UnionT {traces(P) |P. P:Ps})"
apply (simp add: Gen_int_choice_F_plus_def)
apply (simp add: traces_Proc_F)
apply (simp add: pairF non_empty_UnionT_UnionF_domF)
done
lemma failures_Gen_int_choice_F_plus:
"Ps ~= {} ==> failures ( |~~|F+ Ps ) = (UnionF {failures(P) |P. P:Ps})"
apply (simp add: Gen_int_choice_F_plus_def)
apply (simp add: failures_Proc_F)
apply (simp add: pairF non_empty_UnionT_UnionF_domF)
done
lemma semF_Gen_int_choice_F_plus:
"Ps ~= {} ==> [[ |~~|F+ Ps ]]F =
(UnionT {traces(P) |P. P:Ps} ,, (UnionF {failures(P) |P. P:Ps}))"
apply (simp add: semF_def)
apply (simp add: traces_Gen_int_choice_F_plus failures_Gen_int_choice_F_plus)
done
lemma in_traces_Gen_int_choice_F_plus:
"Ps ~= {} ==> t :t traces ( |~~|F+ Ps ) = (EX P:Ps. t :t traces(P))"
apply (simp add: traces_Gen_int_choice_F_plus)
apply (subgoal_tac "{traces P |P. P : Ps} ~= {}")
apply (auto)
done
lemma in_failures_Gen_int_choice_F_plus:
"Ps ~= {} ==> f :f failures ( |~~|F+ Ps ) = (EX P:Ps. f :f failures(P))"
apply (simp add: failures_Gen_int_choice_F_plus)
apply (subgoal_tac "{traces P |P. P : Ps} ~= {}")
apply (auto)
done
(****************** to add them again ******************)
declare disj_not1 [simp]
end
lemma tail_failures_setF:
{(t, X). (<Ev a> ^^ t, X) :f F} ∈ setF
lemma in_tail_failures:
((s, X) :f tail_failures F a) = ((<Ev a> ^^ s, X) :f F)
lemma head_tail_failures_only_if:
(<Ev a> ^^ s, X) :f F ==> a ∈ head_failures F ∧ (s, X) :f tail_failures F a
lemma head_tail_failures:
((<Ev a> ^^ s, X) :f F) = (a ∈ head_failures F ∧ (s, X) :f tail_failures F a)
lemma head_failures_traces:
a ∈ head_failures (sndF SF) ==> a ∈ head_traces (fstF SF)
lemma tail_traces_failures_T2:
HC_T2 (tail_traces (fstF SF) a, tail_failures (sndF SF) a)
lemma tail_traces_failures_F3:
a ∈ head_traces (fstF SF) ==> HC_F3 (tail_traces (fstF SF) a, tail_failures (sndF SF) a)
lemma tail_traces_failures_T3_F4:
a ∈ head_traces (fstF SF) ==> HC_T3_F4 (tail_traces (fstF SF) a, tail_failures (sndF SF) a)
lemma tail_traces_failures_domF:
a ∈ head_traces (fstF SF) ∨ a ∈ head_failures (sndF SF) ==> (tail_traces (fstF SF) a, tail_failures (sndF SF) a) ∈ domF
lemma failures_Proc_T_rec_noTick_lm:
∀s T. (s, X) :f failures (Proc_T_rec n T) ∧ noTick s --> (∃t. s ^^ t ^^ <Tick> :t T ∧ noTick t)
lemma failures_Proc_T_rec_noTick:
[| (s, X) :f failures (Proc_T_rec n T); noTick s |] ==> ∃t. s ^^ t ^^ <Tick> :t T ∧ noTick t
lemma failures_Proc_T_rec_lm:
∀s T. (s, X) :f failures (Proc_T_rec n T) --> s :t T
lemma failures_Proc_T_rec:
(s, X) :f failures (Proc_T_rec n T) ==> s :t T
lemma failures_Proc_T_rec_T3:
[| (s, X) :f failures (Proc_T_rec n (fstF SF)); noTick s |] ==> ∃t. (s ^^ t ^^ <Tick>, Y) :f sndF SF ∧ noTick t
lemma head_traces_failures_noTick:
[| a ∈ head_traces (fstF SF); (s, X) :f failures (Proc_T_rec n (tail_traces (fstF SF) a)); noTick s |] ==> a ∈ head_failures (sndF SF)
lemma head_traces_failures:
[| a ∈ head_traces (fstF SF); (s, X) :f failures (Proc_T_rec n (tail_traces (fstF SF) a)) |] ==> a ∈ head_failures (sndF SF)
lemma Proc_F_to_T_lm:
∀SF t. t :t traces (Proc_F_rec n SF) --> t :t fstF SF
lemma Proc_F_to_T:
t :t traces (Proc_F_rec n SF) ==> t :t fstF SF
lemma Proc_T_to_F_lm:
∀SF s X. (s, X) :f failures (Proc_T_rec n (fstF SF)) --> (s, X) :f sndF SF
lemma Proc_T_to_F:
(s, X) :f failures (Proc_T_rec n (fstF SF)) ==> (s, X) :f sndF SF
lemma Proc_F_to_F_lm:
∀SF s X. (s, X) :f failures (Proc_F_rec n SF) --> (s, X) :f sndF SF
lemma Proc_F_to_F:
(s, X) :f failures (Proc_F_rec n SF) ==> (s, X) :f sndF SF
lemma F_Proc_F_lm:
∀SF X. (s, X) :f sndF SF ∧ noTick s ∧ (Tick ∈ X ∨ s ^^ <Tick> ~:t fstF SF) --> (s, X) :f failures (Proc_F_rec (lengtht s) SF)
lemma F_Proc_F:
[| (s, X) :f sndF SF; noTick s; Tick ∈ X ∨ s ^^ <Tick> ~:t fstF SF |] ==> (s, X) :f failures (Proc_F_rec (lengtht s) SF)
lemma F_Proc_T_noTick_lm:
∀SF X. (s, X) :f sndF SF ∧ noTick s ∧ Tick ∉ X ∧ s ^^ <Tick> :t fstF SF --> (s, X) :f failures (Proc_T_rec (Suc (lengtht s)) (fstF SF))
lemma F_Proc_T_noTick:
[| (s, X) :f sndF SF; noTick s; Tick ∉ X; s ^^ <Tick> :t fstF SF |] ==> (s, X) :f failures (Proc_T_rec (Suc (lengtht s)) (fstF SF))
lemma F_Proc_T_Tick_lm:
∀SF X. (s, X) :f sndF SF ∧ ¬ noTick s --> (s, X) :f failures (Proc_T_rec (lengtht s) (fstF SF))
lemma F_Proc_T_Tick:
[| (s, X) :f sndF SF; ¬ noTick s |] ==> (s, X) :f failures (Proc_T_rec (lengtht s) (fstF SF))
lemma semF_Proc_F:
[[Proc_F SF]]F = SF
theorem EX_proc_domF:
∀SF. ∃P. [[P]]F = SF
theorem surj_domF:
surj semF
lemma failures_Proc_F:
failures (Proc_F SF) = sndF SF
lemma traces_Proc_F:
traces (Proc_F SF) = fstF SF
lemma traces_Proc_T_F:
traces (Proc_T (fstF SF)) = traces (Proc_F SF)
lemma traces_Gen_int_choice_F:
traces (|~~|F Ps) = {t. t = <> ∨ (∃P∈Ps. t :t traces P)}t
lemma failures_Gen_int_choice_F:
failures (|~~|F Ps) = {f. ∃P∈Ps. f :f failures P}f
lemma semF_Gen_int_choice_F:
[[|~~|F Ps]]F = ({t. t = <> ∨ (∃P∈Ps. t :t traces P)}t ,, {f. ∃P∈Ps. f :f failures P}f)
lemma in_traces_Gen_int_choice_F:
(t :t traces (|~~|F Ps)) = (t = <> ∨ (∃P∈Ps. t :t traces P))
lemma in_failures_Gen_int_choice_F:
(f :f failures (|~~|F Ps)) = (∃P∈Ps. f :f failures P)
lemma traces_Gen_int_choice_F_plus:
Ps ≠ {} ==> traces (|~~|F+ Ps) = UnionT {traces P |P. P ∈ Ps}
lemma failures_Gen_int_choice_F_plus:
Ps ≠ {} ==> failures (|~~|F+ Ps) = UnionF {failures P |P. P ∈ Ps}
lemma semF_Gen_int_choice_F_plus:
Ps ≠ {} ==> [[|~~|F+ Ps]]F = (UnionT {traces P |P. P ∈ Ps} ,, UnionF {failures P |P. P ∈ Ps})
lemma in_traces_Gen_int_choice_F_plus:
Ps ≠ {} ==> (t :t traces (|~~|F+ Ps)) = (∃P∈Ps. t :t traces P)
lemma in_failures_Gen_int_choice_F_plus:
Ps ≠ {} ==> (f :f failures (|~~|F+ Ps)) = (∃P∈Ps. f :f failures P)