Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T
theory CSP_T_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_T_mono = CSP_T_tracesfun:
(*****************************************************************
1. mono check of tracesfun
2.
3.
4.
*****************************************************************)
(*--------------------------------*
| STOP,SKIP,DIV |
*--------------------------------*)
lemma mono_tracesfun_STOP: "mono (tracesfun (%f. STOP))"
by (simp add: mono_def tracesfun_def)
lemma mono_tracesfun_SKIP: "mono (tracesfun (%f. SKIP))"
by (simp add: mono_def tracesfun_def)
lemma mono_tracesfun_DIV: "mono (tracesfun (%f. DIV))"
by (simp add: mono_def tracesfun_def)
(*--------------------------------*
| Act_prefix |
*--------------------------------*)
lemma mono_tracesfun_Act_prefix:
"mono (tracesfun Pf) ==> mono (tracesfun (%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_tracesfun)
apply (auto)
done
(*--------------------------------*
| Ext_pre_choice |
*--------------------------------*)
lemma mono_tracesfun_Ext_pre_choice:
"ALL a. mono (tracesfun (Pff a))
==> mono (tracesfun (%f. ? a:X -> (Pff a f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
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_tracesfun_Ext_choice:
"[| mono (tracesfun Pf) ; mono (tracesfun Qf) |]
==> mono (tracesfun (%f. (Pf f [+] Qf f)))"
apply (simp add: mono_def)
apply (auto simp add: in_tracesfun subdomT_iff)
done
(*--------------------------------*
| Int_choice |
*--------------------------------*)
lemma mono_tracesfun_Int_choice:
"[| mono (tracesfun Pf) ; mono (tracesfun Qf) |]
==> mono (tracesfun (%f. (Pf f |~| Qf f)))"
apply (simp add: mono_def)
apply (auto simp add: in_tracesfun subdomT_iff)
done
(*--------------------------------*
| Rep_int_choice |
*--------------------------------*)
lemma mono_tracesfun_Rep_int_choice:
"ALL c. mono (tracesfun (Pff c))
==> mono (tracesfun (%f. !! c:C .. (Pff c f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (erule disjE, simp)
apply (rule disjI2)
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_tracesfun_IF:
"[| mono (tracesfun Pf) ; mono (tracesfun Qf) |]
==> mono (tracesfun (%f. IF b THEN (Pf f) ELSE (Qf f)))"
apply (simp add: mono_def)
apply (auto simp add: in_tracesfun subdomT_iff)
done
(*--------------------------------*
| Parallel |
*--------------------------------*)
lemma mono_tracesfun_Parallel:
"[| mono (tracesfun Pf) ; mono (tracesfun Qf) |]
==> mono (tracesfun (%f. (Pf f) |[X]| (Qf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (elim conjE exE)
apply (rule_tac x="s" in exI)
apply (rule_tac x="ta" in exI)
apply (auto simp add: subdomT_iff)
done
(*--------------------------------*
| Hiding |
*--------------------------------*)
lemma mono_tracesfun_Hiding:
"mono (tracesfun Pf)
==> mono (tracesfun (%f. (Pf f) -- X))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (elim conjE exE)
apply (rule_tac x="s" in exI)
apply (auto simp add: subdomT_iff)
done
(*--------------------------------*
| Renaming |
*--------------------------------*)
lemma mono_tracesfun_Renaming:
"mono (tracesfun Pf)
==> mono (tracesfun (%f. (Pf f) [[r]]))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (elim conjE exE)
apply (rule_tac x="s" in exI)
apply (auto simp add: subdomT_iff)
done
(*--------------------------------*
| Seq_compo |
*--------------------------------*)
lemma mono_tracesfun_Seq_compo:
"[| mono (tracesfun Pf) ; mono (tracesfun Qf) |]
==> mono (tracesfun (%f. (Pf f) ;; (Qf f)))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (erule disjE)
apply (simp add: subdomT_iff)
apply (fast)
apply (elim conjE exE)
apply (rule disjI2)
apply (rule_tac x="s" in exI)
apply (rule_tac x="ta" in exI)
apply (auto simp add: subdomT_iff)
done
(*--------------------------------*
| Depth_rest |
*--------------------------------*)
lemma mono_tracesfun_Depth_rest:
"mono (tracesfun Pf)
==> mono (tracesfun (%f. (Pf f) |. n))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (elim conjE exE)
apply (auto simp add: subdomT_iff)
done
(*--------------------------------*
| variable |
*--------------------------------*)
lemma mono_tracesfun_variable:
"mono (tracesfun (%f. f p))"
apply (simp add: mono_def)
apply (intro allI impI)
apply (rule)
apply (simp add: in_tracesfun)
apply (simp add: order_prod_def)
apply (auto simp add: subdomT_iff)
done
(*--------------------------------*
| Procfun |
*--------------------------------*)
lemma mono_tracesfun:
"Pf : Procfun ==> mono (tracesfun Pf)"
apply (rule Procfun.induct[of Pf])
apply (simp)
apply (simp add: mono_tracesfun_variable)
apply (simp add: mono_tracesfun_STOP)
apply (simp add: mono_tracesfun_SKIP)
apply (simp add: mono_tracesfun_DIV)
apply (simp add: mono_tracesfun_Act_prefix)
apply (simp add: mono_tracesfun_Ext_pre_choice)
apply (simp add: mono_tracesfun_Ext_choice)
apply (simp add: mono_tracesfun_Int_choice)
apply (simp add: mono_tracesfun_Rep_int_choice)
apply (simp add: mono_tracesfun_IF)
apply (simp add: mono_tracesfun_Parallel)
apply (simp add: mono_tracesfun_Hiding)
apply (simp add: mono_tracesfun_Renaming)
apply (simp add: mono_tracesfun_Seq_compo)
apply (simp add: mono_tracesfun_Depth_rest)
done
(*=============================================================*
| [[P]]Tfun |
*=============================================================*)
lemma mono_semTfun:
"Pf : Procfun ==> mono [[Pf]]Tfun"
by (simp add: semT_to_traces mono_tracesfun)
(*=============================================================*
| tracesFun |
*=============================================================*)
lemma mono_tracesFun:
"PF : ProcFun ==> mono (tracesFun PF)"
apply (simp add: prod_mono)
apply (simp add: proj_tracesFun_tracesfun)
apply (simp add: ProcFun_def)
apply (simp add: mono_tracesfun)
done
(*=============================================================*
| [[P]]TFun |
*=============================================================*)
lemma mono_semTFun:
"PF : ProcFun ==> mono [[PF]]TFun"
by (simp add: semT_to_traces mono_tracesFun)
end
lemma mono_tracesfun_STOP:
mono (tracesfun (%f. STOP))
lemma mono_tracesfun_SKIP:
mono (tracesfun (%f. SKIP))
lemma mono_tracesfun_DIV:
mono (tracesfun (%f. DIV))
lemma mono_tracesfun_Act_prefix:
mono (tracesfun Pf) ==> mono (tracesfun (%f. a -> Pf f))
lemma mono_tracesfun_Ext_pre_choice:
∀a. mono (tracesfun (Pff a)) ==> mono (tracesfun (%f. ? a:X -> Pff a f))
lemma mono_tracesfun_Ext_choice:
[| mono (tracesfun Pf); mono (tracesfun Qf) |] ==> mono (tracesfun (%f. Pf f [+] Qf f))
lemma mono_tracesfun_Int_choice:
[| mono (tracesfun Pf); mono (tracesfun Qf) |] ==> mono (tracesfun (%f. Pf f |~| Qf f))
lemma mono_tracesfun_Rep_int_choice:
∀c. mono (tracesfun (Pff c)) ==> mono (tracesfun (%f. !! c:C .. Pff c f))
lemma mono_tracesfun_IF:
[| mono (tracesfun Pf); mono (tracesfun Qf) |] ==> mono (tracesfun (%f. IF b THEN Pf f ELSE Qf f))
lemma mono_tracesfun_Parallel:
[| mono (tracesfun Pf); mono (tracesfun Qf) |] ==> mono (tracesfun (%f. Pf f |[X]| Qf f))
lemma mono_tracesfun_Hiding:
mono (tracesfun Pf) ==> mono (tracesfun (%f. Pf f -- X))
lemma mono_tracesfun_Renaming:
mono (tracesfun Pf) ==> mono (tracesfun (%f. Pf f [[r]]))
lemma mono_tracesfun_Seq_compo:
[| mono (tracesfun Pf); mono (tracesfun Qf) |] ==> mono (tracesfun (%f. Pf f ;; Qf f))
lemma mono_tracesfun_Depth_rest:
mono (tracesfun Pf) ==> mono (tracesfun (%f. Pf f |. n))
lemma mono_tracesfun_variable:
mono (tracesfun (%f. f p))
lemma mono_tracesfun:
Pf ∈ Procfun ==> mono (tracesfun Pf)
lemma mono_semTfun:
Pf ∈ Procfun ==> mono [[Pf]]Tfun
lemma mono_tracesFun:
PF ∈ ProcFun ==> mono (tracesFun PF)
lemma mono_semTFun:
PF ∈ ProcFun ==> mono [[PF]]TFun