Results 1 
5 of
5
Refined typechecking with Stardust
 In Workshop on Programming Languages Meets Program Verification (PLPV
, 2007
"... We present Stardust, an implementation of a type system for a subset of ML with type refinements, intersection types, and union types, enabling programmers to legibly specify certain classes of program invariants that are verified at compile time. This is the first implementation of unrestricted int ..."
Abstract

Cited by 14 (6 self)
 Add to MetaCart
We present Stardust, an implementation of a type system for a subset of ML with type refinements, intersection types, and union types, enabling programmers to legibly specify certain classes of program invariants that are verified at compile time. This is the first implementation of unrestricted intersection and union types in a mainstream functional programming setting, as well as the first implementation of a system with both datasort and index refinements. The system—with the assistance of external constraint solvers—supports integer, Boolean and dimensional index refinements; we apply both value refinements (to check redblack tree invariants) and invaluable refinements (to check dimensional consistency). While typechecking with intersection and union types is intrinsically complex, our experience so far suggests that it can be practical in many instances.
Bidirectional polymorphism through greed and unions
, 2008
"... Bidirectional typechecking has become a popular technique for advanced type systems. In this paper, I show how to extend past work on bidirectional typechecking to handle parametric polymorphism bidirectionally. The first key contribution is a simple bidirectional type system that supports firstcla ..."
Abstract
 Add to MetaCart
Bidirectional typechecking has become a popular technique for advanced type systems. In this paper, I show how to extend past work on bidirectional typechecking to handle parametric polymorphism bidirectionally. The first key contribution is a simple bidirectional type system that supports firstclass (higherrank and impredicative) polymorphism; its algorithm is complete for predicative polymorphism (including MLstyle polymorphism and higherrank polymorphism). The second key contribution extends that system with subtyping; the combination of bidirectional typechecking with intersection and union types fortuitously yields a simple but fairly powerful algorithm. Both of these systems, inspired by Cardelli’s early work on System F<:, rely on a “greedy ” method for finding polymorphic instances. Finally, I present a more powerful algorithm that forms intersections and unions automatically. 1
Unification with Expansion Variables: Preliminary Results and Problems ⋆
"... Abstract. Expansion generalises substitution. An expansion is a special term whose leaves can be substitutions. Substitutions map term variables to ordinary terms and expansion variables to expansions. Expansions (resp., ordinary terms) may contain expansion variables, each applied to an argument ex ..."
Abstract
 Add to MetaCart
Abstract. Expansion generalises substitution. An expansion is a special term whose leaves can be substitutions. Substitutions map term variables to ordinary terms and expansion variables to expansions. Expansions (resp., ordinary terms) may contain expansion variables, each applied to an argument expansion (resp., ordinary term). Instances of the unification problem in this setting are constraint sets, where constraints are pairs of ordinary terms, and unifiers are expansions. This problem offers many interesting challenges. The theory of unification with expansion variables was first considered in relation to the study of systems of intersection types for the λcalculus. Solving constraint sets, under appropriate conditions, corresponds to type inference for lambdaterms in these systems. We explain expansions and present a simple rewrite system for unification with expansion variables where ordinary terms uses the intersection type constructors. The simple rewrite system lacks some important properties. We indicate how it can be adapted to: simulate βreduction, and intersection typing, of λterms; be a complete semidecision procedure for unification; be confluent; produce mostgeneral unifiers. Every constraint set has a trivial unifier. However, finding a single mostgeneral unifier is often impossible. We study the concept of mostgeneral unifiers and introduce principal unifiers, which are easier to construct. Mostgeneral unifiers exist for the unification problem formed by a certain restriction of substitutions, and we give an incomplete variant of simple unification to that finds them. A second variant system addresses completeness and principality, producing covering substitutionunifier sets for constraints (every substitutionunifier is an instance of a set member, and all expansionunifiers can be obtained from the set). For covering unifier sets we modify the problem to a form of Eunification where the constant ω is the unit of the intersection constructor. 1
Abstract Refined Typechecking with Stardust
"... We present Stardust, an implementation of a type system for a subset of ML with type refinements, intersection types, and union types, enabling programmers to legibly specify certain classes of program invariants that are verified at compile time. This is the first implementation of unrestricted int ..."
Abstract
 Add to MetaCart
We present Stardust, an implementation of a type system for a subset of ML with type refinements, intersection types, and union types, enabling programmers to legibly specify certain classes of program invariants that are verified at compile time. This is the first implementation of unrestricted intersection and union types in a mainstream functional programming setting, as well as the first implementation of a system with both datasort and index refinements. The system—with the assistance of external constraint solvers—supports integer, Boolean and dimensional index refinements; we apply both value refinements (to check redblack tree invariants) and invaluable refinements (to check dimensional consistency). While typechecking with intersection and union types is intrinsically complex, our experience so far suggests that it can be practical in many instances.
unknown title
"... Abstract. We present a procedure to infer a typing for an arbitrary term M in an intersectiontype system that translates into exactly the callbyname (resp., callbyvalue) evaluation of M. Our framework is the recently developed System E which augments intersection types with expansion variables ..."
Abstract
 Add to MetaCart
(Show Context)
Abstract. We present a procedure to infer a typing for an arbitrary term M in an intersectiontype system that translates into exactly the callbyname (resp., callbyvalue) evaluation of M. Our framework is the recently developed System E which augments intersection types with expansion variables. The inferred typing for M is obtained by setting up a unication problem involving both type variables and expansion variables, which we solve with a con
uent rewrite system. The inference procedure is compositional in the sense that typings for dierent program components can be inferred in any order, and without knowledge of the de nition of other program components. 3 Using expansion variables lets us achieve a compositional inference procedure easily. Termination of the procedure is generally undecidable. The procedure terminates and returns a typing i the input M is normalizing according to callbyname (resp., callbyvalue). The inferred typing is exact in the sense that the exact callbyname (resp., callbyvalue) behaviour of M can be obtained by a (polynomial) transformation of the typing. The inferred typing is also principal in the sense that any other typing that translates the callbyname (resp., callbyvalue) evaluation of M can be obtained from the inferred typing for M using a substitutionbased transformation.