Results 1 
4 of
4
Metatheory à la carte
 In POPL ’13
, 2013
"... Formalizing metatheory, or proofs about programming languages, in a proof assistant has many wellknown benefits. However, the considerable effort involved in mechanizing proofs has prevented it from becoming standard practice. This cost can be amortized by reusing as much of an existing formalizat ..."
Abstract

Cited by 5 (1 self)
 Add to MetaCart
Formalizing metatheory, or proofs about programming languages, in a proof assistant has many wellknown benefits. However, the considerable effort involved in mechanizing proofs has prevented it from becoming standard practice. This cost can be amortized by reusing as much of an existing formalization as possible when building a new language or extending an existing one. Unfortunately reuse of components is typically adhoc, with the language designer cutting and pasting existing definitions and proofs, and expending considerable effort to patch up the results. This paper presents a more structured approach to the reuse of formalizations of programming language semantics through the composition of modular definitions and proofs. The key contribution is the development of an approach to induction for extensible Church encodings which uses a novel reinterpretation of the universal property of folds. These encodings provide the foundation for a framework, formalized in Coq, which uses type classes to automate the composition of proofs from modular components. Several interesting language features, including binders and general recursion, illustrate the capabilities of our framework. We reuse these features to build fully mechanized definitions and proofs for a number of languages, including a version of miniML. Bounded induction enables proofs of properties for noninductive semantic functions, and mediating type classes enable proof adaptation for more featurerich languages. 1.
Modular TypeSafety Proofs in Agda
"... Methods for reusing code are widespread and well researched, but methods for reusing proofs are still emerging. We consider the use of dependent types for this purpose, introducing a modular approach for composing mechanized proofs. We show that common techniques for abstracting algorithms over data ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
Methods for reusing code are widespread and well researched, but methods for reusing proofs are still emerging. We consider the use of dependent types for this purpose, introducing a modular approach for composing mechanized proofs. We show that common techniques for abstracting algorithms over data structures naturally translate to abstractions over proofs. We introduce a language composed of a series of smaller language components, each defined as functors, and tie them together by taking the fixed point of their sum [Malcom, 1990]. We then give proofs of type preservation for each language component and show how to compose these proofs into a proof for the entire language, again by taking the fixed point of a sum of functors.
Theorem Proving for Product Lines
 In OOPSLA’11
, 2011
"... Mechanized proof assistants are powerful verification tools, but proof developments can still be difficult and timeconsuming. When verifying a family of related programs, the effort can be reduced by proof reuse. In this paper, we show how to engineer proofs for product lines built from feature modu ..."
Abstract

Cited by 2 (1 self)
 Add to MetaCart
Mechanized proof assistants are powerful verification tools, but proof developments can still be difficult and timeconsuming. When verifying a family of related programs, the effort can be reduced by proof reuse. In this paper, we show how to engineer proofs for product lines built from feature modules. Each module contains proof fragments which are composed together to build a complete proof of correctness for each product. We consider a product line of programming languages, where each variant includes metatheory proofs verifying the correctness of its syntax and semantic definitions. This approach has been realized in the Coq proof assistant, with the proofs of each feature independently certifiable by Coq. These proofs are composed for each language variant, with Coq mechanically verifying that the composite proofs are correct. As validation, we formalize a core calculus for Java in Coq which can be extended with any combination of casts, interfaces, or generics. 1.
Research Statement
, 2008
"... Research ought to be promotable. It should have potential to inform and motivate those outside the particular subdiscipline in which it originated. It is easy to look into the past and find promotable research; examine the present for the products of research and identify the research that contribu ..."
Abstract
 Add to MetaCart
Research ought to be promotable. It should have potential to inform and motivate those outside the particular subdiscipline in which it originated. It is easy to look into the past and find promotable research; examine the present for the products of research and identify the research that contributed to those products. It is much harder to identify current research which will actually be promoted. Nonetheless, I believe that the following qualities are fundamental to promotable research: relevancy the research is intended to overcome a real problem simplicity the concepts underlying the research are simple accessibility the essence of the work is communicable, by an informative simile, to nonexperts honesty the impact of the research is described honestly, an honest comparison of related work is made, and prior work is credited transparency if there are witnesses to the quality of the research, e.g., an implementation of an algorithm or a library, then they are made available for inspection As a graduate student, I have divided my research efforts between two principle areas. The first is automated theorem proving. In this area I have examined a number of ways in which techniques from integrated development environments(IDEs) can be adapted for use with proof assistants, in particular Coq [8]. The second is a synthesis of machine learning and software engineering to assist debugging. In both areas I have endeavored to make sure my research has the qualities above.