Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F
theory CSP_F_mono (*-------------------------------------------*
| CSP-Prover on Isabelle2004 |
| December 2004 |
| July 2005 (modified) |
| August 2005 (modified) |
| |
| CSP-Prover on Isabelle2005 |
| October 2005 (modified) |
| |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_F_mono = CSP_F_failuresfun + CSP_T_mono:
(*****************************************************************
1. mono check of failuresfun
2.
3.
4.
*****************************************************************)
(*--------------------------------*
| STOP,SKIP,DIV |
*--------------------------------*)
lemma mono_failuresfun_STOP: "mono (failuresfun (%x. STOP))"
by (simp add: mono_def failuresfun_def)
lemma mono_failuresfun_SKIP: "mono (failuresfun (%x. SKIP))"
by (simp add: mono_def failuresfun_def)
lemma mono_failuresfun_DIV: "mono (failuresfun (%x. DIV))"
by (simp add: mono_def failuresfun_def)
(*--------------------------------*
| Act_prefix |
*--------------------------------*)
lemma mono_failuresfun_Act_prefix:
"mono (failuresfun Pf) ==> mono (failuresfun (%f. a -> (Pf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (drule_tac x="A" in spec)
apply (drule_tac x="B" in spec)
apply (simp)
apply (rule)
apply (simp add: in_failuresfun)
apply (auto)
done
(*--------------------------------*
| Ext_pre_choice |
*--------------------------------*)
lemma mono_failuresfun_Ext_pre_choice:
"ALL a. mono (failuresfun (Pff a))
==> mono (failuresfun (%f. ? a:X -> (Pff a f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (erule disjE, simp)
apply (rule disjI2)
apply (elim conjE exE)
apply (drule_tac x="a" in spec)
apply (drule_tac x="A" in spec)
apply (drule_tac x="B" in spec)
apply (auto)
done
(*--------------------------------*
| Ext_choice |
*--------------------------------*)
lemma mono_failuresfun_Ext_choice:
"[| Pf : Procfun ; Qf : Procfun ;
mono (tracesfun Pf) ; mono (tracesfun Qf) ;
mono (failuresfun Pf) ; mono (failuresfun Qf) |]
==> mono (failuresfun (%f. (Pf f [+] Qf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (drule_tac x="A" in spec)
apply (drule_tac x="A" in spec)
apply (drule_tac x="B" in spec)
apply (drule_tac x="B" in spec)
apply (drule_tac x="(fstF o A)" in spec)
apply (drule_tac x="(fstF o A)" in spec)
apply (drule_tac x="(fstF o B)" in spec)
apply (drule_tac x="(fstF o B)" in spec)
apply (simp add: order_prod_def mono_fstF[simplified mono_def])
apply (elim conjE disjE)
apply (force)+
done
(*--------------------------------*
| Int_choice |
*--------------------------------*)
lemma mono_failuresfun_Int_choice:
"[| mono (failuresfun Pf) ; mono (failuresfun Qf) |]
==> mono (failuresfun (%f. (Pf f |~| Qf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim disjE)
apply (force)
apply (force)
done
(*--------------------------------*
| Rep_int_choice |
*--------------------------------*)
lemma mono_failuresfun_Rep_int_choice:
"ALL c. mono (failuresfun (Pff c))
==> mono (failuresfun (%f. !! c:C .. (Pff c f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE bexE)
apply (drule_tac x="c" in spec)
apply (drule_tac x="A" in spec)
apply (drule_tac x="B" in spec)
apply (auto)
done
(*--------------------------------*
| IF |
*--------------------------------*)
lemma mono_failuresfun_IF:
"[| mono (failuresfun Pf) ; mono (failuresfun Qf) |]
==> mono (failuresfun (%f. IF b THEN (Pf f) ELSE (Qf f)))"
apply (simp add: mono_def)
apply (auto simp add: in_failuresfun subsetF_iff)
done
(*--------------------------------*
| Parallel |
*--------------------------------*)
lemma mono_failuresfun_Parallel:
"[| mono (failuresfun Pf) ; mono (failuresfun Qf) |]
==> mono (failuresfun (%f. (Pf f) |[X]| (Qf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE exE)
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 (auto simp add: subsetF_iff)
done
(*--------------------------------*
| Hiding |
*--------------------------------*)
lemma mono_failuresfun_Hiding:
"mono (failuresfun Pf)
==> mono (failuresfun (%f. (Pf f) -- X))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI)
apply (auto simp add: subsetF_iff)
done
(*--------------------------------*
| Renaming |
*--------------------------------*)
lemma mono_failuresfun_Renaming:
"mono (failuresfun Pf)
==> mono (failuresfun (%f. (Pf f) [[r]]))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI)
apply (auto simp add: subsetF_iff)
done
(*--------------------------------*
| Seq_compo |
*--------------------------------*)
lemma mono_failuresfun_Seq_compo:
"[| Pf : Procfun ; mono (tracesfun Pf) ;
mono (failuresfun Pf) ; mono (failuresfun Qf) |]
==> mono (failuresfun (%f. (Pf f) ;; (Qf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (erule disjE)
apply (simp add: subsetF_iff)
apply (elim conjE exE)
apply (rule disjI2)
apply (rule_tac x="sa" in exI)
apply (rule_tac x="t" in exI)
apply (drule_tac x="A" in spec)
apply (drule_tac x="A" in spec)
apply (drule_tac x="B" in spec)
apply (drule_tac x="B" in spec)
apply (drule_tac x="(fstF o A)" in spec)
apply (drule_tac x="(fstF o B)" in spec)
apply (simp add: order_prod_def mono_fstF[simplified mono_def])
apply (auto simp add: subsetF_iff)
done
(*--------------------------------*
| Depth_rest |
*--------------------------------*)
lemma mono_failuresfun_Depth_rest:
"mono (failuresfun Pf)
==> mono (failuresfun (%f. (Pf f) |. n))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (elim conjE exE disjE)
apply (force)
apply (force)
done
(*--------------------------------*
| variable |
*--------------------------------*)
lemma mono_failuresfun_variable:
"mono (failuresfun (%f. f p))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_failuresfun)
apply (simp add: order_prod_def)
apply (drule_tac x="p" in spec)
apply (insert mono_sndF)
apply (simp add: mono_def)
apply (drule_tac x="A p" in spec)
apply (drule_tac x="B p" in spec)
apply (simp add: subsetF_iff order_prod_def)
done
(*--------------------------------*
| Procfun |
*--------------------------------*)
lemma mono_failuresfun:
"Pf : Procfun ==> mono (failuresfun Pf)"
apply (rule Procfun.induct[of Pf])
apply (simp)
apply (simp add: mono_failuresfun_variable)
apply (simp add: mono_failuresfun_STOP)
apply (simp add: mono_failuresfun_SKIP)
apply (simp add: mono_failuresfun_DIV)
apply (simp add: mono_failuresfun_Act_prefix)
apply (simp add: mono_failuresfun_Ext_pre_choice)
apply (simp add: mono_failuresfun_Ext_choice mono_tracesfun )
apply (simp add: mono_failuresfun_Int_choice)
apply (simp add: mono_failuresfun_Rep_int_choice)
apply (simp add: mono_failuresfun_IF)
apply (simp add: mono_failuresfun_Parallel)
apply (simp add: mono_failuresfun_Hiding)
apply (simp add: mono_failuresfun_Renaming)
apply (simp add: mono_failuresfun_Seq_compo mono_tracesfun)
apply (simp add: mono_failuresfun_Depth_rest)
done
(*=============================================================*
| [[P]]Ffun |
*=============================================================*)
lemma mono_semFfun:
"Pf : Procfun ==> mono [[Pf]]Ffun"
apply (subgoal_tac "mono (tracesfun Pf)")
apply (subgoal_tac "mono (failuresfun Pf)")
apply (simp add: mono_def)
apply (simp add: subdomF_decompo)
apply (simp add: semFfun_def)
apply (simp add: tracesfun_f failuresfun_f)
apply (simp add: traces_Proc_F failures_Proc_F)
apply (intro allI impI)
apply (drule_tac x="(%p. fstF (A p))" in spec)
apply (drule_tac x="(%p. fstF (B p))" in spec)
apply (drule mp)
apply (simp add: order_prod_def)
apply (simp add: mono_fstF[simplified mono_def])
apply (simp)
apply (simp add: mono_failuresfun)
apply (simp add: mono_tracesfun)
done
(*=============================================================*
| failuresFun |
*=============================================================*)
lemma mono_failuresFun:
"PF : ProcFun ==> mono (failuresFun PF)"
apply (simp add: prod_mono)
apply (simp add: proj_failuresFun_failuresfun)
apply (simp add: ProcFun_def)
apply (simp add: mono_failuresfun)
done
(*=============================================================*
| [[P]]FFun |
*=============================================================*)
lemma mono_semFFun:
"PF : ProcFun ==> mono [[PF]]FFun"
apply (simp add: prod_mono)
apply (simp add: proj_semFFun_semFfun)
apply (simp add: ProcFun_def)
apply (simp add: mono_semFfun)
done
end
lemma mono_failuresfun_STOP:
mono (failuresfun (%x. STOP))
lemma mono_failuresfun_SKIP:
mono (failuresfun (%x. SKIP))
lemma mono_failuresfun_DIV:
mono (failuresfun (%x. DIV))
lemma mono_failuresfun_Act_prefix:
mono (failuresfun Pf) ==> mono (failuresfun (%f. a -> Pf f))
lemma mono_failuresfun_Ext_pre_choice:
∀a. mono (failuresfun (Pff a)) ==> mono (failuresfun (%f. ? a:X -> Pff a f))
lemma mono_failuresfun_Ext_choice:
[| Pf ∈ Procfun; Qf ∈ Procfun; mono (tracesfun Pf); mono (tracesfun Qf); mono (failuresfun Pf); mono (failuresfun Qf) |] ==> mono (failuresfun (%f. Pf f [+] Qf f))
lemma mono_failuresfun_Int_choice:
[| mono (failuresfun Pf); mono (failuresfun Qf) |] ==> mono (failuresfun (%f. Pf f |~| Qf f))
lemma mono_failuresfun_Rep_int_choice:
∀c. mono (failuresfun (Pff c)) ==> mono (failuresfun (%f. !! c:C .. Pff c f))
lemma mono_failuresfun_IF:
[| mono (failuresfun Pf); mono (failuresfun Qf) |] ==> mono (failuresfun (%f. IF b THEN Pf f ELSE Qf f))
lemma mono_failuresfun_Parallel:
[| mono (failuresfun Pf); mono (failuresfun Qf) |] ==> mono (failuresfun (%f. Pf f |[X]| Qf f))
lemma mono_failuresfun_Hiding:
mono (failuresfun Pf) ==> mono (failuresfun (%f. Pf f -- X))
lemma mono_failuresfun_Renaming:
mono (failuresfun Pf) ==> mono (failuresfun (%f. Pf f [[r]]))
lemma mono_failuresfun_Seq_compo:
[| Pf ∈ Procfun; mono (tracesfun Pf); mono (failuresfun Pf); mono (failuresfun Qf) |] ==> mono (failuresfun (%f. Pf f ;; Qf f))
lemma mono_failuresfun_Depth_rest:
mono (failuresfun Pf) ==> mono (failuresfun (%f. Pf f |. n))
lemma mono_failuresfun_variable:
mono (failuresfun (%f. f p))
lemma mono_failuresfun:
Pf ∈ Procfun ==> mono (failuresfun Pf)
lemma mono_semFfun:
Pf ∈ Procfun ==> mono [[Pf]]Ffun
lemma mono_failuresFun:
PF ∈ ProcFun ==> mono (failuresFun PF)
lemma mono_semFFun:
PF ∈ ProcFun ==> mono [[PF]]FFun