src/HOLCF/Up1.thy
author paulson
Fri, 31 Jan 1997 17:13:19 +0100
changeset 2572 8a47f85e7a03
parent 2278 d63ffafce255
child 2640 ee4dfce170a0
permissions -rw-r--r--
ex_impE was incorrectly listed as Safe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2278
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     1
(*  Title:      HOLCF/Up1.thy
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     2
    ID:         $Id$
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     3
    Author:     Franz Regensburger
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     4
    Copyright   1993  Technische Universitaet Muenchen
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     5
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     6
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     7
Lifting
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     8
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     9
*)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    10
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    11
Up1 = Cfun3 + Sum + 
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    12
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    13
(* new type for lifting *)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    14
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    15
types "u" 1
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    16
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    17
arities "u" :: (pcpo)term       
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    18
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    19
consts
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    20
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    21
  Rep_Up      :: "('a)u => (void + 'a)"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    22
  Abs_Up      :: "(void + 'a) => ('a)u"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    23
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    24
  Iup         :: "'a => ('a)u"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    25
  UU_up       :: "('a)u"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    26
  Ifup        :: "('a->'b)=>('a)u => 'b"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    27
  less_up     :: "('a)u => ('a)u => bool"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    28
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    29
rules
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    30
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    31
  (*faking a type definition... *)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    32
  (* ('a)u is isomorphic to void + 'a  *)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    33
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    34
  Rep_Up_inverse  "Abs_Up(Rep_Up(p)) = p"     
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    35
  Abs_Up_inverse  "Rep_Up(Abs_Up(p)) = p"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    36
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    37
   (*defining the abstract constants*)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    38
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    39
defs
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    40
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    41
  UU_up_def   "UU_up == Abs_Up(Inl(UU))"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    42
  Iup_def     "Iup x == Abs_Up(Inr(x))"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    43
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    44
  Ifup_def    "Ifup(f)(x)== case Rep_Up(x) of Inl(y) => UU | Inr(z) => f`z"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    45
 
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    46
  less_up_def "less_up(x1)(x2) == (case Rep_Up(x1) of                 
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    47
               Inl(y1) => True          
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    48
             | Inr(y2) => (case Rep_Up(x2) of Inl(z1) => False       
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    49
                                            | Inr(z2) => y2<<z2))"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    50
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    51
end