Reference. QED at Large: A Survey of Engineering of Formally Verified Software
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.
Cite
Cited by (11)
Mathematicians put AI model AlphaProof to the test ringer-2025-mathematicians
Proof Repair across Quotient Type Equivalences viola-2025-proof
Proofs in proof assistants like Rocq can be brittle, breaking easily in response to changes. To address this, recent work introduced an algorithm and tool in Rocq to automatically repair broken proofs in response to changes that correspond to type equivalences. However, many changes remained out of the scope of this algorithm and tool—especially changes in underlying behavior . We extend this proof repair algorithm so that it can express certain changes in behavior that were previously out of scope. We focus in particular on equivalences between quotient types —types equipped with a relation that describes what it means for any two elements of that type to be equal. Quotient type equivalences can be used to express interesting changes in representations of mathematical structures, as well as changes in the implementations of data structures. We extend this algorithm and tool to support quotient type equivalences in Rocq. Notably, since Rocq lacks quotient types entirely, our extensions use Rocq’s setoid machinery in place of quotients. Specifically, (1) our extension to the algorithm supports new changes corresponding to setoids, and (2) our extension to the tool supports this new class of changes and further automates away some of the new proof obligations. We demonstrate our extensions on proof repair case studies for previously unsupported changes. We also perform manual proof repair in Cubical Agda, a language with a univalent metatheory, which allows us to construct the first ever internal proofs of correctness for proof repair.
QEDCartographer: Automating Formal Verification Using Reward-Free Reinforcement Learning sanchezstern-2025-qedcartographer
Proofs and Conversations ringer-2024-proofs
Modeling Game Mechanics With Ceptre martens-2024-modeling
Baldur: Whole-Proof Generation and Repair with Large Language Models first-2023-baldur
Passport: Improving Automated Formal Verification Using Identifiers sanchezstern-2023-passport
Formally verifying system properties is one of the most effective ways of improving system quality, but its high manual effort requirements often render it prohibitively expensive. Tools that automate formal verification by learning from proof corpora to synthesize proofs have just begun to show their promise. These tools are effective because of the richness of the data the proof corpora contain. This richness comes from the stylistic conventions followed by communities of proof developers, together with the powerful logical systems beneath proof assistants. However, this richness remains underexploited, with most work thus far focusing on architecture rather than on how to make the most of the proof data. This article systematically explores how to most effectively exploit one aspect of that proof data: identifiers. We develop the Passport approach, a method for enriching the predictive Coq model used by an existing proof-synthesis tool with three new encoding mechanisms for identifiers: category vocabulary indexing, subword sequence modeling, and path elaboration. We evaluate our approach’s enrichment effect on three existing base tools: ASTactic, Tac, and Tok. In head-to-head comparisons, Passport automatically proves 29% more theorems than the best-performing of these base tools. Combining the three tools enhanced by the Passport approach automatically proves 38% more theorems than combining the three base tools. Finally, together, these base tools and their enhanced versions prove 45% more theorems than the combined base tools. Overall, our findings suggest that modeling identifiers can play a significant role in improving proof synthesis, leading to higher-quality software.
PRoofster: Automated Formal Verification agrawal-2023-proofster
Getting More out of Large Language Models for Proofs zhang-2023-getting
Large language models have the potential to simplify formal theorem proving and make it more accessible. But how to get the most out of these models is still an open question. To answer this question, we take a step back and explore the failure cases of these models using common prompting-based techniques. Our talk will discuss these failure cases and what they can teach us about how to get more out of these models.
Proof repair across type equivalences ringer-2021-proof
REPLica: REPL instrumentation for Coq analysis ringer-2020-replica
Cites 548 works (16 here)
With notes (16)
Ornaments for Proof Reuse in Coq ringer-2019-ornaments
Ornaments express relations between inductive types with the same inductive structure. We implement fully automatic proof reuse for a particular class of ornaments in a Coq plugin, and show how such a tool can give programmers the rewards of using indexed inductive types while automating away many of the costs. The plugin works directly on Coq code; it is the first ornamentation tool for a non-embedded dependently typed language. It is also the first tool to automatically identify ornaments: To lift a function or proof, the user must provide only the source type, the destination type, and the source function or proof. In taking advantage of the mathematical properties of ornaments, our approach produces faster functions and smaller terms than a more general approach to proof reuse in Coq.
The RedPRL Proof Assistant (Invited Paper) angiuli-2018-the
RedPRL is an experimental proof assistant based on Cartesian cubical computational type theory, a new type theory for higher-dimensional constructions inspired by homotopy type theory. In the style of Nuprl, RedPRL users employ tactics to establish behavioral properties of cubical functional programs embodying the constructive content of proofs. Notably, RedPRL implements a two-level type theory, allowing an extensional, proof-irrelevant notion of exact equality to coexist with a higher-dimensional proof-relevant notion of paths.
Adapting proof automation to adapt proofs ringer-2018-adapting
Iris from the ground up: A modular foundation for higher-order concurrent separation logic jung_etal_iris_ground_up_2018
Iris is a framework for higher-order concurrent separation logic, which has been implemented in the Coq proof assistant and deployed very effectively in a wide variety of verification projects. Iris was designed with the express goal of simplifying and consolidating the foundations of modern separation logics, but it has evolved over time, and the design and semantic foundations of Iris itself have yet to be fully written down and explained together properly in one place. Here, we attempt to fill this gap, presenting a reasonably complete picture of the latest version of Iris (version 3.1), from first principles and in one coherent narrative.
Interactive proofs in higher-order concurrent separation logic krebbers-2017-interactive
Iris: Monoids and Invariants as an Orthogonal Basis for Concurrent Reasoning jung-2015-iris
CakeML: A verified implementation of ML kumar_cakeml_2014
We have developed and mechanically verified an ML system called CakeML, which supports a substantial subset of Standard ML. CakeML is implemented as an interactive read-eval-print loop (REPL) in x86-64 machine code. Our correctness theorem ensures that this REPL implementation prints only those results permitted by the semantics of CakeML. Our verification effort touches on a breadth of topics including lexing, parsing, type checking, incremental and dynamic compilation, garbage collection, arbitraryprecision arithmetic, and compiler bootstrapping.
Validating LR(1) Parsers jourdanValidatingLRParsers2012
An LR(1) parser is a finite-state automaton, equipped with a stack, which uses a combination of its current state and one lookahead symbol in order to determine which action to perform next. We present a validator which, when applied to a context-free grammar G and an automaton A, checks that A and G agree. Validating the parser provides the correctness guarantees required by verified compilers and other high-assurance software that involves parsing. The validation process is independent of which technique was used to construct A. The validator is implemented and proved correct using the Coq proof assistant. As an application, we build a formally-verified parser for the C99 language.
Verified Software Toolchain appel_vst_2011
Finding and Understanding Bugs in C Compilers yangFindingUnderstandingBugs
Compilers should be correct. To improve the quality of C compilers, we created Csmith, a randomized test-case generation tool, and spent three years using it to find compiler bugs. During this period we reported more than 325 previously unknown bugs to compiler developers. Every compiler we tested was found to crash and also to silently generate wrong code when presented with valid input. In this paper we present our compiler-testing tool and the results of our bug-hunting study. Our first contribution is to advance the state of the art in compiler testing. Unlike previous tools, Csmith generates programs that cover a large subset of C while avoiding the undefined and unspecified behaviors that would destroy its ability to automatically find wrong-code bugs. Our second contribution is a collection of qualitative and quantitative results about the bugs we have found in open-source C compilers.
Formal verification of a realistic compiler leroy_formal_2009
This paper reports on the development and formal verification (proof of semantic preservation) of CompCert, a compiler from Clight (a large subset of the C programming language) to PowerPC assembly code, using the Coq proof assistant both for programming the compiler and for proving its correctness. Such a verified compiler is useful in the context of critical software and its formal verification: the verification of the compiler guarantees that the safety properties proved on the source code hold for the executable compiled code as well.
Separation logic: A logic for shared mutable data structures reynolds_separation_2002
In joint work with Peter O’Hearn and others, based on early ideas of Burstall, we have developed an extension of Hoare logic that permits reasoning about low-level imperative programs that use shared mutable data structure. The simple imperative programming language is extended with commands (not expressions) for accessing and modifying shared structures, and for explicit allocation and deallocation of storage. Assertions are extended by introducing a “separating conjunction” that asserts that its subformulas hold for disjoint parts of the heap, and a closely related “separating implication”. Coupled with the inductive definition of predicates on abstract data structures, this extension permits the concise and flexible description of structures with controlled sharing. In this paper, we survey the current development of this program logic, including extensions that permit unrestricted address arithmetic, dynamically allocated arrays, and recursive procedures. We also discuss promising future directions.
Elimination with a Motive mcbride-2002-elimination
System Description: Twelf — A Meta-Logical Framework for Deductive Systems pfenning_schrmann_1999
Higher-order abstract syntax pfenning-1988-higher
External (532)
- ISA Semantics for ARMv8-a, RISC-v, and CHERI-MIPS (2019)
- HOList: An Environment for Machine Learning of Higher-Order Theorem Proving (extended version) (2019)
- Argosy: Verifying Layered Storage Systems with Recovery Refinement (2019)
- Simple High-Level Code For Cryptographic Arithmetic - With Proofs, Without Compromises (2019)
- Aligning concepts across proof assistant libraries (2019)
- GamePad: A Learning Environment for Theorem Proving (2019)
- Ltac2: Tactical Warfare (2019)
- Bridging the gap between programming languages and hardware weak memory models (2019)
- A verified prover based on ordered resolution (2019)
- Learning to Prove Theorems via Interacting with Proof Assistants (2019)
- foundation of mathematics (nLab) (2019)
- Automatic refactoring for Agda (2019)
- The Agda Wiki (2019)
- The POPLMark Challenge (2019)
- Preliminary compilation of critical bugs in stable releases of Coq (2019)
- The Coq Proof Assistant (2019)
- The CoqHoTT Project (2019)
- Personal communication (R. Harper and K. Crary) (2019)
- Archive of Formal Proofs: Submission Guidelines (2019)
- Lean for VS Code (2019)
- intensional type theory (nLab) (2019)
- Personal communication (B. C. Pierce, 2019) (2019)
- The MetaCoq Project (2019)
- UniMath: Univalent Mathematics (2019)
- Towards Certified Meta-Programming with Typed Template-Coq (2018)
- Engineering with Logic: Rigorous Test-Oracle Specification and Validation for TCP/IP and the Sockets API (2018)
- A verified SAT solver framework with learn, forget, restart, and incrementality (2018)
- Inferring Loop Invariants through Gamification (2018)
- VST-Floyd: A Separation Logic Tool to Verify Correctness of C Programs (2018)
- Cubical Type Theory: A Constructive Interpretation of the Univalence Axiom (2018)
- Hammer for Coq: Automation for Dependent Type Theory (2018)
- Generic Zero-cost Reuse for Dependent Types (2018)
- Regular Language Representations in the Constructive Type Theory of Coq (2018)
- A self-contained, brief and complete formulation of Voevodsky’s Univalence Axiom (2018)
- Coqoon: An IDE for interactive proof development in Coq (2018)
- Benchmarks for reasoning with syntax trees containing binders and contexts of assumptions (2018)
- Learning to Prove with Tactics (2018)
- Certified concurrent abstraction layers (2018)
- Mtac2: Typed Tactics for Backward Reasoning in Coq (2018)
- Formally Verified Software in the Real World (2018)
- MoSeL: A General, Extensible Modal Framework for Interactive Proofs in Separation Logic (2018)
- A Consistent Foundation for Isabelle/HOL (2018)
- Mechanized Metatheory Revisited (2018)
- Automatic Software Repair: A Bibliography (2018)
- Oeuf: Minimizing the Coq Extraction TCB (2018)
- BP: Formal Proofs, the Fine Print and Side Effects (2018)
- PaMpeR: Proof Method Recommendation System for Isabelle/HOL (2018)
- piCoq: Parallel Regression Proving for Large-scale Verification Projects (2018)
- Front-end tooling for building and maintaining dependently-typed functional programs (2018)
- Equivalences for Free: Univalent Parametricity for Effective Transport (2018)
- Mechanising and verifying the WebAssembly specification (2018)
- Verified Model Checking of Timed Automata (2018)
- CompCert: Practical Experience on Integrating and Qualifying a Formally Verified Optimizing Compiler (2018)
- A Verified Compiler from Isabelle/HOL to CakeML (2018)
- Cubical Type Theory in Agda – Agda 2.6.0 Documentation (2018)
- Lecture Notes on Iris: Higher-Order Concurrent Separation Logic (2018)
- The Surprising Security Benefits of End-to-End Formal Proofs (2018)
- Coq Integrated Development Environment (2018)
- Tactics (Coq reference manual) (2018)
- The Coq Commands (2018)
- Coq OPAM Package Index (2018)
- Omega: A solver for quantifier-free problems in Presburger Arithmetic (2018)
- CoqHammer: Automation for Dependent Type Theory (2018)
- The HOL System TUTORIAL (2018)
- The Tactic Language (2018)
- Javascript interface to the Lean server (2018)
- Guide to HOL4 interaction and basic proofs (2018)
- The RedPRL Proof Assistant (2018)
- Further Scaling of Isabelle Technology (2018)
- Frege’s Theorem and Foundations for Arithmetic (2018)
- Normalization by Evaluation for Sized Dependent Types (2017)
- Type Soundness Proofs with Definitional Interpreters (2017)
- The HoTT Library: A Formalization of Homotopy Type Theory in Coq (2017)
- Foundational (Co)datatypes and (Co)recursion for Higher-Order Logic (2017)
- iCoq: Regression Proof Selection for Large-Scale Verification Projects (2017)
- Verifying a High-performance Crash-safe File System Using a Tree Specification (2017)
- The End of History: Using a Proof Assistant to Replace Language Design with Library Design (2017)
- The essence of ornaments (2017)
- A Metaprogramming Framework for Formal Verification (2017)
- jsCoq: Towards Hybrid Theorem Proving Interfaces (2017)
- TacticToe: Learning to Reason with HOL4 Tactics (2017)
- Verifying strong eventual consistency in distributed systems (2017)
- Verifying Invariants of Lock-Free Data Structures with Rely-Guarantee and Refinement Types (2017)
- A Formal Proof of the Kepler Conjecture (2017)
- Automated Theory Exploration for Interactive Theorem Proving (2017)
- RustBelt: Securing the Foundations of the Rust Programming Language (2017)
- Closing the Gap - The Formally Verified Optimizing Compiler CompCert (2017)
- Safety and Liveness of MCS Lock - Layer by Layer (2017)
- Provably trustworthy systems (2017)
- Generating good generators for inductive relations (2017)
- Deep Network Guided Proof Search (2017)
- A Proof Strategy Language and Proof Script Generation for Isabelle/HOL (2017)
- Tree-Structure CNN for Automated Theorem Proving (2017)
- QWIRE Practice: Formal Verification of Quantum Circuits in Coq (2017)
- Congruence Closure in Intensional Type Theory (2017)
- Developing Bug-free Machine Learning Systems with Formal Mathematics (2017)
- Programming and Proving with Distributed Protocols (2017)
- High-assurance timing analysis for a high-assurance real-time operating system (2017)
- Algebraic Foundations of Proof Refinement (2017)
- The calculus of dependent lambda eliminations (2017)
- Classification of Alignments Between Concepts of Formal Mathematical Systems (2017)
- Automating Formalization by Statistical and Semantic Parsing of Mathematics (2017)
- Premise Selection for Theorem Proving by Deep Graph Embedding (2017)
- HolStep: A Machine Learning Dataset for Higher-order Logic Theorem\n Proving (2017)
- Quick Guide to Editing, Type Checking and Compiling Agda Code – Agda 2.5.4.2 Documentation (2017)
- CertiCoq: A verified compiler for Coq (2017)
- Personal communication (A. W. Appel) (2017)
- Formal Reasoning About Programs (2017)
- Theorem Proving in Lean (2017)
- The formal verification of compilers (2017)
- Personal communication (B. C. Pierce, 2017) (2017)
- Future Prospects of Isabelle Technology (2017)
- Scaling Isabelle Proof Document Processing (2017)
- Visual Studio Code as Prover IDE for Isabelle (2017)
- Cogent: Verifying High-Assurance File System Implementations (2016)
- Towards Formal Proof Metrics (2016)
- A Learning-Based Fact Selector for Isabelle/HOL (2016)
- Hammering towards QED (2016)
- Elaborator Reflection: Extending Idris in Idris (2016)
- Provably secure memory isolation for Linux on ARM (2016)
- Practical foundations for programming languages (2016)
- The Missing Link: Explaining ELF Static Linking, Semantically (2016)
- Programming with ornaments (2016)
- Understanding and maintaining tactics graphically OR how we are learning that a diagram can be worth more than 10K LoC (2016)
- Extensible and Efficient Automation Through Reflective Tactics (2016)
- COGENT: Certified Compilation for a Functional Systems Language (2016)
- Company-Coq: Taking Proof General one step closer to a real IDE (2016)
- A Framework for the Automatic Formal Verification of Refinement from Cogent to C (2016)
- CoqPIE: An IDE Aimed at Improving Proof Development Productivity (2016)
- Type Soundness for Dependent Object Types (2016)
- Dependent Types and Multi-monadic Effects in F* (2016)
- Planning for Change in a Formal Verification of the Raft Consensus Protocol (2016)
- AUTO2, a saturation-based heuristic prover for higherorder logic (2016)
- What’s in a Theorem Name? (2016)
- DeepMath - Deep Sequence Models for Premise Selection (2016)
- Most Influential POPL Paper Award (2016)
- CertiKOS: An Extensible Architecture for Building Certified Concurrent OS Kernels (2016)
- Agda reflection overhaul (2016)
- Proof General 4.4.1 pre Documentation (2016)
- Inside the design of a tactic system (2016)
- Refactoring Proofs with Tactician (2015)
- Calculating correct compilers (2015)
- Asynchronous Processing of Coq Documents: From the Kernel up to the User Interface (2015)
- Mining the Archive of Formal Proofs (2015)
- Practical tactics for verifying C programs in Coq (2015)
- Using Crash Hoare Logic for Certifying the FSCQ File System (2015)
- The Reflective Milawa Theorem Prover is Sound (Down to the Machine Code that Runs it) (2015)
- The Lean Theorem Prover (System Description) (2015)
- Fiat: Deductive Synthesis of Abstract Data Types in a Proof Assistant (2015)
- Theory exploration of binary trees (2015)
- Proof-producing reflection for HOL (2015)
- The Next 700 Challenge Problems for Reasoning with Higher-Order Abstract Syntax Representations (2015)
- Sharing HOL4 and HOL Light Proof Knowledge (2015)
- Deep Specifications and Certified Abstraction Layers (2015)
- An empirical research agenda for understanding formal methods productivity (2015)
- HOL(y)Hammer: Online ATP Service for HOL Light (2015)
- Self-compilation and self-verification (2015)
- Refinement to imperative/HOL (2015)
- Polymorphic blocks: Formalism-inspired UI for structured connectors (2015)
- Empirical Study Towards a Leading Indicator for Cost of Formal Software Verification (2015)
- Eisbach: A Proof Method Language for Isabelle (2015)
- The Eisbach user manual (2015)
- Turing-Completeness Totally Free (2015)
- Pilsner: A Compositionally Verified Compiler for a Higher-order Imperative Language (2015)
- Foundational Property-Based Testing (2015)
- An Analysis of Patch Plausibility and Correctness for Generate-and-validate Patch Generation Systems (2015)
- SibylFS: Formal Specification and Oracle-based Testing for POSIX and Real-world File Systems (2015)
- Autosubst: Reasoning with de Bruijn terms and parallel substitutions (2015)
- Mechanized Verification of Fine-grained Concurrent Programs (2015)
- Gradual Certified Programming in Coq (2015)
- An experimental library of formalized Mathematics based on the univalent foundations (2015)
- Interactive Theorem Proving from the perspective of Isabelle/Isar (2015)
- Verdi: A Framework for Implementing and Formally Verifying Distributed Systems (2015)
- Mtac: A monad for typed tactic programming in Coq (2015)
- Automatic and Transparent Transfer of Theorems along Isomorphisms in the Coq Proof Assistant (2015)
- Seminal Papers in Software Engineering: The Carnegie Mellon Canonical Collection (2015)
- Why does Coq have Prop? (2015)
- Gerwin’s Style Guide for Isabelle/HOL (2015)
- Using Coq’s evaluation mechanisms in anger (2015)
- Conditional Lemma Discovery and Recursion Induction in Hipster (2015)
- Operating Systems: Principles and Practice (2014)
- Program Logics for Certified Compilers (2014)
- A Usability Evaluation of Interactive Theorem Provers Using Focus Groups (2014)
- 40 Years of Formal Methods (2014)
- Combining proofs and programs in a dependently typed language (2014)
- Matching concepts across HOL libraries (2014)
- History of Interactive Theorem Proving (2014)
- Recycling Proof Patterns in Coq: Case Studies (2014)
- Hipster: Integrating Theory Exploration in a Proof Assistant (2014)
- Learning-Assisted Automated Reasoning with Flyspeck (2014)
- Proof Engineering Considered Essential (2014)
- Comprehensive Formal Verification of an OS Microkernel (2014)
- Tool Demonstration: An IDE for Programming and Proving in Idris (2014)
- Lem: Reusable Engineering of Real-world Semantics (2014)
- How Programming Languages Will Co-evolve with Software Engineering: A Bright Decade Ahead (2014)
- Concrete Semantics: With Isabelle/HOL (2014)
- Automating Formal Proofs for Reactive Systems (2014)
- Productivity for Proof Engineering (2014)
- Impredicative Concurrent Abstract Predicates (2014)
- Asynchronous User Interaction and Tool Integration in Isabelle/PIDE (2014)
- Ornaments in Practice (2014)
- Formal Specification and Verification of CRDTs (2014)
- Communicating State Transition Systems for Fine-Grained Concurrent Resources (2014)
- Universe Polymorphism in Coq (2014)
- Compositional CompCert (2014)
- Towards a Formally Verified Proof Assistant (2014)
- The Mechanization of Standard ML (2014)
- Foundations of Mathematics from the Perspective of Computer Verification (2013)
- Pervasive Parallelism in Highly-Trustable Interactive Theorem Proving Systems (2013)
- Idris, a general-purpose dependently typed programming language: Design and implementation (2013)
- Certified Programming with Dependent Types: A Pragmatic Introduction to the Coq Proof Assistant (2013)
- The Bedrock Structured Programming System: Combining Generative Metaprogramming and Hoare Logic in an Extensible Program Verifier (2013)
- Lightweight proof by reflection using a posteriori simulation of effectful computation (2013)
- Refinements for Free! (2013)
- Formal Verification of Information Flow Security for a Simple ARM-based Separation Kernel (2013)
- Modular Monadic Meta-theory (2013)
- Meta-theory à La Carte (2013)
- Polar: A Framework for Proof Refactoring (2013)
- From L3 to seL4 What Have We Learnt in 20 Years of L4 Microkernels? (2013)
- A fully verified executable LTL model checker (2013)
- A Machine-Checked Proof of the Odd Order Theorem (2013)
- Proof-Pattern Recognition and Lemma Discovery in ACL2 (2013)
- Lifting and Transfer: A Modular Design for Quotients in Isabelle/HOL (2013)
- Subjective auxiliary state for coarse-grained concurrency (2013)
- Canonical Structures for the Working Coq User (2013)
- Formal Specifications Better Than Function Points for Code Sizing (2013)
- Verifying higher-order programs with the Dijkstra monad (2013)
- PIDE as front-end technology for Coq (2013)
- Shared-Memory Multiprocessing for Interactive Theorem Proving (2013)
- MaSh: Machine Learning for Sledgehammer (2013)
- Data Refinement in Isabelle/HOL (2013)
- Pragmatic Quotient Types in Coq (2013)
- ML4PG in Computer Algebra Verification (2013)
- Automatic Data Refinement (2013)
- Large-Scale Formal Verification in Practice: A Process Perspective (2012)
- A list-machine benchmark for mechanized metatheory (2012)
- Challenges and Experiences in Managing Large-Scale Proofs (2012)
- Deciding Kleene Algebras in Coq (2012)
- The New Quickcheck for Isabelle: Random, Exhaustive and Symbolic Testing Under One Roof (2012)
- A weak HOAS approach to the POPLMark Challenge (2012)
- Operational Semantics Using the Partiality Monad (2012)
- Verification games: Making verification fun (2012)
- Hybrid: A Definitional Two-Level Approach to Reasoning with Higher-Order Abstract Syntax (2012)
- Establishing Browser Security Guarantees Through Formal Shim Verification (2012)
- Machine Learning in Proof General: Interfacing Interfaces (2012)
- Overview and Evaluation of Premise Selection Techniques for Large Theory Mathematics (2012)
- RockSalt: Better, Faster, Stronger SFI for the x86 (2012)
- Proof-producing Synthesis of ML from Higher-order Logic (2012)
- Three years of experience with Sledgehammer, a practical link between automatic and interactive theorem provers (2012)
- Engineering proof by reflection in Agda (2012)
- Pollack-inconsistency (2012)
- Simulation Modeling of A Large Scale Formal Verification Process (2012)
- Formalizing the LLVM intermediate representation for verified program transformations (2012)
- The CompCert Memory Model, Version 2 (2012)
- Isabelle/jEdit – A Prover IDE within the PIDE Framework (2012)
- A Language of Patterns for Subterm Selection (2012)
- agda-tactics: Semiring (2012)
- Tactics for Reasoning Modulo AC in Coq (2011)
- Introduction to Reliable and Secure Distributed Programming (2011)
- GALILEO: A system for automating ontology evolution (2011)
- The Locally Nameless Representation (2011)
- Mostly-automated verification of low-level programs in computational separation logic (2011)
- Engineering a compiler (2011)
- Product Lines of Theorems (2011)
- On the Bright Side of Type Classes: Instance Arguments in Agda (2011)
- Assertion level proofplanning with compiled strategies (2011)
- Towards Formally Verified Optimizing Compilation in Flight Control Software (2011)
- Generic Proof Tools and Finite Group Theory (2011)
- How to Make Ad Hoc Proof Automation Less Ad Hoc (2011)
- The Kepler Conjecture: The Hales-Ferguson Proof (2011)
- A Graph-Based Implementation for Mechanized Refinement Calculus of OO Programs (2011)
- Introduction to Bisimulation and Coinduction (2011)
- Type classes for mathematics in type theory (2011)
- Binders unbound (2011)
- Automatic Proof and Disproof in Isabelle/HOL (2011)
- Ornamental algebras, algebraic ornaments (2011)
- General Bindings and Alpha-Equivalence in Nominal Isabelle (2011)
- Efficient Verified Red-Black Trees (2011)
- Modules Matter Most (2011)
- Sets in Coq, Coq in Sets (2010)
- Nitpick: A Counterexample Generator for Higher-order Logic Based on a Relational Model Finder (2010)
- Program Verification Through Characteristic Formulae (2010)
- A theory of termination via indirection (2010)
- An introduction to small scale reflection in Coq (2010)
- Code Generation via Higher-order Rewrite Systems (2010)
- Toward a Verified Relational Database Management System (2010)
- Structuring the Verification of Heap-manipulating Programs (2010)
- Ott: Effective tool support for the working semanticist (2010)
- VeriML: Typed Computation of Logical Terms Inside a Language with Effects (2010)
- Equations: A Dependent Pattern-Matching Compiler (2010)
- A Trustworthy Monadic Formalization of the ARMv7 Instruction Set Architecture (2010)
- Dafny: An Automatic Program Verifier for Functional Correctness (2010)
- Reasoning with Higher-Order Abstract Syntax and Contexts: A Comparison (2010)
- An abstract type for constructing tactics in Coq (2010)
- Merge of the newmem and newextcalls branches (2010)
- Lecture Notes on Proofs as Programs: Lecture 2 (2010)
- Theorem proving support in programming language semantics (2009)
- Effective interactive proofs for higher-order imperative programs (2009)
- Local rely-guarantee reasoning (2009)
- Packaging Mathematical Structures (2009)
- Proof assistants: History, ideas and future (2009)
- Computing with Classical Real Numbers (2009)
- seL4: Formal Verification of an OS Kernel (2009)
- Improving Coq propositional reasoning using a lazy CNF conversion scheme (2009)
- Practical tactics for separation logic (2009)
- System description: Delphin-a functional programming language for deductive systems (2009)
- A Hoare Logic for the State Monad (2009)
- Masterminds of Programming: Conversations with the Creators of Major Programming Languages (2009)
- Statistics on digital libraries of mathematics (2009)
- Local Theory Specifications in Isabelle/Isar (2009)
- SASyLF: An Educational Proof Assistant for Language Theory (2008)
- Engineering Formal Metatheory (2008)
- Proof synthesis and reflection for linear arithmetic (2008)
- Parametric Higher-order Abstract Syntax for Mechanized Semantics (2008)
- A Declarative Language for the Coq Proof Assistant (2008)
- Formal proof—the four-color theorem (2008)
- Decision Procedures: An Algorithmic Point of View (2008)
- Coq Extraction, an Overview (2008)
- Ynot: Dependent Types for Imperative Programs (2008)
- Contextual modal type theory (2008)
- A sound semantics for OCaml Light (2008)
- Programming with proofs and explicit contexts (2008)
- First-Class Type Classes (2008)
- Data Types à La Carte (2008)
- Nominal Techniques in Isabelle/HOL (2008)
- A Special Issue on Formal Proof (Notices of the AMS 55(11)) (2008)
- User interaction with the Matita proof assistant (2007)
- Proofs of Correctness in Mathematics and Industry (2007)
- A Head-to-Head Comparison of de Bruijn Indices and Names (2007)
- The Calculus of Computation: Decision Procedures with Applications to Verification (2007)
- Combining de Bruijn Indices and Higher-Order Abstract Syntax in Coq (2007)
- Modular Type Classes (2007)
- The Jordan curve theorem, formally and informally (2007)
- Mechanizing metatheory in a logical framework (2007)
- Web interfaces for proof assistants (2007)
- Resources, concurrency, and local reasoning (2007)
- Isabelle/Isar-a generic framework for human-readable proof documents (2007)
- Constructive Type Classes in Isabelle (2007)
- A locally nameless solution to the POPLmark challenge (2007)
- Nominal Reasoning Techniques in Coq (2006)
- Interpretation of Locales in Isabelle: Theories and Proof Contexts (2006)
- Engineering with Logic: HOL Specification and Symbolic-evaluation Testing for TCP Implementations (2006)
- Theorema: Towards computer-aided mathematical theory exploration (2006)
- A Large-Scale Experiment in Executing Extracted Programs (2006)
- Formal certification of a compiler back-end or: programming a compiler with a proof assistant (2006)
- A Tool for Automated Theorem Proving in Agda (2006)
- Defining Functions on Equivalence Classes (2006)
- Lectures on the Curry-Howard isomorphism (2006)
- The Seventeen Provers of the World: Foreword by Dana S. Scott (Lecture Notes in Computer Science / Lecture Notes in Artificial Intelligence) (2006)
- Educational Pearl: Proof-directed debugging revisited for a first-order version (2006)
- Structured Induction Proofs in Isabelle/Isar (2006)
- Tactics for separation logic (2006)
- Mechanized Metatheory for the Masses: The POPLMark Challenge (2005)
- The challenge of computer mathematics (2005)
- Program extraction from normalization proofs (2005)
- General Recursion via Coinductive Types (2005)
- Predicativity (2005)
- Modular verification of concurrent assembly code with dynamic thread creation and termination (2005)
- Proving equalities in a commutative ring done right in Coq (2005)
- A Design Structure for Higher Order Quotients (2005)
- Essential Incompleteness of Arithmetic Verified by Coq (2005)
- “Rippling: Meta-Level Guidance for Mathematical Reasoning, “ by Alan Bundy, David Basin, Dieter Hutter, and Andrew Ireland, Cambridge University Press (2005)
- Extensionality in the Calculus of Constructions (2005)
- A content based mathematical search engine: Whelp (2004)
- Interactive Theorem Proving and Program Development: Coq’Art: The Calculus of Inductive Constructions. Texts in Theoretical Computer Science An EATCS Series (2004)
- Proof Reuse with Extended Inductive Types (2004)
- Functors for Proofs and Programs (2004)
- Aspect-oriented Software Development (2004)
- Theorem Reuse by Proof Term Transformation (2004)
- Programmation fonctionnelle certifiee - L’extraction de programmes dans l’assistant Coq (2004)
- A decision procedure for geometry in Coq (2004)
- The Isabelle/Isar reference manual (2004)
- Verification of safety properties for concurrent assembly code (2004)
- A Trustworthy Proof Checker (2003)
- Program Extraction from Large Proof Developments (2003)
- IsaPlanner: A Prototype Proof Planner in Isabelle (2003)
- First-order proof tactics in higher-order logic theorem provers (2003)
- Proof engineering in the large: formal verification of Pentium 4 floating-point divider (2003)
- Proving Pointer Programs in Higher-Order Logic (2003)
- Implementing Modules in the Coq System (2003)
- A New Extraction for Coq (2003)
- interface GTK2 experimentale (2003)
- MMode, a Mizar mode for the proof assistant Coq (2003)
- Combining Higher Order Abstract Syntax with Tactical Theorem Proving and (Co)Induction (2002)
- Autarkic Computations in Formal Proofs (2002)
- Efficient reasoning about executable specifications in Coq (2002)
- Executing Higher Order Logic (2002)
- A Constructive Algebraic Hierarchy in Coq (2002)
- Changing Data Structures in Type Theory: A Study of Natural Numbers (2002)
- Types and programming languages (2002)
- A Constructive Proof of the Fundamental Theorem of Algebra without Using the Rationals (2002)
- Subtyping dependent types (2001)
- Type Isomorphisms and Proof Reuse in Dependent Type Theory (2001)
- An implementation of LF with coercive subtyping & universes (2001)
- Featherweight Java: A minimal core calculus for Java and GJ (2001)
- Local Reasoning about Programs that Alter Data Structures (2001)
- Mizar light for HOL Light (2001)
- Refinement Calculus for Logic Programming in Isabelle/HOL (2001)
- An analysis of errors in interactive proof attempts (2000)
- Proof General: A Generic Tool for Proof Development (2000)
- Theory exploration with Theorema (2000)
- A Tactic Language for the System Coq (2000)
- From LCF to HOL: A Short History (2000)
- Fundamental Concepts in Programming Languages (2000)
- Proof-directed Debugging (1999)
- Integrating Gandalf and HOL (1999)
- Coercive subtyping (1999)
- A generic tableau prover and its integration with Isabelle (1999)
- Conception et rÉalisation d’outils d’aide au dÉveloppement de grosses thÉories dans les systèmes de preuves interactifs (1999)
- Outils Génériques de Modélisation et de Démonstration pour la Formalisation des Mathématiques en Théorie des Types: application à la Théorie des Catégories (1999)
- Inductive Datatypes in HOL — Lessons Learned in Formal-Logic Engineering (1999)
- Locales A Sectioning Concept for Isabelle (1999)
- Desirable features of educational theorem provers - a cognitive dimensions viewpoint (1999)
- Interactive Theorem Proving: An Empirical Study of User Activity (1998)
- A Generic Approach to Building User Interfaces for Theorem Provers (1998)
- Data refinement: model-oriented proof methods and their comparison (1998)
- Proof analysis, generalization and reuse (1998)
- How to Believe a Machine-Checked Proof (1998)
- Using reflection to build efficient and certified decision procedures (1997)
- Integration of automated and interactive theorem proving in ILF (1997)
- The Definition of Standard ML (Revised) (1997)
- Mechanizing Coinduction and Corecursion in Higher-order Logic (1997)
- Typing Algorithm in Type Theory with Inheritance (1997)
- Principia mathematica to *56 (1997)
- Higher order quotients and their implementation in Isabelle HOL (1997)
- Coq in Coq (1997)
- A two-level approach towards lean proof-checking (1996)
- ANSI Common Lisp (1996)
- Productive Use of Failure in Inductive Proof (1996)
- Inverting inductively defined relations in LEGO (1996)
- A mizar mode for HOL (1996)
- Implicit coercions in type systems (1995)
- A Logical Framework for Software Proof Reuse (1995)
- The Coq Proof assistant, Reference Manual, Version (1995)
- Automating inversion of inductive predicates in Coq (1995)
- Reflection in logic, functional and object-oriented programming: A Short Comparative Study (1995)
- On extensibility of proof checkers (1995)
- A new interface for HOL — Ideas, issues and implementation (1995)
- Codifying guarded definitions with recursive schemes (1995)
- Tools for proof by analogy (1995)
- Metatheory and Reflection in Theorem Proving: A Survey and Critique (1995)
- Checking Landau’s Grundlagen in the Automath System: Parts of Chapters 0, 1 and 2 (Introduction, Prepration, Translation) (1994)
- Proof by pointing (1994)
- A mechanically proof-checked encyclopedia of mathematics: Should we build one? Can we? (1994)
- First-order automation for higher-order-logic theorem proving (1994)
- An Extension of System F with Subtyping (1994)
- A Survey of the Project Automath (1994)
- Generalization and reuse of tactic proofs (1994)
- Isabelle: A Generic Theorem Prover (1994)
- Program Refinement by Theorem Prover (1994)
- Infinite objects in type theory (1994)
- FORWARD AND BACKWARD SIMULATIONS PART I: UNTIMED SYSTEMS (replaces TM-486) (1994)
- A mechanisation of name-carrying syntax up to alpha-conversion (1994)
- Formalization of Classical Mathematics in Automath (1994)
- AC unification in HOL90 (1994)
- A user’s guide to ALF (1994)
- Introduction to HOL: A Theorem Proving Environment for Higher Order Logic (1993)
- A Framework for Defining Logics (1993)
- Inductive definitions in the system Coq rules and properties (1993)
- Synthesis of ML programs in the system Coq (1993)
- Isabelle: The Next 700 Theorem Provers (1993)
- A type-theoretical alternative to ISWIM, CUCH, OWHY (1993)
- First Draft of a Report on the EDVAC (1993)
- Experience with Embedding Hardware Description Languages in HOL (1992)
- Generalization at higher types (1992)
- Refactoring: A program restructuring aid in designing object-oriented application frameworks (1992)
- Refinement Diagrams (1991)
- Integrating a first-order automatic prover in the HOL environment (1991)
- The Omega Test: A Fast and Practical Integer Programming Algorithm for Dependence Analysis (1991)
- The semantics of reflected proof (1990)
- The fundamental properties of natural numbers (1990)
- Inductively defined types (1990)
- Proof transformations for equational theories (1990)
- Inductively defined types in the Calculus of Constructions (1990)
- Term rewriting and beyond-theorem proving in Isabelle (1989)
- Extracting F-omega’s Programs from Proofs in the Calculus of Constructions (1989)
- Extraction de programmes dans le Calcul des Constructions (1989)
- How to Make Ad-hoc Polymorphism Less Ad Hoc (1989)
- A calculus of refinements for program derivations (1988)
- The Use of Explicit Plans to Guide Inductive Proofs (1988)
- The calculus of constructions (1988)
- Computational metatheory in Nuprl (1988)
- A preliminary users manual for Isabelle (1988)
- A Framework for Defining Logics (1987)
- Implementing Mathematics with the Nuprl Proof Development System (1986)
- Using Dependent Types to Express Modular Structure (1986)
- Constructive Analysis (1985)
- Constructions: A higher order proof system for mechanizing mathematics (1985)
- Computer Assisted Reasoning with Mizar (1985)
- Intuitionistic Type Theory (1984)
- Deriving structural induction in LCF (1984)
- The Equivalence of Two Semantic Definitions: A Case Study in LCF (1983)
- Specification and Design of (Parallel) Programs (1983)
- Tactics and tacticals in Cambridge LCF (1983)
- Constructive Mathematics and Computer Programming (1982)
- AVID: A system for the interactive development of verifiably correct programs (1981)
- Design and Verification of Secure Systems (1981)
- The formulae-as-types notion of construction (1980)
- A Logic for Correct Program Development (1979)
- Edinburgh LCF: A Mechanised Logic of Computation (1979)
- Can Programming Be Liberated from the von Neumann Style?: A Functional Style and Its Algebra of Programs (1978)
- A Metalanguage for Interactive Proof in LCF (1978)
- Social Processes and Proofs of Theorems and Programs (1977)
- Guarded Commands, Nondeterminacy and Formal Derivation of Programs (1975)
- Axioms and theorems for integers, lists and finite sets in LCF (1973)
- Lambda calculus notation with nameless dummies, a tool for automatic formula manipulation, with application to the Church-Rosser theorem (1972)
- Implementation and Applications of Scott’s Logic for Computable Functions (1972)
- Proving compiler correctness in a mechanized logic (1972)
- Proof of a Program: FIND (1971)
- Program Development by Stepwise Refinement (1971)
- The mathematical language Automath, its usage, and some of its extensions (1970)
- Constructive validity (1970)
- Proving Properties of Programs by Structural Induction (1969)
- An Axiomatic Basis for Computer Programming (1969)
- Assigning Meanings to Programs (1967)
- A Machine-Oriented Logic Based on the Resolution Principle (1965)
- A Basis for a Mathematical Theory of Computation (1963)
- Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I (1960)
- Intuitionism. An introduction (1956)
- Checking a large routine (1949)
- The calculi of lambda-conversion (1941)
- A formulation of the simple theory of types (1940)
- An Unsolvable Problem of Elementary Number Theory (1936)
- Der Wahrheitsbegriff in den Formalisierten Sprachen (1936)
- Functionality in Combinatory Logic (1934)
- Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I (1931)
- Die Vollständigkeit der Axiome des logischen Funktionenkalküls (1930)
- Introduction to Mathematical Philosophy (1918)
- On Some Difficulties in the Theory of Transfinite Numbers and Order Types (1906)
- Grundgesetze der Arithmetik (1893)
- The Art of Discovery (1685)
- Verified cryptography for Firefox 57