Results 1  10
of
17
Proving congruence of bisimulation in functional programming languages
 Information and Computation
, 1996
"... Email: howe research.att.com We give a method for proving congruence of bisimulationlike equivalences in functional programming languages. The method applies to languages that can be presented as a set of expressions together with an evaluation relation. We use this method to show that some genera ..."
Abstract

Cited by 109 (1 self)
 Add to MetaCart
Email: howe research.att.com We give a method for proving congruence of bisimulationlike equivalences in functional programming languages. The method applies to languages that can be presented as a set of expressions together with an evaluation relation. We use this method to show that some generalizations of Abramsky's applicative bisimulation are congruences whenever evaluation can be specified by a certain natural form of structured operational semantics. One of the generalizations handles nondeterminism and diverging computations.] 1996 Academic Press, Inc. 1.
From operational semantics to abstract machines
 Mathematical Structures in Computer Science
, 1992
"... We consider the problem of mechanically constructing abstract machines from operational semantics, producing intermediatelevel specifications of evaluators guaranteed to be correct with respect to the operational semantics. We construct these machines by repeatedly applying correctnesspreserving t ..."
Abstract

Cited by 59 (6 self)
 Add to MetaCart
We consider the problem of mechanically constructing abstract machines from operational semantics, producing intermediatelevel specifications of evaluators guaranteed to be correct with respect to the operational semantics. We construct these machines by repeatedly applying correctnesspreserving transformations to operational semantics until the resulting specifications have the form of abstract machines. Though not automatable in general, this approach to constructing machine implementations can be mechanized, providing machineverified correctness proofs. As examples we present the transformation of specifications for both callbyname and callbyvalue evaluation of the untyped λcalculus into abstract machines that implement such evaluation strategies. We also present extensions to the callbyvalue machine for a language containing constructs for recursion, conditionals, concrete data types, and builtin functions. In all cases, the correctness of the derived abstract machines follows from the (generally transparent) correctness of the initial operational semantic specification and the correctness of the transformations applied. 1.
A Naïve Time Analysis and its Theory of Cost Equivalence
 Journal of Logic and Computation
, 1995
"... Techniques for reasoning about extensional properties of functional programs are well understood, but methods for analysing the underlying intensional or operational properties have been much neglected. This paper begins with the development of a simple but useful calculus for time analysis of nons ..."
Abstract

Cited by 39 (7 self)
 Add to MetaCart
Techniques for reasoning about extensional properties of functional programs are well understood, but methods for analysing the underlying intensional or operational properties have been much neglected. This paper begins with the development of a simple but useful calculus for time analysis of nonstrict functional programs with lazy lists. One limitation of this basic calculus is that the ordinary equational reasoning on functional programs is not valid. In order to buy back some of these equational properties we develop a nonstandard operational equivalence relation called cost equivalence, by considering the number of computation steps as an `observable' component of the evaluation process. We define this relation by analogy with Park's definition of bisimulation in CCS. This formulation allows us to show that cost equivalence is a contextual congruence (and thus is substitutive with respect to the basic calculus) and provides useful proof techniques for establishing costequivalen...
Semantic Foundations for Embedding HOL in Nuprl
 ALGEBRAIC METHODOLOGY AND SOFTWARE TECHNOLOGY
, 1996
"... We give a new semantics for Nuprl's constructive type theory that justifies a useful embedding of the logic of the HOL theorem prover inside Nuprl. The embedding gives Nuprl effective access to most of the large body of formalized mathematics that the HOL community has amassed over the last dec ..."
Abstract

Cited by 29 (2 self)
 Add to MetaCart
We give a new semantics for Nuprl's constructive type theory that justifies a useful embedding of the logic of the HOL theorem prover inside Nuprl. The embedding gives Nuprl effective access to most of the large body of formalized mathematics that the HOL community has amassed over the last decade. The new semantics is dramatically simpler than the old, and gives a novel and general way of adding settheoretic equivalence classes to untyped functional programming languages.
Operational Theories of Improvement in Functional Languages (Extended Abstract)
 In Proceedings of the Fourth Glasgow Workshop on Functional Programming
, 1991
"... ) David Sands y Department of Computing, Imperial College 180 Queens Gate, London SW7 2BZ email: ds@uk.ac.ic.doc Abstract In this paper we address the technical foundations essential to the aim of providing a semantic basis for the formal treatment of relative efficiency in functional langu ..."
Abstract

Cited by 21 (9 self)
 Add to MetaCart
) David Sands y Department of Computing, Imperial College 180 Queens Gate, London SW7 2BZ email: ds@uk.ac.ic.doc Abstract In this paper we address the technical foundations essential to the aim of providing a semantic basis for the formal treatment of relative efficiency in functional languages. For a general class of "functional" computation systems, we define a family of improvement preorderings which express, in a variety of ways, when one expression is more efficient than another. The main results of this paper build on Howe's study of equality in lazy computation systems, and are concerned with the question of when a given improvement relation is subject to the usual forms of (in)equational reasoning (so that, for example, we can improve an expression by improving any subexpression). For a general class of computation systems we establish conditions on the operators of the language which guarantee that an improvement relation is a precongruence. In addition, for...
Focusing on binding and computation
 In IEEE Symposium on Logic in Computer Science
, 2008
"... Variable binding is a prevalent feature of the syntax and proof theory of many logical systems. In this paper, we define a programming language that provides intrinsic support for both representing and computing with binding. This language is extracted as the CurryHoward interpretation of a focused ..."
Abstract

Cited by 21 (6 self)
 Add to MetaCart
Variable binding is a prevalent feature of the syntax and proof theory of many logical systems. In this paper, we define a programming language that provides intrinsic support for both representing and computing with binding. This language is extracted as the CurryHoward interpretation of a focused sequent calculus with two kinds of implication, of opposite polarity. The representational arrow extends systems of definitional reflection with a notion of scoped inference rules, which are used to represent binding. On the other hand, the usual computational arrow classifies recursive functions defined by patternmatching. Unlike many previous approaches, both kinds of implication are connectives in a single logic, which serves as a rich logical framework capable of representing inference rules that mix binding and computation. 1
Reasoning About Functional Programs in Nuprl
 In Functional Programming, Concurrency, Simulation and Automated Reasoning
, 1993
"... . There are two ways of reasoning about functional programs in the constructive type theory of the Nuprl proof development system. Nuprl can be used in a conventional programverification mode, in which functional programs are written in a familiar style and then proven to be correct. It can als ..."
Abstract

Cited by 12 (0 self)
 Add to MetaCart
. There are two ways of reasoning about functional programs in the constructive type theory of the Nuprl proof development system. Nuprl can be used in a conventional programverification mode, in which functional programs are written in a familiar style and then proven to be correct. It can also be used in an extraction mode, where programs are not written explicitly, but instead are extracted from mathematical proofs. Nuprl is the only constructive type theory to support both of these approaches. These approaches are illustrated by applying Nuprl to Boyer and Moore's "majority" algorithm. 1 Introduction A type system for a functional programming language can be syntactic or semantic. In a syntactically typed language, such as SML 1 [25], typing is a property of the syntax of expressions. Only certain combinations of language constructs are designated "welltyped", and only welltyped expressions are given a meaning. Each welltyped expression has a type which can be derive...
Sets in Types, Types in Sets
 Proceedings of TACS'97
, 1997
"... . We present two mutual encodings, respectively of the Calculus of Inductive Constructions in ZermeloFraenkel set theory and the opposite way. More precisely, we actually construct two families of encodings, relating the number of universes in the type theory with the number of inaccessible cardina ..."
Abstract

Cited by 12 (1 self)
 Add to MetaCart
. We present two mutual encodings, respectively of the Calculus of Inductive Constructions in ZermeloFraenkel set theory and the opposite way. More precisely, we actually construct two families of encodings, relating the number of universes in the type theory with the number of inaccessible cardinals in the set theory. The main result is that both hierarchies of logical formalisms interleave w.r.t. expressive power and thus are essentially equivalent. Both encodings are quite elementary: type theory is interpreted in set theory through a generalization of Coquand 's simple proofirrelevance interpretation. Set theory is encoded in type theory using a variant of Aczel's encoding; we have formally checked this last part using the Coq proof assistant. 1 Introduction This work is an attempt towards better understanding of the expressiveness of powerful type theories. We here investigate the Calculus of Inductive Constructions (CIC); this formalism is, with some variants, the one implemen...
A Framework for Program Development Based on Schematic Proof
, 1993
"... Often, calculi for manipulating and reasoning about programs can be recast as calculi for synthesizing programs. The difference involves often only a slight shift of perspective: admitting metavariables into proofs. We propose that such calculi should be implemented in logical frameworks that suppor ..."
Abstract

Cited by 11 (5 self)
 Add to MetaCart
Often, calculi for manipulating and reasoning about programs can be recast as calculi for synthesizing programs. The difference involves often only a slight shift of perspective: admitting metavariables into proofs. We propose that such calculi should be implemented in logical frameworks that support this kind of proof construction and that such an implementation can unify program verification and synthesis. Our proposal is illustrated with a worked example developed in Paulson's Isabelle system. We also give examples of existent calculi that are closely related to the methodology we are proposing and others that can be profitably recast using our approach.
Synthesis of programs in computational logic
 PROGRAM DEVELOPMENT IN COMPUTATIONAL LOGIC
, 2004
"... Since the early days of programming and automated reasoning, researchers have developed methods for systematically constructing programs from their specifications. Especially the last decade has seen a flurry of activities including the advent of specialized conferences, such as LOPSTR, covering the ..."
Abstract

Cited by 8 (0 self)
 Add to MetaCart
Since the early days of programming and automated reasoning, researchers have developed methods for systematically constructing programs from their specifications. Especially the last decade has seen a flurry of activities including the advent of specialized conferences, such as LOPSTR, covering the synthesis of programs in computational logic. In this paper we analyze and compare three stateoftheart methods for synthesizing recursive programs in computational logic. The three approaches are constructive/deductive synthesis, schemaguided synthesis, and inductive synthesis. Our comparison is carried out in a systematic way where, for each approach, we describe the key ideas and synthesize a common running example. In doing so, we explore the synergies between the approaches, which we believe are necessary in order to achieve progress over the next decade in this field.