Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory Domain_T_cpo = Domain_T + CPO: (*-------------------------------------------*
| CSP-Prover |
| December 2004 |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory Domain_T_cpo = Domain_T + CPO:
(*****************************************************************
1. Domain_T is a pointed cpo.
2.
3.
4.
*****************************************************************)
(* The following simplification rules are deleted in this theory file *)
(* because they unexpectly rewrite UnionT and InterT. *)
(* Union (B ` A) = (UN x:A. B x) *)
(* Inter (B ` A) = (INT x:A. B x) *)
declare Union_image_eq [simp del]
declare Inter_image_eq [simp del]
(* The following simplification is sometimes unexpected. *)
(* *)
(* not_None_eq: (x ~= None) = (EX y. x = Some y) *)
declare not_None_eq [simp del]
(*********************************************************
Bottom in Dom_T
*********************************************************)
instance domT :: (type) bot0
by (intro_classes)
defs (overloaded)
bottomT_def : "Bot == {[]t}t"
lemma bottomT : "Bot <= (T::'a domT)"
by (simp add: bottomT_def)
instance domT :: (type) bot
apply (intro_classes)
by (simp add: bottomT)
(**********************************************************
lemmas used in a proof that domain_T is a cpo.
**********************************************************)
(* UnionT Ts is an upper bound of Ts *)
lemma UnionT_isUB : "(UnionT Ts) isUB Ts"
apply (simp add: isUB_def)
apply (simp add: subsetT_iff)
apply (intro allI impI)
apply (subgoal_tac "Ts ~= {}")
apply (simp add: memT_UnionT)
apply (rule_tac x=y in bexI)
by (auto)
(* UnionT Ts is the least upper bound of Ts *)
lemma UnionT_isLUB : "Ts ~= {} ==> UnionT Ts isLUB Ts"
apply (simp add: isLUB_def UnionT_isUB)
apply (simp add: isUB_def)
apply (simp add: subsetT_iff)
apply (intro allI impI)
apply (simp add: memT_UnionT)
apply (erule bexE)
apply (drule_tac x="T" in spec)
by (simp)
(* the least upper bound of Ts is UnionT Ts *)
lemma isLUB_UnionT_only_if: "[| Ts ~= {} ; T isLUB Ts |] ==> T = UnionT Ts"
apply (insert UnionT_isLUB[of Ts])
apply (simp)
apply (rule LUB_unique)
by (simp_all)
(* iff *)
lemma isLUB_UnionT : "Ts ~= {} ==> (T isLUB Ts) = (T = UnionT Ts)"
apply (rule iffI)
apply (simp add: isLUB_UnionT_only_if)
apply (simp add: UnionT_isLUB)
done
(* LUB is UnionT Ts *)
lemma LUB_UnionT : "Ts ~= {} ==> LUB Ts = UnionT Ts"
by (simp add: isLUB_LUB UnionT_isLUB)
(**********************************************************
( domT, <= ) is a CPO
**********************************************************)
instance domT :: (type) cpo
apply (intro_classes)
apply (simp add: hasLUB_def)
apply (rule_tac x="UnionT X" in exI)
apply (simp add: directed_def UnionT_isLUB)
done
(**********************************************************
( domT, <= ) is a pointed CPO
**********************************************************)
instance domT :: (type) cpo_bot
by (intro_classes)
(***********************************************************
lemmas
***********************************************************)
(****************** to add them again ******************)
declare Union_image_eq [simp]
declare Inter_image_eq [simp]
declare not_None_eq [simp]
end
lemma bottomT:
Bot ≤ T
lemma UnionT_isUB:
UnionT Ts isUB Ts
lemma UnionT_isLUB:
Ts ≠ {} ==> UnionT Ts isLUB Ts
lemma isLUB_UnionT_only_if:
[| Ts ≠ {}; T isLUB Ts |] ==> T = UnionT Ts
lemma isLUB_UnionT:
Ts ≠ {} ==> T isLUB Ts = (T = UnionT Ts)
lemma LUB_UnionT:
Ts ≠ {} ==> LUB Ts = UnionT Ts