![]() |
Adam Chlipala E-mail: adam@chlipala.net I finished my PhD in Computer Science at Berkeley in 2007. I received a Master of Science degree in CS from Berkeley in 2004 and a Bachelor of Science in CS from CMU in 2003. I'm currently doing a part-time postdoc with Greg Morrisett at Harvard. In the other half of my time, I'm working on a stealth-mode Internet start-up company built around type theory. One of my primary research interests is engineering issues in interactive computer theorem proving, especially as related to the formal semantics of programming languages. Over the years, software developers have settled upon techniques that promote long-term maintainability of software. The field of mechanized theorem-proving sorely lacks its own counterpart. Most mechanized proofs are hard to write, understand, and evolve. We should be writing our machine-checked proofs in a way that makes them easy to adapt to changing specifications, following a standard lesson of software development. My research on computer theorem proving focuses on techniques for rapid construction of readable, automated proofs (especially in Coq), without giving up the expressivity of higher-order logic. I'm also interested in the design and implementation of statically-typed functional programming languages, especially those with interesting facilities for type-level computation. I'm working on the Ur/Web programming language and compiler, which make it possible to generate large parts of dynamic web applications with statically-typed metaprogramming. |
Starting with my thesis research, I've been developing the Lambda Tamer library for programming language formalization in Coq. I'm working towards a certified compiler for core ML; that is, a compiler with a machine-checked proof that it preserves program meanings. I follow a somewhat unusual style, including a few key elements:
Papers:
I'm writing a textbook on effective engineering with Coq. It's reached a stable state that I'm calling a complete beta release.
This book should be valuable even to most people who have been using Coq for years, since I focus on a very unusual approach, centered on replacing manual proofs with lots of dependent types and mostly-automated proofs based on scripted decision procedures.
I'm working on a new breed of domain-specific programming language for database-backed web applications. The static type system rules out code-injection attacks and many common kinds of web programmer negligence. Beyond that, I've added features from the world of dependent types, especially to support metaprogramming, where programs can be written by recursion on type structure. This makes it possible to reify as well-typed functions many "design patterns" that show up via copy-and-paste in most of today's web applications.
Papers:
The Ynot library turns Coq into an environment for writing and verifying imperative programs. We support compilation to native code via extraction to OCaml, and there are goodies for automating large parts of most proofs about heaps and data structures.
Papers: