Programming Computable Functions
||It has been suggested that Logic of Computable Functions be merged into this article. (Discuss) Proposed since July 2013.|
In computer science, Programming Computable Functions,[note 1] or PCF, is a typed functional language introduced in an unpublished 1969 manuscript by Dana Scott. It can be considered to be an extended version of the typed lambda calculus or a simplified version of modern typed functional languages such as ML.
A fully abstract model for PCF was first given by Milner (1977). However, since Milner's model was essentially based on the syntax of PCF it was considered less than satisfactory (Ong, 1995). The first two fully abstract models not employing syntax were formulated during the 1990s. These models are based on game semantics (Hyland and Ong, 2000; Abramsky, Jagadeesan, and Malacaria, 2000) and Kripke logical relations (O'Hearn and Riecke, 1995). For a time it was felt that neither of these models was completely satisfactory, since they were not effectively presentable. However, Ralph Loader demonstrated that no effectively presentable fully abstract model could exist, since the question of program equivalence in the finitary fragment of PCF is not decidable.
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 σ)
- 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)
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
- A context is interpreted as the product
- Terms in context are interpreted as continuous functions
- "PCF is a programming language for computable functions, based on LCF, Scott’s 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.
- Scott, Dana S. (1969). "A type-theoretic alternative to CUCH, ISWIM, OWHY". Unpublished manuscript. Republished in Theoretical Computer Science 121: 411–440. 1993. doi:10.1016/0304-3975(93)90095-b.
- Plotkin, Gordon D. (1977). "LCF considered to be a programming language". Theoretical Computer Science 5: 223–255. doi:10.1016/0304-3975(77)90044-5.
- Mitchell, John C. (1996). "The Language PCF". Foundations for Programming Languages.
- Abramsky, S., Jagadeesan, R., and Malacaria, P. (2000). "Full Abstraction for PCF". Information and Computation 163 (2): 409–470. 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): 285–408. 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): 107–116. doi:10.1006/inco.1995.1103.
- Loader, R. (2001). "Finitary PCF is not decidable". Theoretical Computer Science 266 (1-2): 341–364. 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". In Abramsky, S., Gabbay, D., and Maibau, T. S. E. Handbook of Logic in Computer Science. Oxford University Press. pp. 269–356.