On understanding types, data abstraction, and polymorphism
ACM Computing Surveys (CSUR) - The MIT Press scientific computation series
Abstract types have existential type
ACM Transactions on Programming Languages and Systems (TOPLAS)
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
A semantics for imprecise exceptions
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
Typer inference builds a short cut to deforestation
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Concatenate, reverse and map vanish for free
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Shortcut fusion for accumulating parameters & zip-like functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Fundamental Concepts in Programming Languages
Higher-Order and Symbolic Computation
Towards a theory of type structure
Programming Symposium, Proceedings Colloque sur la Programmation
Free theorems in the presence of seq
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Parametric polymorphism and operational equivalence
Mathematical Structures in Computer Science
Journal of Functional Programming
The Impact of seq on Free Theorems-Based Program Transformations
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
Syntactic Logical Relations for Polymorphic and Recursive Types
Electronic Notes in Theoretical Computer Science (ENTCS)
Selective strictness and parametricity in structural operational semantics, inequationally
Theoretical Computer Science
Monadic augment and generalised short cut fusion
Journal of Functional Programming
Interpreting polymorphic FPC into domain theoretic models of parametric polymorphism
ICALP'06 Proceedings of the 33rd international conference on Automata, Languages and Programming - Volume Part II
Proof tool support for explicit strictness
IFL'05 Proceedings of the 17th international conference on Implementation and Application of Functional Languages
Step-Indexed syntactic logical relations for recursive and quantified types
ESOP'06 Proceedings of the 15th European conference on Programming Languages and Systems
Proving correctness via free theorems: the case of the destroy/build-rule
PEPM '08 Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Parametricity for Haskell with Imprecise Error Semantics
TLCA '09 Proceedings of the 9th International Conference on Typed Lambda Calculi and Applications
Step-indexed kripke models over recursive worlds
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Hi-index | 0.00 |
Logical relations are a fundamental and powerful tool for reasoning about programs in languages with parametric polymorphism. Logical relations suitable for reasoning about observational behavior in polymorphic calculi supporting various programming language features have been introduced in recent years. Unfortunately, the calculi studied are typically idealized, and the results obtained for them offer only partial insight into the impact of such features on observational behavior in implemented languages. In this paper we show how to bring reasoning via logical relations closer to bear on real languages by deriving results that are more pertinent to an intermediate language for the (mostly) lazy functional language Haskell like GHC Core. To provide a more fine-grained analysis of program behavior than is possible by reasoning about program equivalence alone, we work with an abstract notion of relating observational behavior of computations which has among its specializations both observational equivalence and observational approximation. We take selective strictness into account, and we consider the impact of different kinds of computational failure, e.g., divergence versus failed pattern matching, because such distinctions are significant in practice. Once distinguished, the relative definedness of different failure causes needs to be considered, because different orders here induce different observational relations on programs (including the choice between equivalence and approximation). Our main contribution is the construction of an entire family of logical relations, parameterized over a definedness order on failure causes, each member of which characterizes the corresponding observational relation. Although we deal with properties very much tied to types, we base our results on a type-erasing semantics since this is more faithful to actual implementations.