A Survey on Theorem Provers in Formal Methods
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Experience Implementing a Performant Category-Theory Library in Coq
Experience Implementing a Performant Category-Theory Library in Coq Jason Gross, Adam Chlipala, and David I. Spivak Massachusetts Institute of Technology, Cambridge, MA, USA [email protected], [email protected], [email protected] Abstract. We describe our experience implementing a broad category- theory library in Coq. Category theory and computational performance are not usually mentioned in the same breath, but we have needed sub- stantial engineering effort to teach Coq to cope with large categorical constructions without slowing proof script processing unacceptably. In this paper, we share the lessons we have learned about how to repre- sent very abstract mathematical objects and arguments in Coq and how future proof assistants might be designed to better support such rea- soning. One particular encoding trick to which we draw attention al- lows category-theoretic arguments involving duality to be internalized in Coq's logic with definitional equality. Ours may be the largest Coq development to date that uses the relatively new Coq version developed by homotopy type theorists, and we reflect on which new features were especially helpful. Keywords: Coq · category theory · homotopy type theory · duality · performance 1 Introduction Category theory [36] is a popular all-encompassing mathematical formalism that casts familiar mathematical ideas from many domains in terms of a few unifying concepts. A category can be described as a directed graph plus algebraic laws stating equivalences between paths through the graph. Because of this spar- tan philosophical grounding, category theory is sometimes referred to in good humor as \formal abstract nonsense." Certainly the popular perception of cat- egory theory is quite far from pragmatic issues of implementation. -
Graph-Based Reasoning in Collaborative Knowledge Management for Industrial Maintenance Bernard Kamsu-Foguem, Daniel Noyes
Graph-based reasoning in collaborative knowledge management for industrial maintenance Bernard Kamsu-Foguem, Daniel Noyes To cite this version: Bernard Kamsu-Foguem, Daniel Noyes. Graph-based reasoning in collaborative knowledge manage- ment for industrial maintenance. Computers in Industry, Elsevier, 2013, Vol. 64, pp. 998-1013. 10.1016/j.compind.2013.06.013. hal-00881052 HAL Id: hal-00881052 https://hal.archives-ouvertes.fr/hal-00881052 Submitted on 7 Nov 2013 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. Open Archive Toulouse Archive Ouverte (OATAO) OATAO is an open access repository that collects the work of Toulouse researchers and makes it freely available over the web where possible. This is an author-deposited version published in: http://oatao.univ-toulouse.fr/ Eprints ID: 9587 To link to this article: doi.org/10.1016/j.compind.2013.06.013 http://www.sciencedirect.com/science/article/pii/S0166361513001279 To cite this version: Kamsu Foguem, Bernard and Noyes, Daniel Graph-based reasoning in collaborative knowledge management for industrial -
Verification and Formal Methods
Verification and Formal Methods: Practice and Experience J. C. P. Woodcock University of York, UK and P. G. Larsen Engineering College of Aarhus, Denmark and J. C. Bicarregui STFC Rutherford Appleton Laboratory, UK and J. S. Fitzgerald Newcastle University, UK We describe the state of the art in the industrial use of formal verification technology. We report on a new survey of the use of formal methods in industry, and compare it with the most significant surveys carried out over the last 20 years. We review the literature on formal methods, and present a series of industrial projects undetaken over the last two decades. We draw some observations from these surveys and records of experience. Based on this, we discuss the issues surrounding the industrial adoption of formal methods. Finally, we look to the future and describe the development of a Verified Software Repository, part of the worldwide Verified Software Initiative. We introduce the initial projects being used to populate the repository, and describe the challenges they address. Categories and Subject Descriptors: D.2.4 [Software/Program Verification]: Assertion check- ers, Class invariants, Correctness proofs, Formal methods, Model checking, Programming by contract; F.3.1 [Specifying and Verifying and Reasoning about Programs]: Assertions, Invariants, Logics of programs, Mechanical verification, Pre- and post-conditions, Specification techniques; F.4.1 [Mathematical Logic]: Mechanical theorem proving; I.2.2 [Automatic Pro- gramming]: Program verification. Additional Key Words and Phrases: Experimental software engineering, formal methods surveys, Grand Challenges, Verified Software Initiative, Verified Software Repository. 1. INTRODUCTION Formal verification, for both hardware and software, has been a topic of great sig- nificance for at least forty years. -
Specifying Verified X86 Software from Scratch
Specifying verified x86 software from scratch Mario Carneiro Carnegie Mellon University, Pittsburgh, PA, USA [email protected] Abstract We present a simple framework for specifying and proving facts about the input/output behavior of ELF binary files on the x86-64 architecture. A strong emphasis has been placed on simplicity at all levels: the specification says only what it needs to about the target executable, the specification is performed inside a simple logic (equivalent to first-order Peano Arithmetic), and the verification language and proof checker are custom-designed to have only what is necessary to perform efficient general purpose verification. This forms a part of the Metamath Zero project, to build a minimal verifier that is capable of verifying its own binary. In this paper, we will present the specification of the dynamic semantics of x86 machine code, together with enough information about Linux system calls to perform simple IO. 2012 ACM Subject Classification Theory of computation → Program verification; Theory of com- putation → Abstract machines Keywords and phrases x86-64, ISA specification, Metamath Zero, self-verification Digital Object Identifier 10.4230/LIPIcs.ITP.2019.19 Supplement Material The formalization is a part of the Metamath Zero project at https://github. com/digama0/mm0. Funding This material is based upon work supported by AFOSR grant FA9550-18-1-0120 and a grant from the Sloan Foundation. Acknowledgements I would like to thank my advisor Jeremy Avigad for his support and encourage- ment, and for his reviews of early drafts of this work. 1 Introduction The field of software verification is on the verge of a breakthrough. -
6.5 the Recursion Theorem
6.5. THE RECURSION THEOREM 417 6.5 The Recursion Theorem The recursion Theorem, due to Kleene, is a fundamental result in recursion theory. Theorem 6.5.1 (Recursion Theorem, Version 1 )Letϕ0,ϕ1,... be any ac- ceptable indexing of the partial recursive functions. For every total recursive function f, there is some n such that ϕn = ϕf(n). The recursion Theorem can be strengthened as follows. Theorem 6.5.2 (Recursion Theorem, Version 2 )Letϕ0,ϕ1,... be any ac- ceptable indexing of the partial recursive functions. There is a total recursive function h such that for all x ∈ N,ifϕx is total, then ϕϕx(h(x)) = ϕh(x). 418 CHAPTER 6. ELEMENTARY RECURSIVE FUNCTION THEORY A third version of the recursion Theorem is given below. Theorem 6.5.3 (Recursion Theorem, Version 3 ) For all n ≥ 1, there is a total recursive function h of n +1 arguments, such that for all x ∈ N,ifϕx is a total recursive function of n +1arguments, then ϕϕx(h(x,x1,...,xn),x1,...,xn) = ϕh(x,x1,...,xn), for all x1,...,xn ∈ N. As a first application of the recursion theorem, we can show that there is an index n such that ϕn is the constant function with output n. Loosely speaking, ϕn prints its own name. Let f be the recursive function such that f(x, y)=x for all x, y ∈ N. 6.5. THE RECURSION THEOREM 419 By the s-m-n Theorem, there is a recursive function g such that ϕg(x)(y)=f(x, y)=x for all x, y ∈ N. -
Formal Methods
SE 5302: Formal Methods Course Instructor: Parasara Sridhar Duggirala, Ph.D. Catalog Description. 3 credits. This course is designed to provide students with an introduction to formal methods as a framework for the specification, design, and verification of software-intensive embedded systems. Topics include automata theory, model checking, theorem proving, and system specification. Examples are driven by cyber-physical systems. The course is addressed to students in engineering who have had at least a year of software or embedded systems design experience. Pre- Requisites: SE 5100 or SE 5101 or SE 5102 and at least one year of software or embedded systems design experience. Course Delivery Method. The course will be offered online, asynchronously, in small recorded modules according to the course schedule and syllabus. Direct and live communication with the instructor will be available each week, according to the class schedule, for discussion, questions, examples, and quizzes. Attendance at live sessions is required, and you must notify the instructor in advance if you cannot attend. A social networking tool called Slack will be used to communicate with students and the instructor between live sessions. Course Objective. This course is designed to provide students with an introduction to formal methods as a framework for the specification, design, and verification of software- intensive embedded systems. Topics include automata theory, model checking, theorem proving, and system specification. Examples are driven by control systems and software systems. Anticipated Student Outcomes. By the end of the course, a student will be able to (1) Gain familiarity with current system design flows in industry used for embedded system design, implementation and verification. -
April 22 7.1 Recursion Theorem
CSE 431 Theory of Computation Spring 2014 Lecture 7: April 22 Lecturer: James R. Lee Scribe: Eric Lei Disclaimer: These notes have not been subjected to the usual scrutiny reserved for formal publications. They may be distributed outside this class only with the permission of the Instructor. An interesting question about Turing machines is whether they can reproduce themselves. A Turing machine cannot be be defined in terms of itself, but can it still somehow print its own source code? The answer to this question is yes, as we will see in the recursion theorem. Afterward we will see some applications of this result. 7.1 Recursion Theorem Our end goal is to have a Turing machine that prints its own source code and operates on it. Last lecture we proved the existence of a Turing machine called SELF that ignores its input and prints its source code. We construct a similar proof for the recursion theorem. We will also need the following lemma proved last lecture. ∗ ∗ Lemma 7.1 There exists a computable function q :Σ ! Σ such that q(w) = hPwi, where Pw is a Turing machine that prints w and hats. Theorem 7.2 (Recursion theorem) Let T be a Turing machine that computes a function t :Σ∗ × Σ∗ ! Σ∗. There exists a Turing machine R that computes a function r :Σ∗ ! Σ∗, where for every w, r(w) = t(hRi; w): The theorem says that for an arbitrary computable function t, there is a Turing machine R that computes t on hRi and some input. Proof: We construct a Turing Machine R in three parts, A, B, and T , where T is given by the statement of the theorem. -
The Metamathematics of Putnam's Model-Theoretic Arguments
The Metamathematics of Putnam's Model-Theoretic Arguments Tim Button Abstract. Putnam famously attempted to use model theory to draw metaphysical conclusions. His Skolemisation argument sought to show metaphysical realists that their favourite theories have countable models. His permutation argument sought to show that they have permuted mod- els. His constructivisation argument sought to show that any empirical evidence is compatible with the Axiom of Constructibility. Here, I exam- ine the metamathematics of all three model-theoretic arguments, and I argue against Bays (2001, 2007) that Putnam is largely immune to meta- mathematical challenges. Copyright notice. This paper is due to appear in Erkenntnis. This is a pre-print, and may be subject to minor changes. The authoritative version should be obtained from Erkenntnis, once it has been published. Hilary Putnam famously attempted to use model theory to draw metaphys- ical conclusions. Specifically, he attacked metaphysical realism, a position characterised by the following credo: [T]he world consists of a fixed totality of mind-independent objects. (Putnam 1981, p. 49; cf. 1978, p. 125). Truth involves some sort of correspondence relation between words or thought-signs and external things and sets of things. (1981, p. 49; cf. 1989, p. 214) [W]hat is epistemically most justifiable to believe may nonetheless be false. (1980, p. 473; cf. 1978, p. 125) To sum up these claims, Putnam characterised metaphysical realism as an \externalist perspective" whose \favorite point of view is a God's Eye point of view" (1981, p. 49). Putnam sought to show that this externalist perspective is deeply untenable. To this end, he treated correspondence in terms of model-theoretic satisfaction. -
Experiments in Validating Formal Semantics for C
Experiments in validating formal semantics for C Sandrine Blazy ENSIIE and INRIA Rocquencourt [email protected] Abstract. This paper reports on the design of adequate on-machine formal semantics for a certified C compiler. This compiler is an optimiz- ing compiler, that targets critical embedded software. It is written and formally verified using the Coq proof assistant. The main structure of the compiler is very strongly conditioned by the choice of the languages of the compiler, and also by the kind of semantics of these languages. 1 Introduction C is still widely used in industry, especially for developing embedded software. The main reason is the control by the C programmer of all the resources that are required for program execution (e.g. memory layout, memory allocation) and that affect performance. C programs can therefore be very efficient, but the price to pay is a programming effort. For instance, using C pointer arithmetic may be required in order to compute the address of a memory cell. However, a consequence of this freedom given to the C programmer is the presence of run-time errors such as buffer overflows and dangling pointers. Such errors may be difficult to detect in programs, because of C type casts and more generally because the C type system is unsafe. Many static analysis tools attempt to detect such errors in order to ensure safety properties that may be ensured by more recent languages such as Java. For instance, CCured is a program transformation system that adds memory safety guarantees to C programs by verifying statically that memory errors cannot oc- cur and by inserting run-time checks where static verification is insufficient [1]. -
The Common HOL Platform
The Common HOL Platform Mark Adams Proof Technologies Ltd, UK Radboud University, Nijmegen, The Netherlands The Common HOL project aims to facilitate porting source code and proofs between members of the HOL family of theorem provers. At the heart of the project is the Common HOL Platform, which defines a standard HOL theory and API that aims to be compatible with all HOL systems. So far, HOL Light and hol90 have been adapted for conformance, and HOL Zero was originally developed to conform. In this paper we provide motivation for a platform, give an overview of the Common HOL Platform’s theory and API components, and show how to adapt legacy systems. We also report on the platform’s successful application in the hand-translation of a few thousand lines of source code from HOL Light to HOL Zero. 1 Introduction The HOL family of theorem provers started in the 1980s with HOL88 [5], and has since grown to include many systems, most prominently HOL4 [16], HOL Light [8], ProofPower HOL [3] and Is- abelle/HOL [12]. These four main systems have developed their own advanced proof facilities and extensive theory libraries, and have been successfully employed in major projects in the verification of critical hardware and software [1, 11] and the formalisation of mathematics [7]. It would clearly be of benefit if these systems could “talk” to each other, specifically if theory, proofs and source code could be exchanged in a relatively seamless manner. This would reduce the considerable duplication of effort otherwise required for one system to benefit from the major projects and advanced capabilities developed on another. -
Introduction to Model Checking and Temporal Logic¹
Formal Verification Lecture 1: Introduction to Model Checking and Temporal Logic¹ Jacques Fleuriot [email protected] ¹Acknowledgement: Adapted from original material by Paul Jackson, including some additions by Bob Atkey. I Describe formally a specification that we desire the model to satisfy I Check the model satisfies the specification I theorem proving (usually interactive but not necessarily) I Model checking Formal Verification (in a nutshell) I Create a formal model of some system of interest I Hardware I Communication protocol I Software, esp. concurrent software I Check the model satisfies the specification I theorem proving (usually interactive but not necessarily) I Model checking Formal Verification (in a nutshell) I Create a formal model of some system of interest I Hardware I Communication protocol I Software, esp. concurrent software I Describe formally a specification that we desire the model to satisfy Formal Verification (in a nutshell) I Create a formal model of some system of interest I Hardware I Communication protocol I Software, esp. concurrent software I Describe formally a specification that we desire the model to satisfy I Check the model satisfies the specification I theorem proving (usually interactive but not necessarily) I Model checking Introduction to Model Checking I Specifications as Formulas, Programs as Models I Programs are abstracted as Finite State Machines I Formulas are in Temporal Logic 1. For a fixed ϕ, is M j= ϕ true for all M? I Validity of ϕ I This can be done via proof in a theorem prover e.g. Isabelle. 2. For a fixed ϕ, is M j= ϕ true for some M? I Satisfiability 3. -
Next Generation Logic Programming Systems Gopal Gupta
Next Generation Logic Programming Systems Gopal Gupta In the last 30 years logic programming (LP), with Prolog as the most representative logic programming language, has emerged as a powerful paradigm for intelligent reasoning and deductive problem solving. In the last 15 years several powerful and highly successful extensions of logic programming have been proposed and researched. These include constraint logic programming (CLP), tabled logic programming, inductive logic programming, concurrent/parallel logic programming, Andorra Prolog and adaptations for non- monotonic reasoning such as answer set programming. These extensions have led to very powerful applications in reasoning, for example, CLP has been used in industry for intelligently and efficiently solving large scale scheduling and resource allocation problems, tabled logic programming has been used for intelligently solving large verification problems as well as non- monotonic reasoning problems, inductive logic programming for new drug discoveries, and answer set programming for practical planning problems, etc. However, all these powerful extensions of logic programming have been developed by extending standard logic programming (Prolog) systems, and each one has been developed in isolation from others. While each extension has resulted in very powerful applications in reasoning, considerably more powerful applications will become possible if all these extensions were combined into a single system. This power will come about due to search space being dramatically pruned, reducing the time taken to find a solution given a reasoning problem coded as a logic program. Given the current state-of-the-art, even two extensions are not available together in a single system. Realizing multiple or all extensions in a single framework has been rendered difficult by the enormous complexity of implementing reasoning systems in general and logic programming systems in particular.