src/HOLCF/Up1.thy
author oheimb
Fri, 31 Jan 1997 15:54:00 +0100
changeset 2567 7a28e02e10b7
parent 2278 d63ffafce255
child 2640 ee4dfce170a0
permissions -rw-r--r--
added addloop (and also documentation of addsolver

(*  Title:      HOLCF/Up1.thy
    ID:         $Id$
    Author:     Franz Regensburger
    Copyright   1993  Technische Universitaet Muenchen


Lifting

*)

Up1 = Cfun3 + Sum + 

(* new type for lifting *)

types "u" 1

arities "u" :: (pcpo)term       

consts

  Rep_Up      :: "('a)u => (void + 'a)"
  Abs_Up      :: "(void + 'a) => ('a)u"

  Iup         :: "'a => ('a)u"
  UU_up       :: "('a)u"
  Ifup        :: "('a->'b)=>('a)u => 'b"
  less_up     :: "('a)u => ('a)u => bool"

rules

  (*faking a type definition... *)
  (* ('a)u is isomorphic to void + 'a  *)

  Rep_Up_inverse  "Abs_Up(Rep_Up(p)) = p"     
  Abs_Up_inverse  "Rep_Up(Abs_Up(p)) = p"

   (*defining the abstract constants*)

defs

  UU_up_def   "UU_up == Abs_Up(Inl(UU))"
  Iup_def     "Iup x == Abs_Up(Inr(x))"

  Ifup_def    "Ifup(f)(x)== case Rep_Up(x) of Inl(y) => UU | Inr(z) => f`z"
 
  less_up_def "less_up(x1)(x2) == (case Rep_Up(x1) of                 
               Inl(y1) => True          
             | Inr(y2) => (case Rep_Up(x2) of Inl(z1) => False       
                                            | Inr(z2) => y2<<z2))"

end