Journal of Symbolic Computation
Infinite objects in type theory
TYPES '93 Proceedings of the international workshop on Types for proofs and programs
A syntactic approach to type soundness
Information and Computation
Proving the correctness of reactive systems using sized types
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
A Theory of Primitive Objects - Untyped and First-Order Systems
TACS '94 Proceedings of the International Conference on Theoretical Aspects of Computer Software
A Term Calculus for Intuitionistic Linear Logic
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
A Typed Lambda Calculus with Categorical Type Constructors
Category Theory and Computer Science
Call-by-value is dual to call-by-name
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
Semantic types: a fresh look at the ideal model for types
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type-based termination of recursive definitions
Mathematical Structures in Computer Science
Journal of Functional Programming
Focusing and higher-order abstract syntax
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Focusing on Binding and Computation
LICS '08 Proceedings of the 2008 23rd Annual IEEE Symposium on Logic in Computer Science
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Case Analysis of Higher-Order Data
Electronic Notes in Theoretical Computer Science (ENTCS)
Dual Calculus with Inductive and Coinductive Types
RTA '09 Proceedings of the 20th International Conference on Rewriting Techniques and Applications
The logical basis of evaluation order and pattern-matching
The logical basis of evaluation order and pattern-matching
Mixed inductive/coinductive types and strong normalization
APLAS'07 Proceedings of the 5th Asian conference on Programming languages and systems
Let's see how things unfold: reconciling the infinite with the intensional
CALCO'09 Proceedings of the 3rd international conference on Algebra and coalgebra in computer science
Subtyping, declaratively: an exercise in mixed induction and coinduction
MPC'10 Proceedings of the 10th international conference on Mathematics of program construction
Call-by-value is dual to call-by-name: reloaded
RTA'05 Proceedings of the 16th international conference on Term Rewriting and Applications
Call-by-value is dual to call-by-name: reloaded
RTA'05 Proceedings of the 16th international conference on Term Rewriting and Applications
Wellfounded recursion with copatterns: a unified approach to termination and productivity
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Type-Based Productivity of Stream Definitions in the Calculus of Constructions
LICS '13 Proceedings of the 2013 28th Annual ACM/IEEE Symposium on Logic in Computer Science
Hi-index | 0.00 |
Inductive datatypes provide mechanisms to define finite data such as finite lists and trees via constructors and allow programmers to analyze and manipulate finite data via pattern matching. In this paper, we develop a dual approach for working with infinite data structures such as streams. Infinite data inhabits coinductive datatypes which denote greatest fixpoints. Unlike finite data which is defined by constructors we define infinite data by observations. Dual to pattern matching, a tool for analyzing finite data, we develop the concept of copattern matching, which allows us to synthesize infinite data. This leads to a symmetric language design where pattern matching on finite and infinite data can be mixed. We present a core language for programming with infinite structures by observations together with its operational semantics based on (co)pattern matching and describe coverage of copatterns. Our language naturally supports both call-by-name and call-by-value interpretations and can be seamlessly integrated into existing languages like Haskell and ML. We prove type soundness for our language and sketch how copatterns open new directions for solving problems in the interaction of coinductive and dependent types.