Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory Domain_SF_cpo = Domain_SF + Domain_T_cpo + Domain_F_cpo + CPO_pair: (*-------------------------------------------*
| CPO-Prover |
| December 2004 |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory Domain_SF_cpo = Domain_SF + Domain_T_cpo + Domain_F_cpo + CPO_pair:
(*****************************************************************
1.
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]
(*********************************************************
Bottom in Dom_SF
*********************************************************)
instance domSF :: (type) bot0
by (intro_classes)
defs (overloaded)
bottomSF_def : "Bot == ({[]t}t ,, {}f)"
lemma bottomSF: "Bot <= (SF::'a domSF)"
apply (simp add: bottomSF_def pairSF_def)
apply (simp add: subsetSF_def Abs_domSF_inverse)
done
instance domSF :: (type) bot
apply (intro_classes)
by (simp add: bottomSF)
(**********************************************************
lemmas used in a proof that domain_SF is a cpo.
**********************************************************)
(* LUB_TF TFs is an upper bound of TFs *)
consts
LUB_TF :: "'a domTF set => 'a domTF"
LUB_SF :: "'a domSF set => 'a domSF"
defs
LUB_TF_def : "LUB_TF TFs == (UnionT (fst ` TFs), UnionF (snd ` TFs))"
LUB_SF_def : "LUB_SF SFs == Abs_domSF (LUB_TF (Rep_domSF ` SFs))"
(************* LUB_TF *************)
(*** LUB_TF --> LUB ***)
lemma LUB_TF_isLUB:
"TFs ~= {} ==> LUB_TF TFs isLUB TFs"
apply (simp add: pair_LUB_decompo)
apply (simp add: LUB_TF_def)
apply (simp add: isLUB_UnionT isLUB_UnionF)
done
(*** LUB --> LUB_TF ***)
lemma isLUB_LUB_TF_only_if:
"[| TFs ~= {} ; TF isLUB TFs |] ==> TF = LUB_TF TFs"
apply (insert LUB_TF_isLUB[of TFs])
by (simp add: LUB_unique)
(* iff *)
lemma isLUB_LUB_TF : "TFs ~= {} ==> TF isLUB TFs = (TF = LUB_TF TFs)"
apply (rule iffI)
apply (simp add: isLUB_LUB_TF_only_if)
apply (simp add: LUB_TF_isLUB)
done
(*** LUB TF = LUB_TF ***)
lemma LUB_LUB_TF:
"TFs ~= {} ==> LUB TFs = LUB_TF TFs"
by (simp add: isLUB_LUB LUB_TF_isLUB)
(****** LUB_TF TFs in domSF ******)
(* T3_F4 *)
lemma LUB_TF_in_T3_F4:
"[| TFs ~= {} ; ALL TF:TFs. TF:domSF |] ==> HC_T3_F4 (LUB_TF TFs)"
apply (simp add: LUB_TF_def HC_T3_F4_def)
apply (intro allI impI)
apply (simp add: memT_UnionT)
apply (simp add: memF_UnionF)
apply (elim bexE conjE)
apply (drule_tac x="x" in bspec, simp)
apply (simp add: domSF_iff HC_T3_F4_def)
by (auto)
(* F3 *)
lemma LUB_TF_in_F3:
"[| TFs ~= {} ; ALL TF:TFs. TF:domSF |] ==> HC_F3 (LUB_TF TFs)"
apply (simp add: LUB_TF_def HC_F3_def)
apply (intro allI impI)
apply (simp add: memT_UnionT)
apply (simp add: memF_UnionF)
apply (elim bexE conjE)
apply (drule_tac x="x" in bspec, simp)
apply (simp add: domSF_def HC_F3_def)
apply (elim conjE)
apply (drule_tac x="s" in spec)
apply (drule_tac x="X" in spec)
apply (drule_tac x="Y" in spec)
by (auto)
(* T2 *)
lemma LUB_TF_in_T2:
"[| TFs ~= {} ; ALL TF:TFs. TF:domSF |] ==> HC_T2 (LUB_TF TFs)"
apply (simp add: LUB_TF_def HC_T2_def)
apply (intro allI impI)
apply (simp add: memT_UnionT)
apply (simp add: memF_UnionF)
apply (elim exE bexE)
apply (drule_tac x="x" in bspec, simp)
apply (simp add: domSF_def HC_T2_def)
apply (elim conjE)
apply (drule_tac x="s" in spec)
by (auto)
(*** LUB_TF TFs in domSF ***)
lemma LUB_TF_in:
"[| TFs ~= {} ; ALL TF:TFs. TF:domSF |] ==> (LUB_TF TFs): domSF"
apply (simp (no_asm) add: domSF_iff)
apply (simp add: LUB_TF_in_T2)
apply (simp add: LUB_TF_in_F3)
apply (simp add: LUB_TF_in_T3_F4)
done
(************* LUB_SF *************)
(* isLUB lemma *)
lemma TF_isLUB_SFs:
"[| TF:domSF ; TF isLUB Rep_domSF ` SFs |] ==> Abs_domSF TF isLUB SFs"
apply (simp add: isUB_def isLUB_def)
apply (rule conjI)
(* ub *)
apply (intro allI impI)
apply (elim bexE conjE)
apply (drule_tac x="fst (Rep_domSF y)" in spec)
apply (drule_tac x="snd (Rep_domSF y)" in spec)
apply (simp add: subsetSF_def Abs_domSF_inverse)
(* lub *)
apply (intro allI impI)
apply (elim bexE conjE)
apply (rotate_tac -1)
apply (drule_tac x="fst (Rep_domSF y)" in spec)
apply (rotate_tac -1)
apply (drule_tac x="snd (Rep_domSF y)" in spec)
apply (simp)
apply (drule mp)
apply (intro allI impI)
apply (simp add: image_def)
apply (elim bexE conjE)
apply (drule_tac x="x" in spec)
apply (simp)
apply (simp add: subsetSF_def)
apply (simp add: subsetSF_def Abs_domSF_inverse)
done
(*** LUB_SF --> LUB ***)
lemma LUB_SF_isLUB:
"SFs ~= {} ==> LUB_SF SFs isLUB SFs"
apply (simp add: LUB_SF_def)
apply (rule TF_isLUB_SFs)
apply (simp add: LUB_TF_in)
apply (simp add: LUB_TF_isLUB)
done
(*** LUB --> LUB_SF ***)
lemma isLUB_LUB_SF_only_if:
"[| SFs ~= {} ; SF isLUB SFs |] ==> SF = LUB_SF SFs"
apply (insert LUB_SF_isLUB[of SFs])
by (simp add: LUB_unique)
(* iff *)
lemma isLUB_LUB_SF : "SFs ~= {} ==> SF isLUB SFs = (SF = LUB_SF SFs)"
apply (rule iffI)
apply (simp add: isLUB_LUB_SF_only_if)
apply (simp add: LUB_SF_isLUB)
done
(**********************************************************
( domSF, <= ) is a CPO
**********************************************************)
instance domSF :: (type) cpo
apply (intro_classes)
apply (simp add: hasLUB_def)
apply (rule_tac x="LUB_SF X" in exI)
by (simp add: directed_def LUB_SF_isLUB)
(**********************************************************
( domSF, <= ) is a pointed CPO
**********************************************************)
instance domSF :: (type) cpo_bot
by (intro_classes)
(**********************************************************
continuity of Abs_domSF
**********************************************************)
(*** Abs_domSF ***)
lemma continuous_Abs_domSF:
"[| ALL x. f x: domSF ; continuous f |] ==> continuous (Abs_domSF o 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 (rule TF_isLUB_SFs)
apply (simp)
apply (subgoal_tac "Rep_domSF ` (Abs_domSF o f) ` X = f ` X")
by (auto simp add: image_def Abs_domSF_inverse)
(*** Rep_domSF ***)
lemma cont_Rep_domSF: "continuous Rep_domSF"
apply (simp add: continuous_iff)
apply (intro allI impI)
apply (rule_tac x="LUB_SF X" in exI)
apply (simp add: directed_def LUB_SF_isLUB)
apply (simp add: isLUB_LUB_TF)
apply (simp add: LUB_SF_def)
apply (simp add: LUB_TF_in Abs_domSF_inverse)
done
(****************** to add them again ******************)
declare Union_image_eq [simp]
declare Inter_image_eq [simp]
end
lemma bottomSF:
Bot ≤ SF
lemma LUB_TF_isLUB:
TFs ≠ {} ==> LUB_TF TFs isLUB TFs
lemma isLUB_LUB_TF_only_if:
[| TFs ≠ {}; TF isLUB TFs |] ==> TF = LUB_TF TFs
lemma isLUB_LUB_TF:
TFs ≠ {} ==> TF isLUB TFs = (TF = LUB_TF TFs)
lemma LUB_LUB_TF:
TFs ≠ {} ==> LUB TFs = LUB_TF TFs
lemma LUB_TF_in_T3_F4:
[| TFs ≠ {}; ∀TF∈TFs. TF ∈ domSF |] ==> HC_T3_F4 (LUB_TF TFs)
lemma LUB_TF_in_F3:
[| TFs ≠ {}; ∀TF∈TFs. TF ∈ domSF |] ==> HC_F3 (LUB_TF TFs)
lemma LUB_TF_in_T2:
[| TFs ≠ {}; ∀TF∈TFs. TF ∈ domSF |] ==> HC_T2 (LUB_TF TFs)
lemma LUB_TF_in:
[| TFs ≠ {}; ∀TF∈TFs. TF ∈ domSF |] ==> LUB_TF TFs ∈ domSF
lemma TF_isLUB_SFs:
[| TF ∈ domSF; TF isLUB Rep_domSF ` SFs |] ==> Abs_domSF TF isLUB SFs
lemma LUB_SF_isLUB:
SFs ≠ {} ==> LUB_SF SFs isLUB SFs
lemma isLUB_LUB_SF_only_if:
[| SFs ≠ {}; SF isLUB SFs |] ==> SF = LUB_SF SFs
lemma isLUB_LUB_SF:
SFs ≠ {} ==> SF isLUB SFs = (SF = LUB_SF SFs)
lemma continuous_Abs_domSF:
[| ∀x. f x ∈ domSF; continuous f |] ==> continuous (Abs_domSF ˆ f)
lemma cont_Rep_domSF:
continuous Rep_domSF