39 research outputs found

    Fully Abstract Translations Between Functional Languages

    Get PDF
    We examine the problem of finding fully abstract translations between programming languages, i.e., translations that preserve code equivalence and nonequivalence. We present three examples of fully abstract translations: one from call-by-value to lazy PCF, one from call-by name to call-by-value PCF, and one from lazy to call-by-value PCF. The translations yield upper and lower bounds on decision procedures for proving equivalences of code. We finally define a notion of functional translation that captures the essence of the proofs of full abstraction, and show that some languages cannot be translated into others

    Statman\u27s 1-Section Theorem

    Get PDF
    Statman\u27s 1-Section Theorem [17] is an important but little-known result in the model theory of the simply-typed λ-calculus. The λ-Section Theorem states a necessary and sufficient condition on models of the simply-typed λ-calculus for determining whether βη-equational reasoning is complete for proving equations that hold in a model. We review the statement of the theorem, give a detailed proof, and discuss its significance

    Privacy via subsumption

    Get PDF
    We describe an object calculus allowing object extension and structural subtyping. Each object has a “dictionary ” to mediate the connection between names and components. This extra indirection yields the first object calculus combining both object extension and full width subtyping in a type-safe manner. If class inheritance is modeled with object extension, private fields and methods can be achieved directly by scoping restrictions: private fields or methods are those hidden by subsumption. We prove that the type system is sound, discuss a variant allowing covariant self types, and give some examples of the expressiveness of the calculus. C ○ 2002 Elsevier Scienc

    LOGIC & COMPUTATION 38

    No full text
    We examine the problem of finding fully abstract translations between programming languages, i.e., translations that preserve code equivalence and nonequivalence. We present three examples of fully abstract translations: one from call-by-value to lazy PCF, one from call-byname to call-by-value PCF, and one from lazy to call-by-value PCF. The translations yield upper and lower bounds on decision procedures for proving equivalences of code. We finally define a notion of "functional translation " that captures the essence of the proofs of full abstraction, and show that some languages cannot be translated into others.

    Delimiting the Scope of Effects

    No full text
    Program fragments in functional languages may be observationally congruent in a language without effects (continuations, state, exceptions) but not in an extension with effects. We give a generic way to preserve pure functional congruences by means of an effects delimiter. The effects delimiter is defined semantically using the retraction techniques of [14], but can also be given an operational semantics. We show that the effects delimiter restores observational congruences between purely functional pieces of code, thus achieving a modular separation between the purely functional language and its extensions. 1 Introduction Functional programming is a powerful paradigm, but it has long been recognized that purely functional programs are often inefficient and cumbersome. Many modern functional languages, e.g., SML [9], build in control and state features that strictly fall outside the functional paradigm. For example, SML of New Jersey includes a "call-with-current-continuation" opera..

    The Analysis of Programming Structure

    No full text
    This paper has explored three examples of good semantical analyses of programming structures. The three examples share two characteristics: the semantic models are abstract enough to be applicable in many situations, and the models lead to proofs of non-computability. Other examples of programming structures have been omitted from this short essay: foundations for object-oriented languages, descriptions of languages with local variables, and the theory of database query languages. Each of these examples have corresponding semantical theories that enjoy the two characteristics above. The richness of programming structure suggests a corollary: it is folly to look for one universal model to explain all programming structures. Of course, as a theoretical subject, semantics benefits from the reduction of many concepts to a primitive, common level. Nevertheless, reduction must often be resisted. We have seen how computability theory loses all kinds of relevant distinctions. Another example is the naive semantics of PCF based on dcpos: the model is not abstract enough

    Programming language semantics

    No full text
    corecore