Results 1 
6 of
6
Adding algebraic rewriting to the untyped lambda calculus
 Information and Computation
, 1992
"... We investigate the system obtained by adding an algebraic rewriting system R to an untyped lambda calculus in which terms are formed using the function symbols from R as constants. On certain classes of terms, called here "stable", we prove that the resulting calculus is confluent if R is ..."
Abstract

Cited by 22 (0 self)
 Add to MetaCart
(Show Context)
We investigate the system obtained by adding an algebraic rewriting system R to an untyped lambda calculus in which terms are formed using the function symbols from R as constants. On certain classes of terms, called here "stable", we prove that the resulting calculus is confluent if R is confluent, and terminating if R is terminating. The termination result has the corresponding theorems for several typed calculi as corollaries. The proof of the confluence result suggests a general method for proving confluence of typed β reduction plus rewriting; we sketch the application to the polymorphic lambda calculus.
Delimiting the Scope of Effects
 In Proceedings of the Conference on Functional Programming Languages and Computer Architecture
, 1993
"... 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 ..."
Abstract

Cited by 11 (1 self)
 Add to MetaCart
(Show Context)
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 "callwithcurrentcontinuation" opera...
Semantic Orthogonality of Type Disciplines
, 1997
"... We consider a version of PCF, and prove, using both syntactic and semantic means, that the operational equivalences of the base language are preserved when the language is extended with sum and product types, with polymorphic types, and with recursive types. These theorems show that the additions to ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
We consider a version of PCF, and prove, using both syntactic and semantic means, that the operational equivalences of the base language are preserved when the language is extended with sum and product types, with polymorphic types, and with recursive types. These theorems show that the additions to the type systems are orthogonal to the original language. 1 Introduction Type systems for programming languages are rarely monolithic: although a type system may be composed of many parts, each part can usually be understood on its own. Consider, for instance, the programming language Standard ML (SML) [22]. SML's type system includes base types of integers, reals, strings, and characters, and type constructors for lists, functions, tuples, references, exceptions, userdefined recursive datatypes, and polymorphism. On a syntactic level, the type rules of the parts do not interfere with one another: the typechecking rule for application, for example, uses only the fact that the operator is...
InduceStatements and InduceExpressions: Constructs for Inductive Programming
"... Abstract. A forloop is somewhat similar to an inductive argument. Just as the truth of a proposition P (n + 1) depends on the truth of P (n), the correctness of iteration n+1 of a forloop depends on iteration n having been completed correctly. This paper presents the induceconstruct, a new progra ..."
Abstract
 Add to MetaCart
(Show Context)
Abstract. A forloop is somewhat similar to an inductive argument. Just as the truth of a proposition P (n + 1) depends on the truth of P (n), the correctness of iteration n+1 of a forloop depends on iteration n having been completed correctly. This paper presents the induceconstruct, a new programming construct based on the form of inductive arguments. It is more expressive than the forloop yet less expressive than the whileloop. Like the forloop, it is always terminating. Unlike the forloop, it allows the convenient and concise expression of many algorithms. The forloop traverses a set of consecutive natural numbers, the induceconstruct generalizes to other data types. The induceconstruct is presentedintwoforms, one for imperative languages and one for functional languages. The expressive power of languages in which this is the only recursion construct is greater than primitive recursion, namely it is the multiply recursive functions in the rst order case and the set of functions expressible in Godel's system T in the general case. 0 Data Types We consider languages in which some of the data types are de ned by recursion as in Hoare's `Recursive DataTypes ' [8] or the language ML. The example in this paper use the following (polymorphic) types. tree 2 ()=empty j node ( � tree 2 () � tree 2 ()) list ()=nil j:list () tree n ()=empty j node ( � list(tree n ())) natural = 0 j natural 0 (with the usual abbreviations 1 = 0 0 � 2=1 0 =0 00 �:::). Files may be considered as lists of characters, or as lists of lines, each line being a list of characters. The members of a data type are all the values that can be nitely generated from its constructors. It is not possible to generate the same member in more than one way. A programming methodology for functional programming with such recursive data types is presented by Burstall [1] which is largely the inspiration for the present paper. The main progress that this paper makes over that one, is to present an inductive programming construct to match the inductive datatypes and to extend the ideas into the realm of imperative programming. 2 InduceStatements and InduceExpressions: Constructs for Inductive Programming
Conditions for the Completeness of Functional and Algebraic Equational Reasoning
, 1998
"... We consider the following question: in the simplytyped lcalculus with algebraic operations, is the set of equations valid in a particular model exactly those provable from (b), (h), and the set of algebraic equations, E, that are valid in the model? We find conditions for determining whether bhEe ..."
Abstract
 Add to MetaCart
We consider the following question: in the simplytyped lcalculus with algebraic operations, is the set of equations valid in a particular model exactly those provable from (b), (h), and the set of algebraic equations, E, that are valid in the model? We find conditions for determining whether bhEequational reasoning is complete. We demonstrate the utility of the results by presenting a number of simple corollaries for particular models. 1 Introduction The two axioms of the lcalculus, (b) ((lx: M) N) =M[x := N] (h) (lx: M x) =M; if x not free in M lie at the heart of reasoning about functional programs: (b) explains function application syntactically, and (h) states that the meaning of functions can be based solely on their meaning under application. The (b) and (h) axioms turn out to be fundamental: not only are they sound, they also are complete for proving equations that hold in all models of the simplytyped lcalculus [Friedman, 1975]. In other words, an equation between sim...
MCS8219196, U.S. Army grants DAA2984K0061, DAA298490027. Extensional Models for Polymorphism
, 1988
"... This is a slightly revised version of MSCIS8775lLINC LAB 81 ..."