Results 1 
7 of
7
Practical RefinementType Checking
, 1997
"... Refinement types allow many more properties of programs to be expressed and statically checked than conventional type systems. We present a practical algorithm for refinementtype checking in a calculus enriched with refinementtype annotations. We prove that our basic algorithm is sound and comple ..."
Abstract

Cited by 37 (1 self)
 Add to MetaCart
Refinement types allow many more properties of programs to be expressed and statically checked than conventional type systems. We present a practical algorithm for refinementtype checking in a calculus enriched with refinementtype annotations. We prove that our basic algorithm is sound and complete, and show that every term which has a refinement type can be annotated as required by our algorithm. Our positive experience with an implementation of an extension of this algorithm to the full core language of Standard ML demonstrates that refinement types can be a practical program development tool in a realistic programming language. The required refinement type definitions and annotations are not much of a burden and serve as formal, machinechecked explanations of code invariants which otherwise would remain implicit. 1 Introduction The advantages of staticallytyped programming languages are well known, and have been described many times (e.g. see [Car97]). However, conventional ty...
Practical refinementtype checking. Thesis Proposal
, 1997
"... Software development is a complex and error prone task. Programming languages with strong static type systems assist programmers by capturing and checking the fundamental structure of programs in a very intuitive way. Given this success, it is natural to ask: can we capture and check more of the str ..."
Abstract

Cited by 6 (1 self)
 Add to MetaCart
(Show Context)
Software development is a complex and error prone task. Programming languages with strong static type systems assist programmers by capturing and checking the fundamental structure of programs in a very intuitive way. Given this success, it is natural to ask: can we capture and check more of the structure of programs? In this work I consider a new approach called refinementtype checking that allows many common program properties to be captured and checked. This approach builds on the strength of the type system of a language by adding the ability to specify refinements of each type. Such refinement types have been considered previously, and following previous work I focus on refinements that include subtyping and a form of intersection types. Central to my approach is the use of a bidirectional checking algorithm. This does not attempt to infer refinements for some expressions, such as functions, but only checks them against refinements. This avoids some difficulties encountered in previous work, and requires that the programmer annotate their program with some of the intended refinements, but the required annotations appear to be very reasonable. Further, they document properties in a way that is natural, precise, easy to read, and reliable. I demonstrate the practicality of my approach by showing that it can be used to design a refinementtype checker for a widelyused language with a strong type system: Standard ML. This requires two main technical developments. Firstly, I present a new variant of intersection types that achieve soundness in the presence of callbyvalue effects by incorporating a value restriction. Secondly, I present a practical approach to incorporating recursive refinements of ML datatypes, including a pragmatic method for checking the sequential pattern matching construct of ML. I also report the results of experiments with my implementation of refinementtype checking for SML. These indicate that refinementtype checking is a practical method for capturing and checking properties of real code.
Polymorphic Functions with SetTheoretic Types
"... Abstract. We present a type system and local type inference for a calculus with higherorder polymorphic functions, recursive types with arrow and product type constructors and settheoretic type connectives (union, intersection, and negation). This work provides the theoretical foundations and tech ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
(Show Context)
Abstract. We present a type system and local type inference for a calculus with higherorder polymorphic functions, recursive types with arrow and product type constructors and settheoretic type connectives (union, intersection, and negation). This work provides the theoretical foundations and technical machinery needed to start the design and implementation of polymorphic functional languages for semistructured data. 1.
A Typed Semantics of HigherOrder Store and
"... Abstract. We consider a callbyvalue language, with higherorder functions, records, references to values of arbitrary type, and subtyping. We adapt an intrinsic denotational model for a similar language based on a possibleworld semantics, recently given by Levy [14], and relate it to an untyped m ..."
Abstract
 Add to MetaCart
(Show Context)
Abstract. We consider a callbyvalue language, with higherorder functions, records, references to values of arbitrary type, and subtyping. We adapt an intrinsic denotational model for a similar language based on a possibleworld semantics, recently given by Levy [14], and relate it to an untyped model by a logical relation. Following the methodology of Reynolds [22], this relation is used to establish coherence of the typed semantics, with a coercion interpretation of subtyping. We obtain a typed denotational semantics of (imperative) objectbased languages. 1
Computational monads and subtyping
"... Subtyping is an important concept and used in many programming languages. One approach to give semantics to languages with subtypes is by translation to target languages without subtyping: Subtypings A ≤ B are interpreted via conversion functions A → B. This paper shows how to extend the method to l ..."
Abstract
 Add to MetaCart
Subtyping is an important concept and used in many programming languages. One approach to give semantics to languages with subtypes is by translation to target languages without subtyping: Subtypings A ≤ B are interpreted via conversion functions A → B. This paper shows how to extend the method to languages with computational effects, using Moggi’s computational metalanguage. 1
Contents Depth Exam: Observations and Comments
, 2007
"... 1 “What do Types Mean? ” [Rey] 2 ..."
(Show Context)