(*-------------------------------------------* | CSP-Prover | | December 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CPO_prod imports CPO begin (***************************************************************** 1. Productions of CPO are also CPO. 2. 3. 4. *****************************************************************) (********************************************************** def: prod of bot **********************************************************) instance "fun" :: (type, bot) bot0 apply (intro_classes) done defs (overloaded) prod_Bot_def : "Bot == (%i. Bot)" (************************************************************ Product bot ==> bot ************************************************************) (*** prod Bot ***) lemma prod_Bot: "ALL (x::('i => 'x::bot)). Bot <= x" apply (simp add: le_fun_def) apply (simp add: prod_Bot_def) apply (simp add: bottom_bot) done (***************************** Prod bot => bot *****************************) instance "fun" :: (type,bot) bot apply (intro_classes) by (simp add: prod_Bot) (************************************************************ Product CPO ==> CPO ************************************************************) (*** prod directed decompo ***) lemma prod_directed_decompo: "directed (Xp::('i => 'x::cpo) set) ==> ALL i. directed {xp i |xp. xp : Xp}" apply (simp add: directed_def) apply (intro allI impI) apply (elim conjE exE) apply (rename_tac i x y xp yp) apply (drule_tac x="xp" in spec) apply (drule_tac x="yp" in spec) apply (simp) apply (elim conjE exE) apply (rule_tac x="z i" in exI) by (auto simp add: le_fun_def) (*** prod cpo lemma ***) lemma prod_cpo_lm: "directed (Xp::('i => 'x::cpo) set) ==> (EX x. x isLUB Xp)" apply (rule_tac x="(%i. LUB {xp i |xp. xp : Xp})" in exI) apply (simp add: prod_LUB_decompo) apply (intro allI) apply (insert prod_directed_decompo[of Xp]) apply (simp) apply (drule_tac x="i" in spec) apply (simp add: proj_fun_def) apply (insert complete_cpo_lm) apply (drule_tac x="{xp i |xp. xp : Xp}" in spec) apply (subgoal_tac "(%x. x i) ` Xp = {xp i |xp. xp : Xp}") apply (simp add: LUB_is) by (auto) (***************************** Prod CPO => CPO *****************************) instance "fun" :: (type,cpo) cpo apply (intro_classes) by (simp add: hasLUB_def prod_cpo_lm) (************************************************************ Product CPO_BOT ==> CPO_BOT ************************************************************) instance "fun" :: (type,cpo_bot) cpo_bot by (intro_classes) (************************************************************ Project continuity ************************************************************) lemma proj_continuous: "continuous (proj_fun i)" apply (simp add: continuous_iff) apply (intro allI impI) apply (insert complete_cpo_lm) apply (drule_tac x="X" in spec) apply (simp add: hasLUB_def) apply (erule exE) apply (rule_tac x="x" in exI) apply (simp add: prod_LUB_decompo) done (************************************************************ Product continuity ************************************************************) lemma prod_continuous_only_if: "continuous (h :: (('x::cpo) => ('i =>('y::cpo)))) ==> continuous ((proj_fun i) o h)" by (simp add: proj_continuous compo_continuous) lemma prod_continuous_if: "(ALL i. continuous ((proj_fun i) o h)) ==> continuous (h :: (('x::cpo) => ('i =>('y::cpo))))" apply (simp add: continuous_iff) apply (insert complete_cpo_lm) apply (intro allI impI) apply (drule_tac x="X" in spec) apply (simp add: hasLUB_def) apply (erule exE) apply (rule_tac x="x" in exI) apply (simp) apply (simp add: prod_LUB_decompo) apply (intro allI) apply (drule_tac x="i" in spec) apply (drule_tac x="X" in spec) apply (simp) apply (erule exE) apply (subgoal_tac "xa = x") apply (simp add: image_compose) apply (erule conjE) by (simp add: LUB_unique) lemma prod_continuous: "continuous (h :: (('x::cpo) => ('i =>('y::cpo)))) = (ALL i. continuous ((proj_fun i) o h))" apply (rule iffI) apply (simp add: prod_continuous_only_if) apply (simp add: prod_continuous_if) done (************************************************************ prod_variable continuity ************************************************************) lemma continuous_prod_variable: "continuous (%f. f pn)" apply (simp add: continuous_iff) apply (intro allI impI) apply (insert complete_cpo_lm) apply (drule_tac x="X" in spec, simp) apply (simp add: hasLUB_def) apply (erule exE) apply (rule_tac x="x" in exI, simp) apply (simp add: prod_LUB_decompo) apply (drule_tac x="pn" in spec) apply (simp add: proj_fun_def) done end
lemma prod_Bot:
∀x. Bot ≤ x
lemma prod_directed_decompo:
directed Xp ==> ∀i. directed {xp i |xp. xp ∈ Xp}
lemma prod_cpo_lm:
directed Xp ==> ∃x. x isLUB Xp
lemma proj_continuous:
continuous (proj_fun i)
lemma prod_continuous_only_if:
continuous h ==> continuous (proj_fun i o h)
lemma prod_continuous_if:
∀i. continuous (proj_fun i o h) ==> continuous h
lemma prod_continuous:
continuous h = (∀i. continuous (proj_fun i o h))
lemma continuous_prod_variable:
continuous (λf. f pn)