Results 11 - 20
of
21
Typability and Type Checking in the Second-Order lambda-Calculus Are Equivalent and Undecidable
, 1993
"... We consider the problems of typability and type checking in the Girard/Reynolds second-order polymorphic typed-calculus, for which we use the short name "System F" and which we use in the "Curry style" where types are assigned to pure-terms. These problems have been considered and proven to be d ..."
Abstract
-
Cited by 9 (1 self)
- Add to MetaCart
We consider the problems of typability and type checking in the Girard/Reynolds second-order polymorphic typed-calculus, for which we use the short name "System F" and which we use in the "Curry style" where types are assigned to pure-terms. These problems have been considered and proven to be decidable or undecidable for various restrictions and extensions of System F and other related systems, and lower-bound complexity results for System F have been achieved, but they have remained "embarrassing open problems" 3 for System F itself. We first prove that type checking in System F is undecidable by a reduction from semi-unification. We then prove typability in System F is undecidable by a reduction from type checking. Since the reverse reduction is already known, this implies the two problems are equivalent. The second reduction uses a novel method of constructing-terms such that in all type derivations, specific bound variables must always be assigned a specific type. Using this technique, we can require that specif subterms must be typable using a specific, fixed type assignment in order for the entire term to be typable at all. Any desired type assignment maybe simulated. We develop this method, which we call \constants for free", for both the K and I calculi.
Structural Polymorphism
- Informal Proceedings Workshop on Generic Programming, WGP'98, Marstrand
, 1998
"... This paper describes structural polymorphism, a new form of type polymorphism appropriate to functional languages featuring user-defined algebraic data types (e.g., Standard ML, Haskell and Miranda 1 ). The approach extends the familiar notion of parametric polymorphism by allowing the definition of ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
This paper describes structural polymorphism, a new form of type polymorphism appropriate to functional languages featuring user-defined algebraic data types (e.g., Standard ML, Haskell and Miranda 1 ). The approach extends the familiar notion of parametric polymorphism by allowing the definition of functions which are generic with respect to data structures as well as to individual types. For example, structural polymorphism accommodates generalizations of the usual length and map functions which may be applied not only to lists, but also to trees, binary trees or similar algebraic structures. Under traditional polymorphic type systems, these functions may be defined for arbitrary component types, but must be (laboriously) re-defined for every distinct data structure. In this sense, our approach also extends the spirit of parametric polymorphism, in that it provides the programmer relief from the burden of unnecessary repetitive effort. The mechanism we will use to realize this form of polymorphism is inspired by a feature familiar to functional programmers, namely the pattern abstraction. Pattern abstractions generalize the usual lambda abstraction (x.e) in that they are comprised of multiple pattern/expression clauses, rather than just a single bound-variable/expression pair. By analogy with pattern abstractions, we generalize polymorphic type abstractions (Òå.e) to type-pattern abstractions, which are comprised of multiple type-pattern/expression pairs. The types given to type-pattern abstractions are universally quantified, just as for traditional type abstractions, but the universal quantifiers are now justified by a recursive analysis of the forms of all possible type instantiations, rather than by parametric independence with respect to a type variable. (x:+.e) ...
Unchecked Exceptions can be Strictly More Powerful than Call/CC
- Higher-Order and Symbolic Computation
, 1996
"... We demonstrate that in the context of statically-typed purely-functional lambda calculi without recursion, unchecked exceptions (e.g., SML exceptions) can be strictly more powerful than call/cc. More precisely, we prove that a natural extension of the simply-typed lambda calculus with unchecked exce ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
We demonstrate that in the context of statically-typed purely-functional lambda calculi without recursion, unchecked exceptions (e.g., SML exceptions) can be strictly more powerful than call/cc. More precisely, we prove that a natural extension of the simply-typed lambda calculus with unchecked exceptions is strictly more powerful than all known sound extensions of Girard's F-omega (a superset of the simply-typed lambda calculus) with call/cc. This result is established by showing that the first language is Turing complete while the later languages permit only a subset of the recursive functions to be written. We show that our natural extension of the simply-typed lambda calculus with unchecked exceptions is Turing complete by reducing the untyped lambda calculus to it by means of a novel method for simulating recursive types using unchecked-exception-returning functions. The result concerning extensions of F-omega with call/cc stems from previous work of the author and Robert Harper.
Using Reflection to Support Type-Safe Evolution in Persistent Systems
, 1996
"... Reflection has been used to address many different problem areas, and the term reflection has itself been used to describe several distinct processes. This paper identifies three simple operations, generation, raising and dynamic rebinding, which may be composed to yield several varieties of reflect ..."
Abstract
-
Cited by 4 (1 self)
- Add to MetaCart
Reflection has been used to address many different problem areas, and the term reflection has itself been used to describe several distinct processes. This paper identifies three simple operations, generation, raising and dynamic rebinding, which may be composed to yield several varieties of reflection. These can be used to allow a self-contained programming system to evolve, through the incorporation of new behaviour into either the application programs or the interpreter which controls their execution. Reflection is a powerful mechanism and potentially dangerous. Used in the context of persistent programming systems, safety is an important consideration: the integrity of large amounts of data may be at stake. This has led to the use of type checking in conjunction with reflection in such systems to provide some guarantees of safety. The paper describes the nature of reflection in persistent systems and identifies some example applications. 1
Translucent Sums: AFoundation for Higher-Order Module Systems
, 1997
"... is authorized to reproduce and distribute reprints for Government purposes notwithstanding any copyright notation thereon. ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
is authorized to reproduce and distribute reprints for Government purposes notwithstanding any copyright notation thereon.
ATS/LF: a type system for constructing proofs as total functional programs
, 2004
"... The development of Applied Type System (ATS) [36, 31] stems from an earlier attempt to introduce dependent types into practical programming [38, 37]. While there is already a framework Pure Type System [4] (PTS) that offers a simple and general approach to designing and formalizing type systems, ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
The development of Applied Type System (ATS) [36, 31] stems from an earlier attempt to introduce dependent types into practical programming [38, 37]. While there is already a framework Pure Type System [4] (PTS) that offers a simple and general approach to designing and formalizing type systems,
Type Theory for Programming Languages
, 1994
"... Types 83 9.1 Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83 9.2 Typing Rules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83 9.3 Operational Semantics : : : : : : : : : : : : : : : : : : : : : : : : 84 iv 9.4 Impredicative Existentials : : : : : : : : : : : ..."
Abstract
- Add to MetaCart
Types 83 9.1 Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83 9.2 Typing Rules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83 9.3 Operational Semantics : : : : : : : : : : : : : : : : : : : : : : : : 84 iv 9.4 Impredicative Existentials : : : : : : : : : : : : : : : : : : : : : : 84 9.5 Representation Independence : : : : : : : : : : : : : : : : : : : : 85 9.6 Projection Notation : : : : : : : : : : : : : : : : : : : : : : : : : 85 9.7 References : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87 10 Modularity 88 10.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88 10.2 A Critique of Some Modularity Mechanisms : : : : : : : : : : : : 88 10.3 Basic Modules : : : : : : : : : : : : : : : : : : : : : : : : : : : : 93 10.4 Module Hierarchies : : : : : : : : : : : : : : : : : : : : : : : : : : 97 10.5 Parameterized Modules : : : : : : : : : : : : : : : : : : : : : : : 98 10.6 References : : : : : : : : : : : ...
M-LISP: Its Natural Semantics and Equational Logic (Extended Abtract)
, 1991
"... The LISP evaluator is a virtual machine analog of the stored-program computer on which it executes -- it has universal power and dynamically constructed representations of programs can be converted by the eval operator into executable programs. In this paper we study the natural operational semantic ..."
Abstract
- Add to MetaCart
The LISP evaluator is a virtual machine analog of the stored-program computer on which it executes -- it has universal power and dynamically constructed representations of programs can be converted by the eval operator into executable programs. In this paper we study the natural operational semantics and equational logic of a dialect of pure LISP and an extension which includes the eval operator and fexprs (i.e., non-strict functions whose arguments are passed by-representation). We begin by defining a natural operational semantics for the pure subset of M-LISP, a simple, representation-independent hybrid of McCarthy's original M-expression LISP and Scheme. We then establish the connection between the semantics and its equational logic in the usual way and prove that the logic is sound and consistent. With this as our setting we define the axioms and inference ...
Impredicative Representations of Categorical Datatypes
, 1994
"... this document that certain implications are not based on a well stated formal theory but require a certain amount of hand-waving. ..."
Abstract
- Add to MetaCart
this document that certain implications are not based on a well stated formal theory but require a certain amount of hand-waving.
Tag Elimination and Jones-Optimality (includes proofs)
"... . Tag elimination is a program transformation for removing ..."

