A Machine-Oriented Logic Based on the Resolution Principle
Journal of the ACM (JACM)
The Expressiveness of Simple and Second-Order Type Structures
Journal of the ACM (JACM)
Principal type-schemes for functional programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
An Extended Polymorphic Type System for Applicative Languages
MFCS '80 Proceedings of the 9th Symposium on Mathematical Foundations of Computer Science
Une Extension de la Theorie des Types en lambda-Calcul
Proceedings of the Fifth Colloquium on Automata, Languages and Programming
Towards a theory of type structure
Programming Symposium, Proceedings Colloque sur la Programmation
A semantic model of types for applicative languages
LFP '82 Proceedings of the 1982 ACM symposium on LISP and functional programming
The complexity of parameter passing in polymorphic procedures
STOC '81 Proceedings of the thirteenth annual ACM symposium on Theory of computing
A programming language theorem which is independent of Peano Arithmetic
STOC '79 Proceedings of the eleventh annual ACM symposium on Theory of computing
Topics in computational complexity
Topics in computational complexity
An investigation of a programming language with a polymorphic type structure.
An investigation of a programming language with a polymorphic type structure.
Abstract types have existential type
ACM Transactions on Programming Languages and Systems (TOPLAS)
Partial polymorphic type inference and higher-order unification
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Type inference and semi-unification
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type inference in the presence of type abstraction
PLDI '89 Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation
Type reconstruction with first-class polymorphic values
PLDI '89 Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation
Polymorphic unification and ML typing
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Strictness analysis: a new perspective based on type inference
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type inference with polymorphic recursion
ACM Transactions on Programming Languages and Systems (TOPLAS)
On the type structure of standard ML
ACM Transactions on Programming Languages and Systems (TOPLAS)
A direct algorithm for type inference in the rank-2 fragment of the second-order &lgr;-calculus
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
Structural decidable extensions of bounded quantification
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
What are principal typings and what are they good for?
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Inference of polymorphic and conditional strictness properties
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Principality and decidable type inference for finite-rank intersection types
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Relating typability and expressiveness in finite-rank intersection type systems (extended abstract)
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Abstract types have existential types
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A type-inference approach to reduction properties and semantics of polymorphic expressions (summary)
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Conjunctional type assignment in programming languages
CSC '88 Proceedings of the 1988 ACM sixteenth annual conference on Computer science
Structural semantics for polymorphic data types (preliminary report)
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Concatenate, reverse and map vanish for free
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
The Essence of Principal Typings
ICALP '02 Proceedings of the 29th International Colloquium on Automata, Languages and Programming
Typing Local Definitions and Conditional Expressions with Rank 2 Intersection
FOSSACS '00 Proceedings of the Third International Conference on Foundations of Software Science and Computation Structures: Held as Part of the Joint European Conferences on Theory and Practice of Software,ETAPS 2000
CSL '01 Proceedings of the 15th International Workshop on Computer Science Logic
Rank 2 intersection types for local definitions and conditional expressions
ACM Transactions on Programming Languages and Systems (TOPLAS)
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Rank 2 intersection types for modules
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
A simple proof of the undecidability of strong normalisation
Mathematical Structures in Computer Science
Modular control-flow analysis with rank 2 intersection types
Mathematical Structures in Computer Science
Mathematical Structures in Computer Science
Journal of Functional Programming
Journal of Functional Programming
Principality and type inference for intersection types using expansion variables
Theoretical Computer Science
Sequence-based abstract interpretation of Prolog
Theory and Practice of Logic Programming
PPDP '04 Proceedings of the 6th ACM SIGPLAN international conference on Principles and practice of declarative programming
The Impact of seq on Free Theorems-Based Program Transformations
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
Intersection-types à la Church
Information and Computation
Selective strictness and parametricity in structural operational semantics, inequationally
Theoretical Computer Science
Rank 2 Intersection for Recursive Definitions
Fundamenta Informaticae - Typed Lambda Calculi and Applications 2005, Selected Papers
Proceedings of the 6th international symposium on Principles and practice of programming in Java
A pattern for almost compositional functions
Journal of Functional Programming
Inhabitation of Low-Rank Intersection Types
TLCA '09 Proceedings of the 9th International Conference on Typed Lambda Calculi and Applications
The Polymorphic Rewriting-calculus
Electronic Notes in Theoretical Computer Science (ENTCS)
TLCA'01 Proceedings of the 5th international conference on Typed lambda calculi and applications
The inhabitation problem for rank two intersection types
TLCA'07 Proceedings of the 8th international conference on Typed lambda calculi and applications
Intersection, universally quantified, and reference types
CSL'09/EACSL'09 Proceedings of the 23rd CSL international conference and 18th EACSL Annual conference on Computer science logic
Finite combinatory logic with intersection types
TLCA'11 Proceedings of the 10th international conference on Typed lambda calculi and applications
Rank-2 intersection and polymorphic recursion
TLCA'05 Proceedings of the 7th international conference on Typed Lambda Calculi and Applications
Expansion for universal quantifiers
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
The complexity of inhabitation with explicit intersection
Logic and Program Semantics
Rank 2 Intersection for Recursive Definitions
Fundamenta Informaticae - Typed Lambda Calculi and Applications 2005, Selected Papers
The Impact of seq on Free Theorems-Based Program Transformations
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
RANK 2 INTERSECTION TYPE ASSIGNMENT IN TERM REWRITING SYSTEMS
Fundamenta Informaticae
Hi-index | 0.01 |
The benefits of strong typing to disciplined programming, tocompile-time error detection and to program verification are wellknown. Strong typing is especially natural for functional(applicative) languages, in which function application is thecentral construct, and type matching is therefore a principalprogram correctness check. In practice, however, assigning a typeto each and every expression in a functional program can beprohibitively cumbersome. As expressions are compounded, the taskof assigning a type to each expression and subexpression becomespractically impossible, even more so because the type-expressionsthemselves grow longer. It becomes imperative therefore to designfriendly programming environments that permit the user type-freeprogramming, but that generate fully typed programs in which thetypes of all expressions are inferred by the system from theprogram. For interactive functional programming environments of thekind implemented for the Edinburgh functional programming languageML, a type-inference system is an invaluable tool for on-lineparse-time error detection and debugging.The issue of type inference leads naturally totype-schemes. If all one has of a functional program is adefinition statement such as f(x)=3, then all one cansay of the type of f is that it must be of the form’Ѩint, i.e. --- an instance of the type schemet ¨ int, where t is a type variable. As more ofthe program appears, say x(true)=z, t may berestricted, to bool¨s. We are thereforeinterested in type-schemes, using type parameters(free type variables). All one needs then to obtain a rudimentaryform of generic procedures is a device for type instantiation. Thisfunction is fulfilled in ML by the construct let. Other methods aredescribed in Ü4 below.During the process of inferring a type for a given program, onewould like at each step to find a most general (so-calledprincipal) type scheme for each subexpression, so that typesto be assigned to variables and subexpressions in the sequel may beassumed to be instances of those assigned earlier. The notion ofprincipal type was introduced by Curry and Feys [CF] forCombinatory Logic, and Hindley [Hin] showed that the principal typeexists for any Combinatory Logic expression and that it can befound using J.A. Robinson's Unification algorithm [Rob].The seminalpaper on type-inference for functional programs is Milner's [Mil],where an algorithm W is defined for inferring a type for any MLprogram (without recursively defined types). More recently, Damasand Milner [DM] defined a simple formal calculus of type inference,with respect to which W is proved complete.In this paper we study several aspects of type inference forpolymorphic type disciplines. First, we deal with type inferencefor parametric type systems, that is --- type systems that includesimple types defied over constant types and type variables. Werecast Milner's algorithm W in a general "algebraic" form, whichapplies to a variety of generic type disciplines (Ü2). InÜ3 we present an alternative algorithm V for type inference,fundamentally different from W, which easily accommodates typecoercion and overloading, allows efficient local updates to theuser program, and is more efficient than W for implementations thatallow concurrency.In Ü4 we briefly describe four polymorphic disciplines:type abstraction, type quantification, type conjunction(intersection) and the ML construct let.In Ü5 type inference for the abstraction and quantificationdisciplines is discussed. We point out that the two disciplines arecombinatorially isomorphic, and we outline a type inferencealgorithm for them.Ü6 is devoted to type inference for the conjunctivediscipline. We mention some limitations to type inference here, inparticular --- the fact that the set of typable expressions is noteffectively decidable. Moreover, there is no feasible algorithmthat would type expressions even when these are given with aquantificational typing. This kind of non-effectiveness motivatesour considering a restriction to types where type conjunction ispermitted only at low levels of functionality. Here the level offunctionality of a function (or procedure) is recursively definedas one plus the greatest level of functionality of its arguments.This gives rise to a hierarchy on polymorphic types, a notion thatis equally natural for the type abstraction and type quantificationdisciplines. We show that our algorithm V (of Ü3) can benaturally extended to the restriction of the conjunctive disciplineto types of rank 2 in the hierarchy, and we outline an argumentshowing that already for a low rank, seemingly 3, type inference isnot effectively decidable.In Ü7 we discuss the ML construct let in light of ourprevious results. We point out that the polymorphic discipline ofML is isomorphic to the restriction to rank 2 of each one of theother disciplines. This gives weight to the particular choice ofpolymorphism in ML, and to the completeness of Milner's algorithm Wfor that choice. At the same time, the equivalence suggests moreflexible representations of this discipline (namely --- either theconjunctive or the quantificational disciplines restricted to rank2) in which the anomaly in ML, of legal expressions withwell-formed illegal subexpressions, is avoided.