Reference. Elimination with a Motive
Cite
Cited by (6)
Coverage Semantics for Dependent Pattern Matching eremondi-2025-coverage
Dependent pattern matching is a key feature in dependently typed programming. However, there is a theory-practice disconnect: while many proof assistants implement pattern matching as primitive, theoretical presentations give semantics to pattern matching by elaborating to eliminators. Though theoretically convenient, eliminators can be awkward and verbose, particularly for complex combinations of patterns. This work aims to bridge the theory-practice gap by presenting a direct categorical semantics for pattern matching, which does not elaborate to eliminators. This is achieved using sheaf theory to describe when sets of arrows (terms) can be amalgamated into a single arrow. We present a language with top-level dependent pattern matching, without specifying which sets of patterns are considered covering for a match. Then, we give a sufficient criterion for which pattern-sets admit a sound model: patterns should be in the canonical coverage for the category of contexts. Finally, we use sheaf-theoretic saturation conditions to devise some allowable sets of patterns. We are able to express and exceed the status quo, giving semantics for datatype constructors, nested patterns, absurd patterns, propositional equality, and dot patterns.
A Dependently Typed Language with Dynamic Equality lemay-2023-a
QED at Large: A Survey of Engineering of Formally Verified Software ringer-2019-qed
Development of formal proofs of correctness of programs can increase actual and perceived reliability and facilitate better understanding of program specifications and their underlying assumptions. Tools supporting such development have been available for over 40 years, but have only recently seen wide practical use. Projects based on construction of machine-checked formal proofs are now reaching an unprecedented scale, comparable to large software projects, which leads to new challenges in proof development and maintenance. Despite its increasing importance, the field of proof engineering is seldom considered in its own right; related theories, techniques, and tools span many fields and venues. This survey of the literature presents a holistic understanding of proof engineering for program correctness, covering impact in practice, foundations, proof automation, proof organization, and practical proof development.
A Specification for Dependent Types in Haskell weirich_etal_2017
Observational equality, now! altenkirch-2007-observational
The view from the left mcbride-2004-the
Pattern matching has proved an extremely powerful and durable notion in functional programming. This paper contributes a new programming notation for type theory which elaborates the notion in various ways. First, as is by now quite well-known in the type theory community, definition by pattern matching becomes a more discriminating tool in the presence of dependent types, since it refines the explanation of types as well as values. This becomes all the more true in the presence of the rich class of datatypes known as inductive families (Dybjer, 1991). Secondly, as proposed by Peyton Jones (1997) for Haskell, and independently rediscovered by us, subsidiary case analyses on the results of intermediate computations, which commonly take place on the right-hand side of definitions by pattern matching, should rather be handled on the left. In simply-typed languages, this subsumes the trivial case of Boolean guards; in our setting it becomes yet more powerful. Thirdly, elementary pattern matching decompositions have a well-defined interface given by a dependent type; they correspond to the statement of an induction principle for the datatype. More general, user-definable decompositions may be defined which also have types of the same general form. Elementary pattern matching may therefore be recast in abstract form, with a semantics given by translation. Such abstract decompositions of data generalize Wadler’s (1987) notion of ‘view’. The programmer wishing to introduce a new view of a type , and exploit it directly in pattern matching, may do so via a standard programming idiom. The type theorist, looking through the Curry–Howard lens, may see this as proving a theorem , one which establishes the validity of a new induction principle for . We develop enough syntax and semantics to account for this high-level style of programming in dependent type theory. We close with the development of a typechecker for the simply-typed lambda calculus, which furnishes a view of raw terms as either being well-typed, or containing an error. The implementation of this view is ipso facto a proof that typechecking is decidable.
Cites 23 works (0 here)
External (23)
- The Coq proof assistant reference manual (2001)
- Extensional equality in intensional type theory (1999)
- The automation of proof by mathematical induction (1999)
- Dependently typed functional programs and their proofs (1999)
- Inverting inductively defined relations in LEGO (1998)
- Conception d'un langage de haut niveau de représentation de preuves (1997)
- Automating inversion of inductive predicates in Coq (1996)
- Définitions inductives en théorie des types d'ordre supérieur (1996)
- Extensional concepts in intensional type theory (1995)
- The implementation of ALF—a proof editor based on Martin-Löf's monomorphic type theory with explicit substitution (1994)
- Deliverables: a categorical approach to program development in type theory (1993)
- Investigations into intensional type theory (1993)
- Unification under a mixed prefix (1992)
- Pattern matching with dependent types (1992)
- LEGO proof development system: user's manual (1992)
- Telescopic mappings in typed lambda calculus (1991)
- Inductive sets and families in Martin-Löf's type theory and their set-theoretic semantics (1991)
- A Logic Programming Language with Lambda-Abstraction, Function Variables, and Simple Unification (1991)
- Inductively defined types (1990)
- Views: a way for pattern matching to cohabit with data abstraction (1987)
- Intuitionistic type theory (1984)
- A theory of types (1971)
- A Machine-Oriented Logic Based on the Resolution Principle (1965)