| author | paulson | 
| Mon, 23 Jun 1997 10:42:03 +0200 | |
| changeset 3457 | a8ab7c64817c | 
| parent 2840 | 7e03e61612b0 | 
| child 3693 | 37aa547fb564 | 
| permissions | -rw-r--r-- | 
| 2640 | 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 | 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 | Class instance of * for class pcpo | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 7 | |
| 
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 | Cprod3 = Cprod2 + | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 11 | |
| 2840 
7e03e61612b0
generalized theorems and class instances for Cprod.
 slotosch parents: 
2640diff
changeset | 12 | instance "*" :: (cpo,cpo)cpo (cpo_cprod) | 
| 
7e03e61612b0
generalized theorems and class instances for Cprod.
 slotosch parents: 
2640diff
changeset | 13 | instance "*" :: (pcpo,pcpo)pcpo (least_cprod) | 
| 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 | 16 |         cpair        :: "'a -> 'b -> ('a*'b)" (* continuous  pairing *)
 | 
| 17 |         cfst         :: "('a*'b)->'a"
 | |
| 18 |         csnd         :: "('a*'b)->'b"
 | |
| 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 | 21 | syntax | 
| 22 |         "@ctuple"    :: "['a, args] => 'a * 'b"         ("(1<_,/ _>)")
 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
752diff
changeset | 23 | |
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
752diff
changeset | 24 | translations | 
| 1479 | 25 | "<x, y, z>" == "<x, <y, z>>" | 
| 26 | "<x, y>" == "cpair`x`y" | |
| 625 | 27 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
752diff
changeset | 28 | defs | 
| 1479 | 29 | cpair_def "cpair == (LAM x y.(x,y))" | 
| 30 | cfst_def "cfst == (LAM p.fst(p))" | |
| 31 | csnd_def "csnd == (LAM p.snd(p))" | |
| 32 | 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 | 33 | |
| 1274 | 34 | |
| 35 | ||
| 36 | (* introduce syntax for | |
| 37 | ||
| 38 | Let <x,y> = e1; z = E2 in E3 | |
| 39 | ||
| 40 | and | |
| 41 | ||
| 2394 | 42 | LAM <x,y,z>.e | 
| 1274 | 43 | *) | 
| 44 | ||
| 45 | types | |
| 46 | Cletbinds Cletbind | |
| 47 | ||
| 48 | consts | |
| 49 |   CLet           :: "'a -> ('a -> 'b) -> 'b"
 | |
| 50 | ||
| 51 | syntax | |
| 52 | (* syntax for Let *) | |
| 53 | ||
| 54 |   "_Cbind"  :: "[pttrn, 'a] => Cletbind"             ("(2_ =/ _)" 10)
 | |
| 55 |   ""        :: "Cletbind => Cletbinds"               ("_")
 | |
| 56 |   "_Cbinds" :: "[Cletbind, Cletbinds] => Cletbinds"  ("_;/ _")
 | |
| 57 |   "_CLet"   :: "[Cletbinds, 'a] => 'a"                ("(Let (_)/ in (_))" 10)
 | |
| 58 | ||
| 59 | translations | |
| 60 | (* translation for Let *) | |
| 61 | "_CLet (_Cbinds b bs) e" == "_CLet b (_CLet bs e)" | |
| 62 | "Let x = a in e" == "CLet`a`(LAM x.e)" | |
| 63 | ||
| 64 | defs | |
| 65 | (* Misc Definitions *) | |
| 66 | CLet_def "CLet == LAM s. LAM f.f`s" | |
| 67 | ||
| 68 | syntax | |
| 69 | (* syntax for LAM <x,y,z>.E *) | |
| 70 |   "@Cpttrn"  :: "[pttrn,pttrns] => pttrn"              ("<_,/_>")
 | |
| 71 | ||
| 72 | translations | |
| 73 | (* translations for LAM <x,y,z>.E *) | |
| 74 | "LAM <x,y,zs>.b" == "csplit`(LAM x.LAM <y,zs>.b)" | |
| 75 | "LAM <x,y>.b" == "csplit`(LAM x.LAM y.b)" | |
| 76 | (* reverse translation <= does not work yet !! *) | |
| 77 | ||
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 78 | end | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 79 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 80 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 81 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 82 |