src/HOLCF/Cprod3.thy
author oheimb
Fri, 29 Nov 1996 12:22:22 +0100
changeset 2278 d63ffafce255
parent 1479 21eb5e156d91
child 2291 fbd14a05fb88
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
     1
(*  Title:      HOLCF/cprod3.thy
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     2
    ID:         $Id$
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
     3
    Author:     Franz Regensburger
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     4
    Copyright   1993 Technische Universitaet Muenchen
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     5
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     6
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     7
Class instance of  * for class pcpo
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     8
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     9
*)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    10
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    11
Cprod3 = Cprod2 +
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    12
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    13
arities "*" :: (pcpo,pcpo)pcpo                  (* Witness cprod2.ML *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    14
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    15
consts  
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    16
        cpair        :: "'a -> 'b -> ('a*'b)" (* continuous  pairing *)
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    17
        cfst         :: "('a*'b)->'a"
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    18
        csnd         :: "('a*'b)->'b"
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    19
        csplit       :: "('a->'b->'c)->('a*'b)->'c"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    20
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    21
syntax  
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    22
        "@ctuple"    :: "['a, args] => 'a * 'b"         ("(1<_,/ _>)")
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 752
diff changeset
    23
752
b89462f9d5f1 ----------------------------------------------------------------------
regensbu
parents: 625
diff changeset
    24
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 752
diff changeset
    25
translations 
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    26
        "<x, y, z>"   == "<x, <y, z>>"
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    27
        "<x, y>"      == "cpair`x`y"
625
119391dd1d59 New version
nipkow
parents: 442
diff changeset
    28
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    29
rules 
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    30
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    31
inst_cprod_pcpo "(UU::'a*'b) = (UU,UU)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    32
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 752
diff changeset
    33
defs
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    34
cpair_def       "cpair  == (LAM x y.(x,y))"
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    35
cfst_def        "cfst   == (LAM p.fst(p))"
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    36
csnd_def        "csnd   == (LAM p.snd(p))"      
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    37
csplit_def      "csplit == (LAM f p.f`(cfst`p)`(csnd`p))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    38
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    39
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    40
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    41
(* introduce syntax for
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    42
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    43
   Let <x,y> = e1; z = E2 in E3
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    44
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    45
   and
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    46
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    47
   ¤<x,y,z>.e
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    48
*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    49
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    50
types
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    51
  Cletbinds  Cletbind 
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    52
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    53
consts
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    54
  CLet           :: "'a -> ('a -> 'b) -> 'b"
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    55
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    56
syntax
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    57
  (* syntax for Let *) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    58
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    59
  "_Cbind"  :: "[pttrn, 'a] => Cletbind"             ("(2_ =/ _)" 10)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    60
  ""        :: "Cletbind => Cletbinds"               ("_")
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    61
  "_Cbinds" :: "[Cletbind, Cletbinds] => Cletbinds"  ("_;/ _")
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    62
  "_CLet"   :: "[Cletbinds, 'a] => 'a"                ("(Let (_)/ in (_))" 10)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    63
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    64
translations
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    65
  (* translation for Let *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    66
  "_CLet (_Cbinds b bs) e"  == "_CLet b (_CLet bs e)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    67
  "Let x = a in e"          == "CLet`a`(LAM x.e)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    68
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    69
defs
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    70
  (* Misc Definitions *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    71
  CLet_def       "CLet == LAM s. LAM f.f`s"
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    72
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    73
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    74
syntax
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    75
  (* syntax for LAM <x,y,z>.E *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    76
  "@Cpttrn"  :: "[pttrn,pttrns] => pttrn"              ("<_,/_>")
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    77
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    78
translations
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    79
  (* translations for LAM <x,y,z>.E *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    80
  "LAM <x,y,zs>.b"   == "csplit`(LAM x.LAM <y,zs>.b)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    81
  "LAM <x,y>.b"      == "csplit`(LAM x.LAM y.b)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    82
  (* reverse translation <= does not work yet !! *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    83
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    84
(* start 8bit 1 *)
2278
d63ffafce255 *** empty log message ***
oheimb
parents: 1479
diff changeset
    85
translations
d63ffafce255 *** empty log message ***
oheimb
parents: 1479
diff changeset
    86
  "Let x = a in e"          == "CLet`a`(¤ x.e)"
d63ffafce255 *** empty log message ***
oheimb
parents: 1479
diff changeset
    87
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1168
diff changeset
    88
(* end 8bit 1 *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    89
end
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    90
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    91
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    92
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    93