Programming Computable Functions
Programming Computable Functions
Syntax
The types of PCF are inductively defined as nat is a type For types and , there is a type A context is a list of pairs x : , where x is a variable name and is a type, such that no variable name is duplicated. One then defines typing judgments of terms-in-context in the usual way for the following syntactical constructs: Variables (if x : is part of a context , then x : ) Application (of a term of type to a term of type ) -abstraction The Y fixed point combinator (making terms of type out of terms of type ) The successor (succ) and predecessor (pred) operations on nat and the constant 0 The conditional if with the typing rule:
(nats will be interpreted as booleans here with a convention like zero denoting truth, and any other number denoting falsity)
Semantics
Denotational semantics
A relatively straightforward semantics for the language is the Scott model. In this model, Types are interpreted as certain domains. (the natural numbers with a bottom element adjoined, with the flat ordering) is interpreted as the domain of Scott-continuous functions from to is interpreted as the product are interpreted as continuous functions
Variable terms are interpreted as projections Lambda abstraction and application are interpreted by making use of the cartesian closed structure of the category of domains and continuous functions Y is interpreted by taking the least fixed point of the argument
Programming Computable Functions This model is not fully abstract for PCF; but it is fully abstract for the language obtained by adding a parallel or operator to PCF (p.293 in the Hyland and Ong 2000 reference below).
Notes
[1] "PCF is a programming language for computable functions, based on LCF, Scotts logic of computable functions" (Plotkin 1977). Programming Computable Functions is used by (Mitchell 1996). It is also referred to as Programming with Computable Functions or Programming language for Computable Functions.
References
Abramsky, S., Jagadeesan, R., and Malacaria, P. (2000). "Full Abstraction for PCF". Information and Computation 163 (2): 409470. doi:10.1006/inco.2000.2930. Hyland, J. M. E. and Ong, C.-H. L. (2000). "On Full Abstraction for PCF". Information and Computation 163 (2): 285408. doi:10.1006/inco.2000.2917. O'Hearn, P. W. and Riecke, J. G (1995). "Kripke Logical Relations and PCF". Information and Computation 120 (1): 107116. doi:10.1006/inco.1995.1103. Loader, R. (2001). "Finitary PCF is not decidable". Theoretical Computer Science 266 (1-2): 341364. doi:10.1016/S0304-3975(00)00194-8. Ong, C.-H. L. (1995). "Correspondence between Operational and Denotational Semantics: The Full Abstraction Problem for PCF" (http://users.comlab.ox.ac.uk/luke.ong/publications/index.html). In Abramsky, S., Gabbay, D., and Maibau, T. S. E.. Handbook of Logic in Computer Science. Oxford University Press. pp.269356. Plotkin, Gordon D. (1977). "LCF considered as a programming language" (http://homepages.inf.ed.ac.uk/ gdp/publications/LCF.pdf). Theoretical Computer Science 5: 223255. doi:10.1016/0304-3975(77)90044-5. Mitchell, John C. (1996). "The Language PCF". Foundations for Programming Languages.
External links
Introduction to RealPCF (http://www.cs.bham.ac.uk/~mhe/papers/RNC3.pdf) Lexer and Parser for PCF written in SML (http://www.cs.pomona.edu/classes/cs131/Parsers/parsePCF.sml)
License
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/