Results 1  10
of
22
Notions of Computation and Monads
, 1991
"... The i.calculus is considered a useful mathematical tool in the study of programming languages, since programs can be identified with Iterms. However, if one goes further and uses bnconversion to prove equivalence of programs, then a gross simplification is introduced (programs are identified with ..."
Abstract

Cited by 730 (15 self)
 Add to MetaCart
The i.calculus is considered a useful mathematical tool in the study of programming languages, since programs can be identified with Iterms. However, if one goes further and uses bnconversion to prove equivalence of programs, then a gross simplification is introduced (programs are identified with total functions from calues to values) that may jeopardise the applicability of theoretical results, In this paper we introduce calculi. based on a categorical semantics for computations, that provide a correct basis for proving equivalence of programs for a wide range of notions of computation.
A Syntactic Approach to Type Soundness
 Information and Computation
, 1992
"... We present a new approach to proving type soundness for Hindley/Milnerstyle polymorphic type systems. The keys to our approach are (1) an adaptation of subject reduction theorems from combinatory logic to programming languages, and (2) the use of rewriting techniques for the specification of the la ..."
Abstract

Cited by 538 (21 self)
 Add to MetaCart
We present a new approach to proving type soundness for Hindley/Milnerstyle polymorphic type systems. The keys to our approach are (1) an adaptation of subject reduction theorems from combinatory logic to programming languages, and (2) the use of rewriting techniques for the specification of the language semantics. The approach easily extends from polymorphic functional languages to imperative languages that provide references, exceptions, continuations, and similar features. We illustrate the technique with a type soundness theorem for the core of Standard ML, which includes the first type soundness proof for polymorphic exceptions and continuations. 1 Type Soundness Static type systems for programming languages attempt to prevent the occurrence of type errors during execution. A definition of type error depends on a specific language and type system, but always includes the use of a function on arguments for which it is not defined, and the attempted application of a nonfunction. ...
Computational LambdaCalculus and Monads
, 1988
"... The calculus is considered an useful mathematical tool in the study of programming languages, since programs can be identified with terms. However, if one goes further and uses fijconversion to prove equivalence of programs, then a gross simplification 1 is introduced, that may jeopardise the ..."
Abstract

Cited by 439 (6 self)
 Add to MetaCart
The calculus is considered an useful mathematical tool in the study of programming languages, since programs can be identified with terms. However, if one goes further and uses fijconversion to prove equivalence of programs, then a gross simplification 1 is introduced, that may jeopardise the applicability of theoretical results to real situations. In this paper we introduce a new calculus based on a categorical semantics for computations. This calculus provides a correct basis for proving equivalence of programs, independent from any specific computational model. 1 Introduction This paper is about logics for reasoning about programs, in particular for proving equivalence of programs. Following a consolidated tradition in theoretical computer science we identify programs with the closed terms, possibly containing extra constants, corresponding to some features of the programming language under consideration. There are three approaches to proving equivalence of programs: ffl T...
The Revised Report on the Syntactic Theories of Sequential Control and State
 Theoretical Computer Science
, 1992
"... The syntactic theories of control and state are conservative extensions of the v calculus for equational reasoning about imperative programming facilities in higherorder languages. Unlike the simple v calculus, the extended theories are mixtures of equivalence relations and compatible congruen ..."
Abstract

Cited by 255 (36 self)
 Add to MetaCart
The syntactic theories of control and state are conservative extensions of the v calculus for equational reasoning about imperative programming facilities in higherorder languages. Unlike the simple v calculus, the extended theories are mixtures of equivalence relations and compatible congruence relations on the term language, which significantly complicates the reasoning process. In this paper we develop fully compatible equational theories of the same imperative higherorder programming languages. The new theories subsume the original calculi of control and state and satisfy the usual ChurchRosser and Standardization Theorems. With the new calculi, equational reasoning about imperative programs becomes as simple as reasoning about functional programs. 1 The syntactic theories of control and state Most calculusbased programming languages provide imperative programming facilities such as assignment statements, exceptions, and continuations. Typical examples are ML [16], Schem...
Equivalence in Functional Languages with Effects
, 1991
"... Traditionally the view has been that direct expression of control and store mechanisms and clear mathematical semantics are incompatible requirements. This paper shows that adding objects with memory to the callbyvalue lambda calculus results in a language with a rich equational theory, satisfying ..."
Abstract

Cited by 112 (13 self)
 Add to MetaCart
Traditionally the view has been that direct expression of control and store mechanisms and clear mathematical semantics are incompatible requirements. This paper shows that adding objects with memory to the callbyvalue lambda calculus results in a language with a rich equational theory, satisfying many of the usual laws. Combined with other recent work this provides evidence that expressive, mathematically clean programming languages are indeed possible. 1. Overview Real programs have effectscreating new structures, examining and modifying existing structures, altering flow of control, etc. Such facilities are important not only for optimization, but also for communication, clarity, and simplicity in programming. Thus it is important to be able to reason both informally and formally about programs with effects, and not to sweep effects either to the side or under the store parameter rug. Recent work of Talcott, Mason, Felleisen, and Moggi establishes a mathematical foundation for...
A Core Calculus of Classes and Mixins
, 1999
"... We develop an imperative calculus that provides a formal model for both single and mixin inheritance. By introducing classes and mixins as the basic objectoriented constructs in a calculus with records and references, we obtain a system with an intuitive operational semantics. New ..."
Abstract

Cited by 53 (15 self)
 Add to MetaCart
We develop an imperative calculus that provides a formal model for both single and mixin inheritance. By introducing classes and mixins as the basic objectoriented constructs in a calculus with records and references, we obtain a system with an intuitive operational semantics. New
Inferring the Equivalence of Functional Programs that Mutate Data
 Theoretical Computer Science
, 1992
"... this paper we study the constrained equivalence of programs with effects. In particular, we present a formal system for deriving such equivalences. Constrained equivalence is defined via a model theoretic characterization of operational, or observational, equivalence called strong isomorphism. Opera ..."
Abstract

Cited by 26 (7 self)
 Add to MetaCart
this paper we study the constrained equivalence of programs with effects. In particular, we present a formal system for deriving such equivalences. Constrained equivalence is defined via a model theoretic characterization of operational, or observational, equivalence called strong isomorphism. Operational equivalence, as introduced by Morris [23] and Plotkin [27], treats programs as black boxes. Two expressions are operationally equivalent if they are indistinguishable in all program contexts. This equivalence is the basis for soundness results for program calculi and program transformation theories. Strong isomorphism, as introduced by Mason [14], also treats programs as black boxes. Two expressions are strongly isomorphic if in all memory states they return the same value, and have the same effect on memory (modulo the production of garbage). Strong isomorphism implies operational equivalence. The converse is true for firstorder languages; it is false for full higherorder languages. However, even in the higherorder case, it remains an useful tool for establishing equivalence. Since strong isomorphism is defined by quantifying over memory states, rather than program contexts, it is a simple matter to restrict this equivalence to those memory states which satisfy a set of constraints. It is for this reason that strong isomorphism is a useful relation, even in the higherorder case. The formal system we present defines a singleconclusion consequence relation \Sigma ` \Phi where \Sigma is a finite set of constraints and \Phi is an assertion. The semantics of the formal system is given by a semantic consequence relation, \Sigma j= \Phi, defined in terms of a class of memory models for assertions and constraints. The assertions we consider are of the following two forms...
Axiomatizing Operational Equivalence in the presence of Side Effects
 In Fourth Annual Symposium on Logic in Computer Science. IEEE
, 1989
"... this paper we present a formal system for deriving assertions about programs with side effects. The assertions we consider are of the following two forms: (i) e diverges (i.e. fails to reduce to a value), written " e; (ii) e 0 and e 1 are strongly isomorphic (i.e. reduce to the same value and have ..."
Abstract

Cited by 20 (9 self)
 Add to MetaCart
this paper we present a formal system for deriving assertions about programs with side effects. The assertions we consider are of the following two forms: (i) e diverges (i.e. fails to reduce to a value), written " e; (ii) e 0 and e 1 are strongly isomorphic (i.e. reduce to the same value and have the same effect on memory up to production of garbage), written
A Core Calculus of MixinBased Incomplete Objects (Extended Abstract)
 In Procs. of FOOL Workshop
, 2004
"... We design a calculus that combines classbased features with objectbased ones, with the aim of fitting into a unifying setting the "best of both worlds". In a mixinbased approach, mixins are seen as incomplete classes from which incomplete objects can be instantiated. In turn, incomplete object ..."
Abstract

Cited by 14 (5 self)
 Add to MetaCart
We design a calculus that combines classbased features with objectbased ones, with the aim of fitting into a unifying setting the "best of both worlds". In a mixinbased approach, mixins are seen as incomplete classes from which incomplete objects can be instantiated. In turn, incomplete objects can be completed in an objectbased fashion. Our hybrid calculus is shown to be useful in some real world scenarios that we present as examples.
Reasoning about Functions with Effects
 See Gordon and Pitts
, 1997
"... ing and using (Lunif) we have that any two lambdas that are everywhere undefined are equivalent. The classic example of an everywhere undefined lambda is Bot 4 = x:app(x:app(x; x); x:app(x; x)) In f , another example of an everywhere undefined lambda is the "doforever" loop. Do 4 = f:Yv(Dox ..."
Abstract

Cited by 13 (1 self)
 Add to MetaCart
ing and using (Lunif) we have that any two lambdas that are everywhere undefined are equivalent. The classic example of an everywhere undefined lambda is Bot 4 = x:app(x:app(x; x); x:app(x; x)) In f , another example of an everywhere undefined lambda is the "doforever" loop. Do 4 = f:Yv(Dox:Do(f(x)) By the recursive definition, for any lambda ' and value v Do(')(v) \Gamma!Ø Do(')('(v)) Reasoning about Functions with Effects 21 In f , either '(v) \Gamma!Ø v 0 for some v 0 or '(v) is undefined. In the latter case the computation is undefined since the redex is undefined. In the former case, the computation reduces to Do(')(v 0 ) and on we go. The argument for undefinedness of Bot relies only on the (app) rule and will be valid in any uniform semantics. In contrast the argument for undefinedness of Do(') relies on the (fred.isdef) property of f . Functional Streams We now illustrate the use of (Lunifsim) computation to reason about streams represented as functions ...