PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
Intersection and union types: syntax and semantics
Information and Computation
Simple imperative polymorphism
Lisp and Symbolic Computation - Special issue on state in programming languages (part I)
Regular expression types for XML
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Intersection types and computational effects
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Locus Solum: From the rules of logic to the logic of rules
Mathematical Structures in Computer Science
Control categories and duality: on the categorical semantics of the lambda-mu calculus
Mathematical Structures in Computer Science
Recursive Polymorphic Types and Parametricity in an Operational Framework
LICS '05 Proceedings of the 20th Annual IEEE Symposium on Logic in Computer Science
Polymorphic regular tree types and patterns
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Complete Sequent Calculi for Induction and Infinite Descent
LICS '07 Proceedings of the 22nd Annual IEEE Symposium on Logic in Computer Science
Focusing and higher-order abstract syntax
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typed normal form bisimulation
CSL'07/EACSL'07 Proceedings of the 21st international conference, and Proceedings of the 16th annuall conference on Computer Science Logic
A Pronominal Approach to Binding and Computation
TLCA '09 Proceedings of the 9th International Conference on Typed Lambda Calculi and Applications
Refinement Types as Proof Irrelevance
TLCA '09 Proceedings of the 9th International Conference on Typed Lambda Calculi and Applications
Focalisation and classical realisability
CSL'09/EACSL'09 Proceedings of the 23rd CSL international conference and 18th EACSL Annual conference on Computer science logic
Journal of Computer Security - Foundational Aspects of Security
Hi-index | 0.00 |
One lesson learned painfully over the past twenty years is the perilous interaction of Curry-style typing with evaluation order and side-effects. This led eventually to the value restriction on polymorphism in ML, as well as, more recently, to similar artifacts in type systems for ML with intersection and union refinement types. For example, some of the traditional subtyping laws for unions and intersections are unsound in the presence of effects, while union-elimination requires an evaluation context restriction in addition to the value restriction on intersection-introduction. Our aim is to show that rather than being ad hoc artifacts, phenomena such as the value and evaluation context restrictions arise naturally in type systems for effectful languages, out of principles of duality. Beginning with a review of recent work on the Curry-Howard interpretation of focusing proofs as pattern-matching programs, we explain how to interpret intersection and union refinements on these programs, and how to logically derive the subtyping relationship via an identity coercion interpretation. The value restriction, etc., emerge out of this analysis. However, this abstract account does not immediately yield a decidable type system, essentially because the syntax is infinitary--both "infinitely wide" and "infinitely deep". We show how to mechanically construct a finitary syntax by applying two well-known PL techniques--pattern-compilation and defunctionalization--and conclude by giving this finitary syntax an algorithmic refinement type system. Parallel to the text, we describe an embedding in the dependently-typed functional language Agda, both for the sake of clarifying these ideas, and also because formalization was an important guide in developing them. As one example, the Agda encoding split very naturally into an intrinsic ("Church") view of well-typed programs, and an extrinsic ("Curry") view of refinement typing for those programs.