(*-------------------------------------------*
            |        CSP-Prover on Isabelle2004         |
            |                 August 2004               |
            |                                           |
            |        CSP-Prover on Isabelle2005         |
            |                October 2005  (modified)   |
            |                                           |
            |        Yoshinao Isobe (AIST JAPAN)        |
            *-------------------------------------------*)
theory CPO_set = CPO:
(*****************************************************************
         1. Sets are CPO.
         2. 
         3. 
         4. 
 *****************************************************************)
(********************************************************** 
              def: prod of bot
 **********************************************************)
instance set :: (type) bot0
apply (intro_classes)
done
defs (overloaded)
  set_Bot_def : "Bot == {}"
(************************************************************
                   Set bot ==> bot
 ************************************************************)
(*** set Bot ***)
lemma set_Bot:
  "ALL (X::('a set)). Bot <= X"
apply (simp add: set_Bot_def)
done
(*****************************
       Set bot => bot
 *****************************)
instance set :: (type) bot
apply (intro_classes)
by (simp add: set_Bot)
(************************************************************
                      Set : CPO
 ************************************************************)
(*** set directed decompo ***)
lemma set_cpo_lm:
  "directed (Xs::('a set) set) ==> Xs hasLUB"
apply (simp add: hasLUB_def)
apply (rule_tac x="Union Xs" in exI)
apply (simp add: isLUB_def isUB_def)
by (auto)
(*****************************
          Set : CPO
 *****************************)
instance set :: (type) cpo
apply (intro_classes)
by (simp add: set_cpo_lm)
(************************************************************
                      Set : CPO_BOT
 ************************************************************)
instance set :: (type) cpo_bot
by (intro_classes)
end
lemma set_Bot:
∀X. Bot ⊆ X
lemma set_cpo_lm:
directed Xs ==> Xs hasLUB