theory PLogic imports HOLCF begin constdefs set_bind :: "('a \ 'b set) \ ('a \ 'b) set" (binder "SET " 10) "set_bind f \ {(x,y). y \ f x}" strong :: "'a::pcpo set \ 'a set" "strong A \ A - {\}" arrow :: "'a set \ 'b set \ ('a \ 'b) set" "arrow A B \ {f. \x\A. f\x \ B}" arrow2 :: "'a set \ 'b set \ ('a \ 'b) u set" "arrow2 A B \ insert \ {up\f |f. \x\A. f\x \ B}" lifted :: "('a \ tr) \ 'a set" "lifted p \ {x. p\x \ TT}" cong1 :: "('a \ 'b) \ 'a set \ 'b set" "cong1 x A \ \a\A. {x\a}" cong2 :: "('a \ 'b \ 'c) \ 'a set \ 'b set \ 'c set" "cong2 x A B \ \a\A. \b\B. {x\a\b}" cong3 :: "('a \ 'b \ 'c \ 'd) \ 'a set \ 'b set \ 'c set \ 'd set" "cong3 x A B C \ \a\A. \b\B. \c\C. {x\a\b\c}" lemma set_bind: "((x,y) \ set_bind f) = (y \ f x)" by (simp add: set_bind_def) lemma strong: "(x \ strong A) = (x \ A \ x \ \)" by (simp add: strong_def) lemma arrow: "(f \ arrow A B) = (\x\A. f\x \ B)" by (simp add: arrow_def) lemma arrowI: "\\x. x \ A \ f\x \ B\ \ f \ arrow A B" by (simp add: arrow_def) lemma arrowD: "\f \ arrow A B; x \ A\ \ f\x \ B" by (simp add: arrow_def) lemma lifted: "(x \ lifted p) = (p\x \ TT)" by (simp add: lifted_def) end