
NSF Org: |
CCF Division of Computing and Communication Foundations |
Recipient: |
|
Initial Amendment Date: | May 26, 2017 |
Latest Amendment Date: | May 26, 2017 |
Award Number: | 1713389 |
Award Instrument: | Standard Grant |
Program Manager: |
Anindya Banerjee
abanerje@nsf.gov (703)292-7885 CCF Division of Computing and Communication Foundations CSE Directorate for Computer and Information Science and Engineering |
Start Date: | September 15, 2017 |
End Date: | August 31, 2021 (Estimated) |
Total Intended Award Amount: | $463,504.00 |
Total Awarded Amount to Date: | $463,504.00 |
Funds Obligated to Date: |
|
History of Investigator: |
|
Recipient Sponsored Research Office: |
438 ACADEMY ST BOONE NC US 28608-0001 (828)262-7459 |
Sponsor Congressional District: |
|
Primary Place of Performance: |
P.O. Box 32174 Boone NC US 28608-2174 |
Primary Place of
Performance Congressional District: |
|
Unique Entity Identifier (UEI): |
|
Parent UEI: |
|
NSF Program(s): | Software & Hardware Foundation |
Primary Program Source: |
|
Program Reference Code(s): |
|
Program Element Code(s): |
|
Award Agency Code: | 4900 |
Fund Agency Code: | 4900 |
Assistance Listing Number(s): | 47.070 |
ABSTRACT
Testing of programs has dominated the last 50 years of software development, but the next 50 will see an increased demand for provably correct software. This is partly because modern applications are increasingly safety critical, partly because testing is by its very nature only a partial correctness guarantee, and partly because programming language technology has now advanced to the stage where it is feasible to formally verify critical programs. Language-based verification uses a language's type system to guarantee program correctness, so that type-checking a program becomes tantamount to verifying its correctness. Thus, the more program properties a type system can express, the more the compiler can automatically verify. Indexed programming is a key technique for using a language's type system to express more and more sophisticated properties of programs. Indexed programming uses the extra information present in type indices to help close the so-called "semantic gap" between what programmers know about their programs and what type systems can express about them. The intellectual merits of this project lie in providing a principled methodology for transferring knowledge about effective programming and proving between languages supporting type-indexing of types and those supporting term-indexing of types, developing a semantic framework that enhances researchers' and practitioners' understanding of the nature of indexed types in general, and opening the way for new forms of indexing that can enforce even greater correctness guarantees. The broader impact of this project is to use indexed types to develop better and more widely applicable formal program verification methods, and, thereby, to help ensure that even large and sophisticated software systems are safe and reliable. Because it will lead to provably correct and secure software, this project has the potential to impact any application area, and thus any sector of the economy, for which such software is paramount.
This project will use the algebraic structure of indexing to guide the way programmers program with indexed types. Specifically, it will advance the state-of-the-art by providing an axiomatic framework for indexed programming that is principled, conceptually simple, comprehensive, uniform, and predictive. It will use the categorical notion of a fibration to ensure that the framework is general enough both to describe traditional type- and term-indexing of types, and to prescribe approaches to indexed programming when indices have more sophisticated and computationally useful algebraic structure. To this end, it will develop analogues of the adjoint structure present in the fibrations underlying traditional type- and term-indexing for more general fibrations interpreting programs, their types, and their properties. Because fibrations can uniformly model very general notions of "index" and "program property" in very general computational settings, they are indeed a promising foundation for the new framework. The development of the framework will drive both theory and practice forward by transferring knowledge between the traditional type- and term-indexed settings, solving state-of-the-art problems in each of these settings, and providing an understanding of the conceptual essence of indexed programming that allows problem solutions from these traditional settings to be extended to new ones.
PUBLICATIONS PRODUCED AS A RESULT OF THIS RESEARCH
Note:
When clicking on a Digital Object Identifier (DOI) number, you will be taken to an external
site maintained by the publisher. Some full text articles may not yet be available without a
charge during the embargo (administrative interval).
Some links on this page may take you to non-federal websites. Their policies may differ from
this site.
PROJECT OUTCOMES REPORT
Disclaimer
This Project Outcomes Report for the General Public is displayed verbatim as submitted by the Principal Investigator (PI) for this award. Any opinions, findings, and conclusions or recommendations expressed in this Report are those of the PI and do not necessarily reflect the views of the National Science Foundation; NSF has not approved or endorsed its content.
In this project we studied type- and term-indexed data types to better understand their syntax and semantics, as well as how the two kinds of indexing relate to one another. The ultimate goal of this line of work is to help programmers think about, and use, indexed types more effectively in practice.
Postdoc Andrew Polonsky and I first proved a new, fundamental result in pure category theory that we needed to develop semantics of indexed data types. This result was a surprise --- not just to us, but to world experts on the topic, who expected it to be false. The result is reported in our Applied Category Theory (ACT) paper.
Polonsky and I used our ACT result to develop a fundamentally new syntax and semantics for higher-kinded (type-indexed) types, including (truly) nested types and generalized algebraic data types (GADTs). These are widely used in functional programming to enforce constraints on data. Our results are reported in our LICS'19 paper.
Polonsky and I then used the semantics for (truly) nested types from our LICS'19 paper to develop an extended theory of induction over them. Our theory made it possible to define the first-ever induction rules for truly nested types. It also delivered new induction rules for nested types that greatly improve those currently generated for all nested types (including algebraic data types) by modern theorem provers. The new rules are reported in our FoSSaCS'20 paper, which is accompanied by a small Agda implementation.
Postdoc Enrico Ghiorzi, App State Master's student Daniel Jeffries, and I subsequently discovered that the same approach used in the FoSSaCS'20 paper does not support induction rules for GADTs (explaining, perhaps, why no proof assistants currently generate such rules). Despite working on this problem for over a year now, I still know of no semantics for GADTs that support induction rules and specialize to those for algebraic data types (ADTs) and nested types. The reasons for this seem to be very deep. The issue is still very actively under investigation.
Ghiorzi, Jeffries, and I used the semantics from the LICS'19 paper to give a parametric model for a polymorphic lambda calculus supporting nested types (including truly nested types) as primitive, or native, data types. Parametricity makes it possible to reason uniformly about data at different instances of a data type. Our model is reported in our FoSSaCS'21 paper. Jeffries made good progress on implementing and formally validating our theory of parametricity for nested types in Agda in his (ambitious) Master's thesis. For the same reasons that we haven't been able to extend induction to GADTs, we haven't been able to understand our parametric model to them either. The important parts of our understanding of the situation are summarized in our LFSA'21 paper.
On the non-technical side, this project brought two successive post-doctoral researchers to App State and supported one Master's student. It created the opportunity for an undergraduate to get involved in internationally leading research, and to stay on for a Master's degree in which they could continue that work. It also provided the second postdoc good training in mentoring a graduate student. The project resulted not just in a Master's degree for the student, but also in two co-authored publications at internationally competitive venues.
Last Modified: 10/25/2021
Modified by: Patricia Johann
Please report errors in award information by writing to: awardsearch@nsf.gov.