Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F
theory CSP_F_continuous (*-------------------------------------------*
| CSP-Prover on Isabelle2004 |
| December 2004 |
| July 2005 (modified) |
| September 2005 (modified) |
| |
| CSP-Prover on Isabelle2005 |
| October 2005 (modified) |
| |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_F_continuous = CSP_F_failuresfun + Domain_F_cpo + CSP_T_mono:
(*****************************************************************
1. continuous failuresfun
2. continuous failuresFun
3. continuous [[ ]]Ffun
4. continuous [[ ]]FFun
*****************************************************************)
(*=============================================================*
| tracesfun fstF |
*=============================================================*)
lemma continuous_tracesfun_fstF:
"Pf : Procfun ==> continuous (%SFf. tracesfun Pf (fstF o SFf))"
apply (subgoal_tac "(%SFf. tracesfun Pf (fstF o SFf)) = (tracesfun Pf) o (op o fstF)")
apply (simp add: continuous_tracesfun continuous_op_fstF compo_continuous)
apply (simp add: expand_fun_eq)
done
(*--------------------------------*
| STOP,SKIP,DIV |
*--------------------------------*)
lemma continuous_failuresfun_STOP: "continuous (failuresfun (%f. STOP))"
by (simp add: failuresfun_simp continuous_Constant)
lemma continuous_failuresfun_SKIP: "continuous (failuresfun (%f. SKIP))"
by (simp add: failuresfun_simp continuous_Constant)
lemma continuous_failuresfun_DIV: "continuous (failuresfun (%f. DIV))"
by (simp add: failuresfun_simp continuous_Constant)
(*--------------------------------*
| Act_prefix |
*--------------------------------*)
lemma continuous_failuresfun_Act_prefix:
"continuous (failuresfun Pf) ==> continuous (failuresfun (%f. a -> (Pf f)))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "X ~= {}")
apply (simp add: isLUB_UnionF)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (erule disjE, fast)
apply (elim conjE exE)
apply (simp)
(* => *)
apply (rule)
apply (simp)
apply (erule bexE)
apply (simp add: in_failuresfun)
apply (erule disjE, simp)
apply (elim conjE exE)
apply (rule disjI2)
apply (rule_tac x="sa" in exI, simp)
apply (rule_tac x="xa" in bexI)
apply (simp_all)
by (simp add: directed_def)
(*--------------------------------*
| Ext_pre_choice |
*--------------------------------*)
lemma continuous_failuresfun_Ext_pre_choice:
"ALL a. continuous (failuresfun (Pff a))
==> continuous (failuresfun (%f. ? a:X -> (Pff a f)))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (subgoal_tac "Xa ~= {}")
apply (erule exchange_forall_orderE)
apply (drule_tac x="Xa" in spec)
apply (simp add: isLUB_UnionF)
apply (rule_tac x="LUB Xa" in exI)
apply (rule conjI)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (erule disjE, fast)
apply (elim conjE exE)
apply (simp)
apply (drule_tac x="a" in spec)
apply (elim conjE exE)
apply (subgoal_tac "LUB Xa = x", simp)
apply (simp add: isLUB_LUB)
(* => *)
apply (rule)
apply (simp)
apply (erule bexE)
apply (simp add: in_failuresfun)
apply (erule disjE, simp)
apply (elim conjE exE)
apply (rule disjI2)
apply (rule_tac x="a" in exI)
apply (rule_tac x="sa" in exI, simp)
apply (drule_tac x="a" in spec)
apply (elim conjE exE)
apply (subgoal_tac "LUB Xa = xa", simp)
apply (rule_tac x="x" in bexI)
apply (simp)
apply (simp)
apply (simp add: isLUB_LUB)
apply (drule_tac x="a" in spec)
apply (elim conjE exE)
apply (simp add: isLUB_LUB)
by (simp add: directed_def)
(*--------------------------------*
| Ext_choice |
*--------------------------------*)
lemma continuous_failuresfun_Ext_choice:
"[| Pf : Procfun ; Qf : Procfun ;
continuous (failuresfun Pf) ; continuous (failuresfun Qf) |]
==> continuous (failuresfun (%f. (Pf f [+] Qf f)))"
apply (subgoal_tac "mono (failuresfun Pf) & mono (failuresfun Qf)")
apply (subgoal_tac "continuous (%SFf. tracesfun Pf (fstF o SFf)) &
continuous (%SFf. tracesfun Qf (fstF o SFf))")
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (elim conjE)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (subgoal_tac "xa = x")
apply (subgoal_tac "xb = x")
apply (subgoal_tac "xc = x")
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "X ~= {}")
apply (simp add: isLUB_UnionF)
apply (simp add: isLUB_UnionT)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE bexE disjE)
(* 1 *)
apply (simp add: directed_def)
apply (drule_tac x="xd" in spec)
apply (drule_tac x="xe" in spec)
apply (simp, elim conjE exE)
apply (rule_tac x="z" in bexI)
apply (rule disjI1)
apply (rule conjI)
apply (rule memF_subsetF, simp)
apply (simp add: mono_def)
apply (rotate_tac -4)
apply (rule memF_subsetF, simp)
apply (simp add: mono_def)
(* 2-5 *)
apply (fast)+
(* => *)
apply (rule)
apply (simp add: in_failuresfun)
apply (fast)
apply (simp add: directed_def)
apply (rule LUB_unique, simp_all)+
apply (simp add: continuous_tracesfun_fstF)
apply (simp add: continuous_mono)
done
(*--------------------------------*
| Int_choice |
*--------------------------------*)
lemma continuous_failuresfun_Int_choice:
"[| continuous (failuresfun Pf) ; continuous (failuresfun Qf) |]
==> continuous (failuresfun (%f. (Pf f |~| Qf f)))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (subgoal_tac "xa = x")
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "X ~= {}")
apply (simp add: isLUB_UnionF)
apply (rule order_antisym)
apply (rule, simp add: in_failuresfun, fast)
apply (rule, simp add: in_failuresfun, fast)
apply (simp add: directed_def)
by (rule LUB_unique, simp_all)
(*--------------------------------*
| Rep_int_choice |
*--------------------------------*)
lemma continuous_failuresfun_Rep_int_choice:
"ALL c. continuous (failuresfun (Pff c))
==> continuous (failuresfun (%f. !! c:C .. (Pff c f)))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (subgoal_tac "X ~= {}")
apply (erule exchange_forall_orderE)
apply (drule_tac x="X" in spec)
apply (simp add: isLUB_UnionF)
apply (rule_tac x="LUB X" in exI)
apply (rule conjI)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE bexE)
apply (drule_tac x="c" in spec)
apply (elim conjE exE)
apply (subgoal_tac "LUB X = x", simp)
apply (elim bexE)
apply (rule_tac x="xa" in bexI)
apply (fast)
apply (simp)
apply (simp add: isLUB_LUB)
(* => *)
apply (rule)
apply (simp)
apply (erule bexE)
apply (simp add: in_failuresfun)
apply (elim conjE bexE)
apply (rule_tac x="c" in bexI)
apply (drule_tac x="c" in spec)
apply (elim conjE exE)
apply (subgoal_tac "LUB X = xa", simp)
apply (rule_tac x="x" in bexI)
apply (simp)
apply (simp)
apply (simp add: isLUB_LUB)
apply (simp)
apply (drule_tac x="c" in spec)
apply (elim conjE exE)
apply (simp add: isLUB_LUB)
by (simp add: directed_def)
(*--------------------------------*
| IF |
*--------------------------------*)
lemma continuous_failuresfun_IF:
"[| continuous (failuresfun Pf) ; continuous (failuresfun Qf) |]
==> continuous (failuresfun (%f. IF b THEN (Pf f) ELSE (Qf f)))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (case_tac "b")
apply (rule_tac x="x" in exI, simp)
apply (simp add: failuresfun_def)
apply (simp add: failures_def)
apply (rule_tac x="x" in exI, simp)
apply (simp add: failuresfun_def)
apply (simp add: failures_def)
apply (subgoal_tac "xa = x", simp)
by (rule LUB_unique, simp_all)
(*--------------------------------*
| Parallel |
*--------------------------------*)
lemma continuous_failuresfun_Parallel:
"[| continuous (failuresfun Pf) ; continuous (failuresfun Qf) |]
==> continuous (failuresfun (%f. (Pf f) |[X]| (Qf f)))"
apply (subgoal_tac "mono (failuresfun Pf) & mono (failuresfun Qf)")
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="Xa" in spec, simp)
apply (drule_tac x="Xa" in spec, simp)
apply (elim conjE exE)
apply (subgoal_tac "xa = x")
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "Xa ~= {}")
apply (simp add: isLUB_UnionF)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim exE bexE conjE)
apply (simp add: directed_def)
apply (drule_tac x="xb" in spec)
apply (drule_tac x="xc" in spec)
apply (simp, elim conjE exE)
apply (rule_tac x="z" in bexI)
apply (rule_tac x="Y" in exI)
apply (rule_tac x="Z" in exI)
apply (simp)
apply (rule_tac x="sa" in exI)
apply (rule_tac x="t" in exI)
apply (simp)
apply (rule conjI)
apply (rule memF_subsetF, simp)
apply (simp add: mono_def)
apply (rotate_tac -4)
apply (rule memF_subsetF, simp)
apply (simp add: mono_def)
apply (simp)
(* => *)
apply (rule)
apply (simp add: in_failuresfun)
apply (fast)
apply (simp add: directed_def)
apply (simp add: LUB_unique)
by (simp add: continuous_mono)
(*--------------------------------*
| Hiding |
*--------------------------------*)
lemma continuous_failuresfun_Hiding:
"continuous (failuresfun Pf)
==> continuous (failuresfun (%f. (Pf f) -- X))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="Xa" in spec, simp)
apply (elim conjE exE)
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "Xa ~= {}")
apply (simp add: isLUB_UnionF)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (fast)
(* => *)
apply (rule)
apply (simp add: in_failuresfun)
apply (fast)
by (simp add: directed_def)
(*--------------------------------*
| Renaming |
*--------------------------------*)
lemma continuous_failuresfun_Renaming:
"continuous (failuresfun Pf)
==> continuous (failuresfun (%f. (Pf f) [[r]]))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "X ~= {}")
apply (simp add: isLUB_UnionF)
apply (rule order_antisym)
apply (rule, simp add: in_failuresfun, fast)
apply (rule, simp add: in_failuresfun, fast)
by (simp add: directed_def)
(*--------------------------------*
| Seq_compo |
*--------------------------------*)
lemma continuous_failuresfun_Seq_compo:
"[| Pf : Procfun ;
continuous (failuresfun Pf) ; continuous (failuresfun Qf) |]
==> continuous (failuresfun (%f. (Pf f ;; Qf f)))"
apply (subgoal_tac "mono (tracesfun Pf) & mono (failuresfun Qf)")
apply (subgoal_tac "continuous (%SFf. tracesfun Pf (fstF o SFf))")
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (subgoal_tac "xa = x")
apply (subgoal_tac "xb = x")
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "X ~= {}")
apply (simp add: isLUB_UnionF)
apply (simp add: isLUB_UnionT)
apply (rule order_antisym)
(* <= *)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim bexE exE conjE disjE)
(* 1 *)
apply (fast)
(* 2 *)
apply (simp add: directed_def)
apply (drule_tac x="xc" in spec)
apply (drule_tac x="xd" in spec)
apply (simp, elim conjE exE)
apply (rule_tac x="z" in bexI)
apply (rule disjI2)
apply (rule_tac x="sa" in exI)
apply (rule_tac x="t" in exI)
apply (simp)
apply (rule conjI)
apply (rule memT_subdomT, simp)
apply (simp add: mono_def)
apply (subgoal_tac "fstF o xc <= fstF o z")
apply (simp add: comp_def)
apply (simp add: comp_def)
apply (simp add: order_prod_def)
apply (simp add: mono_fstF[simplified mono_def])
apply (rotate_tac -4)
apply (rule memF_subsetF, simp)
apply (simp add: mono_def)
apply (simp)
(* => *)
apply (rule)
apply (simp add: in_failuresfun)
apply (fast)
apply (simp add: directed_def)
apply (simp add: LUB_unique)+
apply (simp add: continuous_tracesfun_fstF)
apply (simp add: continuous_mono)
apply (simp add: mono_tracesfun)
done
(*--------------------------------*
| Depth_rest |
*--------------------------------*)
lemma continuous_failuresfun_Depth_rest:
"continuous (failuresfun Pf)
==> continuous (failuresfun (%f. (Pf f) |. n))"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (drule_tac x="X" in spec, simp)
apply (elim conjE exE)
apply (rule_tac x="x" in exI, simp)
apply (subgoal_tac "X ~= {}")
apply (simp add: isLUB_UnionF)
apply (rule order_antisym)
apply (rule, simp add: in_failuresfun)
apply (rule, simp add: in_failuresfun)
by (simp add: directed_def)
(*--------------------------------*
| variable |
*--------------------------------*)
lemma continuous_failuresfun_variable:
"continuous (failuresfun (%f. f pn))"
apply (subgoal_tac "continuous [[%f. f pn]]Ffun")
apply (simp add: semF_decompo_fun)
apply (simp add: continuous_domF_decompo
tracesfun_failuresfun_in_domF)
apply (erule conjE)
apply (simp)
apply (simp add: semFfun_variable)
apply (simp add: continuous_prod_variable)
done
(*--------------------------------*
| Procfun |
*--------------------------------*)
lemma continuous_failuresfun:
"Pf : Procfun ==> continuous (failuresfun Pf)"
apply (rule Procfun.induct[of Pf])
apply (simp)
apply (simp add: continuous_failuresfun_variable)
apply (simp add: continuous_failuresfun_STOP)
apply (simp add: continuous_failuresfun_SKIP)
apply (simp add: continuous_failuresfun_DIV)
apply (simp add: continuous_failuresfun_Act_prefix)
apply (simp add: continuous_failuresfun_Ext_pre_choice)
apply (simp add: continuous_failuresfun_Ext_choice)
apply (simp add: continuous_failuresfun_Int_choice)
apply (simp add: continuous_failuresfun_Rep_int_choice)
apply (simp add: continuous_failuresfun_IF)
apply (simp add: continuous_failuresfun_Parallel)
apply (simp add: continuous_failuresfun_Hiding)
apply (simp add: continuous_failuresfun_Renaming)
apply (simp add: continuous_failuresfun_Seq_compo)
apply (simp add: continuous_failuresfun_Depth_rest)
done
(*=============================================================*
| [[P]]Ffun |
*=============================================================*)
lemma continuous_semFfun:
"Pf : Procfun ==> continuous [[Pf]]Ffun"
apply (simp add: semF_decompo_fun)
apply (simp add: continuous_domF_decompo tracesfun_failuresfun_in_domF)
apply (simp add: continuous_tracesfun_fstF)
apply (simp add: continuous_failuresfun)
done
(*=============================================================*
| failuresFun |
*=============================================================*)
lemma continuous_failuresFun:
"PF : ProcFun ==> continuous (failuresFun PF)"
apply (simp add: prod_continuous)
apply (simp add: proj_failuresFun_failuresfun)
apply (simp add: ProcFun_def)
apply (simp add: continuous_failuresfun)
done
(*=============================================================*
| [[P]]FFun |
*=============================================================*)
lemma continuous_semFFun:
"PF : ProcFun ==> continuous [[PF]]FFun"
apply (simp add: prod_continuous)
apply (simp add: proj_semFFun_semFfun)
apply (simp add: ProcFun_def)
apply (simp add: continuous_semFfun)
done
end
lemma continuous_tracesfun_fstF:
Pf ∈ Procfun ==> continuous (%SFf. tracesfun Pf (fstF o SFf))
lemma continuous_failuresfun_STOP:
continuous (failuresfun (%f. STOP))
lemma continuous_failuresfun_SKIP:
continuous (failuresfun (%f. SKIP))
lemma continuous_failuresfun_DIV:
continuous (failuresfun (%f. DIV))
lemma continuous_failuresfun_Act_prefix:
continuous (failuresfun Pf) ==> continuous (failuresfun (%f. a -> Pf f))
lemma continuous_failuresfun_Ext_pre_choice:
∀a. continuous (failuresfun (Pff a)) ==> continuous (failuresfun (%f. ? a:X -> Pff a f))
lemma continuous_failuresfun_Ext_choice:
[| Pf ∈ Procfun; Qf ∈ Procfun; continuous (failuresfun Pf); continuous (failuresfun Qf) |] ==> continuous (failuresfun (%f. Pf f [+] Qf f))
lemma continuous_failuresfun_Int_choice:
[| continuous (failuresfun Pf); continuous (failuresfun Qf) |] ==> continuous (failuresfun (%f. Pf f |~| Qf f))
lemma continuous_failuresfun_Rep_int_choice:
∀c. continuous (failuresfun (Pff c)) ==> continuous (failuresfun (%f. !! c:C .. Pff c f))
lemma continuous_failuresfun_IF:
[| continuous (failuresfun Pf); continuous (failuresfun Qf) |] ==> continuous (failuresfun (%f. IF b THEN Pf f ELSE Qf f))
lemma continuous_failuresfun_Parallel:
[| continuous (failuresfun Pf); continuous (failuresfun Qf) |] ==> continuous (failuresfun (%f. Pf f |[X]| Qf f))
lemma continuous_failuresfun_Hiding:
continuous (failuresfun Pf) ==> continuous (failuresfun (%f. Pf f -- X))
lemma continuous_failuresfun_Renaming:
continuous (failuresfun Pf) ==> continuous (failuresfun (%f. Pf f [[r]]))
lemma continuous_failuresfun_Seq_compo:
[| Pf ∈ Procfun; continuous (failuresfun Pf); continuous (failuresfun Qf) |] ==> continuous (failuresfun (%f. Pf f ;; Qf f))
lemma continuous_failuresfun_Depth_rest:
continuous (failuresfun Pf) ==> continuous (failuresfun (%f. Pf f |. n))
lemma continuous_failuresfun_variable:
continuous (failuresfun (%f. f pn))
lemma continuous_failuresfun:
Pf ∈ Procfun ==> continuous (failuresfun Pf)
lemma continuous_semFfun:
Pf ∈ Procfun ==> continuous [[Pf]]Ffun
lemma continuous_failuresFun:
PF ∈ ProcFun ==> continuous (failuresFun PF)
lemma continuous_semFFun:
PF ∈ ProcFun ==> continuous [[PF]]FFun