Reference. QEDCartographer: Automating Formal Verification Using Reward-Free Reinforcement Learning
Cite
Cites 96 works (6 here)
With notes (6)
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.
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.
Adapting proof automation to adapt proofs ringer-2018-adapting
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.
External (90)
- Automated Program Repair, What Is It Good For? Not Absolutely Nothing! (2024)
- Can Large Language Models Transform Natural Language Intent into Formal Method Postconditions? (2024)
- Graph2Tac: Learning hierarchical representations of math concepts in theorem proving (2024)
- Seldonian Toolkit: Building Software with Safe and Fair Machine Learning (2023)
- Draft, sketch, and prove: Guiding formal theorem provers with informal proofs (2023)
- Better Automatic Program Repair by Using Bug Reports and Tests Together (2023)
- An in-context learning agent for formal theorem-proving (2023)
- LeanDojo: Theorem proving with retrieval-augmented language models (2023)
- The Sledgehammer: Let automatic theorem provers write your Isabelle scripts! (2023)
- Diversity-driven automated formal verification (2022)
- Fairness guarantees under demographic shift (2022)
- Thor: Wielding hammers to integrate language models and automated theorem provers (2022)
- Hypertree proof search for neural theorem proving (2022)
- Memorizing Transformers (2022)
- The cost of poor software quality in the US: A 2022 report (2022)
- TacticZero: Learning to prove theorems from scratch with deep reinforcement learning (2021)
- Program synthesis guided reinforcement learning for partially observed environments (2021)
- A syntax-guided edit decoder for neural program repair (2021)
- Towards Finding Longer Proofs (2021)
- TacTok: semantics-aware proof synthesis (2020)
- Performance improvements via formallyverified cryptography in Firefox (2020)
- Causal testing: understanding defects' root causes (2020)
- The Tactician: A seamless, interactive tactic learner and prover for Coq (2020)
- Quality of Automated Program Repair on Real-World Defects (2020)
- Graph Representations for Higher-Order Logic and Theorem Proving (2020)
- Generative language modeling for automated theorem proving (2020)
- Generating correctness proofs with neural networks (2020)
- Programming language foundations in Agda (2020)
- C2S: translating natural language comments to formal program specifications (2020)
- Prolog Technology Reinforcement Learning Prover: (System Description) (2020)
- SOSRepair: Expressive Semantic Search for Real-World Program Repair (2019)
- Optuna: A Next-generation Hyperparameter Optimization Framework (2019)
- HOList: An environment for machine learning of higher order logic theorem proving (2019)
- Learning to reason in large theories without imitation (2019)
- Simple High-Level Code for Cryptographic Arithmetic - With Proofs, Without Compromises (2019)
- Automated program repair (2019)
- TBar: revisiting template-based automated program repair (2019)
- Offline contextual bandits with high probability fairness guarantees (2019)
- Automatically Generating Precise Oracles from Structured Natural Language Specifications (2019)
- Preventing undesirable behavior of intelligent machines (2019)
- Learning to prove theorems via interacting with proof assistants (2019)
- Software fairness (2018)
- Hammer for Coq: Automation for Dependent Type Theory (2018)
- TacticToe: Learning to Reason with HOL4 Tactics (2018)
- Proving confidentiality in a file system using DISKSEC (2018)
- Shaping program repair space with existing patches and similar code (2018)
- Reinforcement learning of theorem proving (2018)
- FairSquare: probabilistic verification of program fairness (2017)
- ICoq: Regression proof selection for large-scale verification projects (2017)
- Fairness testing: testing software for discrimination (2017)
- HolStep: A machine learning dataset for higher-order logic theorem proving (2017)
- Generating good generators for inductive relations (2017)
- The Debugging Mindset: Understanding the psychology of learning strategies leads to effective problem-solving skills. (2017)
- Curiosity-Driven Exploration by Self-Supervised Prediction (2017)
- Programming and proving with distributed protocols (2017)
- The Coq Development Team (2017)
- A Type System for Privacy Properties (2017)
- Tortoise: Interactive system configuration repair (2017)
- Automatic generation of oracles for exceptional behaviors (2016)
- CertiKOS: An extensible architecture for building certified concurrent OS kernels (2016)
- Dependent types and multi-monadic effects in F* (2016)
- Liquid Haskell: Haskell as a theorem prover (2016)
- Preventing data errors with continuous testing (2015)
- Massivelyparallel methods for deep reinforcement learning (2015)
- Is the cure worse than the disease? overfitting in automated program repair (2015)
- Verdi: a framework for implementing and formally verifying distributed systems (2015)
- Industrial use of compcert on a safety-critical software product (2014)
- Machine-verified network controllers (2013)
- Data debugging with continuous testing (2013)
- Establishing browser security guarantees through formal shim verification (2012)
- RockSalt: better, faster, stronger SFI for the x86 (2012)
- Learning from demonstration (2012)
- Using the GNU Compiler Collection (2012)
- Automatic Proof and Disproof in Isabelle/HOL (2011)
- Speculative analysis: exploring future development states of software (2010)
- Dafny: An Automatic Program Verifier for Functional Correctness (2010)
- Introduction to Software Testing (2008)
- A Brief Overview of HOL4 (2008)
- Formal certification of a compiler back-end or: programming a compiler with a proof assistant (2006)
- TPS: A hybrid automatic-interactive system for developing proofs (2005)
- LLVM: a compilation framework for lifelong program analysis & transformation (2004)
- Isabelle/HOL: A proof assistant for higher-order logic (2002)
- Simplifying and isolating failure-inducing input (2002)
- Policy invariance under reward transformations: Theory and application to reward shaping (1999)
- A Science of Reasoning (Extended Abstract) (1998)
- Learning to drive a bicycle using reinforcement learning and shaping (1998)
- HOL Light: A tutorial introduction (1996)
- The OYSTER-CLAM system (1990)
- Computer assisted reasoning with MIZAR (1985)
- LISA: Language models of ISAbelle proofs