Types in Logic, Mathematics, and Programming from the Handbook of Proof Theory

Total Page:16

File Type:pdf, Size:1020Kb

Types in Logic, Mathematics, and Programming from the Handbook of Proof Theory CHAPTER X Types in Logic, Mathematics and Programming Robert L. Constable Computer Science Department, Cornell University Ithaca, New York 1~853, USA Contents 1. Introduction ..................................... 684 2. Typed logic ..................................... 692 3. Type theory ..................................... 726 4. Typed programming languages ........................... 754 5. Conclusion ...................................... 766 6. Appendix ...................................... 768 References ........................................ 773 HANDBOOK OF PROOF THEORY Edited by S. R. Buss 1998 Elsevier Science B.V. All rights reserved 684 R. Constable 1. Introduction Proof theory and computer science are jointly engaged in a remarkable enter- prise. Together they provide the practical means to formalize vast amounts of mathematical knowledge. They have created the subject of automated reasoning and a digital computer based proof technology; these enable a diverse community of mathematicians, computer scientists, and educators to build a new artifact a globally distributed digital library of formalized mathematics. I think that this artifact signals the emergence of a new branch of mathematics, perhaps to be called Formal Mathematics. The theorems of this mathematics are completely formal and are processed digitally. They can be displayed as beautifully and legibly as journal quality mathematical text. At the heart of this library are completely formal proofs created with computer assistance. Their correctness is based on the axioms and rules of various foundational theories; this formal accounting of correctness supports the highest known standards of rigor and truth. The need to formally relate results in different foundational theories opens a new topic in proof theory and foundations of mathematics. Formal proofs of interesting theorems in current foundational theories are very large rigid objects. Creating them requires the speed and memory capacities of modern computer hardware and the expressiveness of modern software. Programs called theorem provers fill in tedious detail; they recognize many kinds of "obvious inference," and they automatically find long chains of inferences and even complete subproofs or proofs. The study of these theorem provers and the symbolic algorithms that make them work is part of the subject of automated reasoning. This science and the proof technology built on it are advancing all the time, and the new branch of mathematics that they enable will have its own standards, methods, surprises and triumphs. This article is about the potent mixture of proof theory and computer science behind automated reasoning and proof technology. The emphasis is on proof theory topics while stressing connections to computer science. Computer science is concerned with automating computation. Doing this well has made it possible to formalize real proofs. Computing well requires fast and robust hardware as well as expressive high level programming languages. High level lan- guages are partially characterized by their type systems; i.e., the organization of data types expressible in the language. The evolution of these languages has led to type systems that resemble mathematical type theories or even computationally effective set theories. (This development underlines the fact that high level programming is an aspect of computational mathematics.) This article will focus mainly on relating data types and mathematical types. The connection between data types and mathematical types in the case of formal mathematics and automated reasoning is even tighter than the general connection. Here is why. To preserve the highest standards of rigor in formalized mathematics built with computer assistance (the only way to produce it), it is necessary to reason Types 685 about programs and computations. This is what intuitionists and constructivists do at a very high level of abstraction. So as the programming languages for automating reasoning become more abstract and expressive, constructive mathematics becomes directly relevant to Formal Mathematics and to the "grand enterprise" of building it using theorem provers. We will see that connections are quite deep. It turns out that proof technology is relevant to other technologies of economic and strategic importance. For instance, the type checkers in commercial programming languages like ML are actually small theorem provers. They check that arguments to a function match the type of the function (see section 3). Industrial model checkers systematically search for errors in the design of finite state systems, such as hardware circuits or software protocols. More general tools are program verification systems. These combine type checkers, model checkers, decision procedures, and theorem provers that use formalized mathematics. They are employed to prove that programs have certain formally specified properties. Such proofs provide the highest levels of assurance that can be given that programs operate according to specifications. There are also software systems based on proof technology which synthesize correct programs from proofs that specifications are realizable. We will examine the proof theory underlying some of these systems. My approach to the subject comes from the experience of designing, studying, and using some of the earliest and then some of the most modern of these theorem provers. Currently my colleagues and I at Cornell are working with the system we call Nuprl ("new pearl").1 We call it a proof development system in Constable et al. [1986], but some call it a problem solving environment (PSE) or a logicalframework (LF). From another point of view it is a collaborative mathematics environment, c.f., Chew et al. [1996]. Whatever Nuprl is called, I am concerned with systems like it and their evolution. We will examine the logical features common to a variety of current systems of a similar kind, such as ACL2, Alf, Coq, HOL, IMPS, Isabelle, Kiv, LA, Lego, Mizar, NqThm and Otter. So while I will refer to Nuprl from time to time, most of the ideas are very general and will apply to the systems of the 21st century as well. Before saying more about the article, let me put the work into historical perspective. Doing this will allow me to state my goals more exactly (especially after each topic of Section 1.1). 1.1. Historical perspective on a grand enterprise 1875-1995. From Begriff- sschrift [1879] onwards until Grundgesetze [1903], logic was re-surveyed by Gottlob Frege, and the ground was cleared to provide a firm foundation for mathematics. 2 In Principia Mathematica, Whitehead and Russell [1925-27] revised Frege's flawed architectural plans, and then using these plans, Hilbert [1926] laid out a formalist 1We have released Version 4.2, see http://www.cs.cornell.edu/Info/Projects/NuPrl/nuprl.html. Version 5 and "Nuprl Light" will be available at this World Wide Web site in 1999. 2Begri~sschrift ("concept script") analyzed the notion of a proposition into function and argument, introduced the quantifiers, binding, and a theory of identity. This created the entire predicate calculus. Grundgesetze presented a theory of classes based on the comprehension principle and defined the natural numbers in terms of them. 686 R. Constable program to build the completely formal theories which would be used to explain and justify the results and methods of mathematics. His program would defend mathematical practice against critics like Brouwer who saw the need to place the foundation pilings squarely on the natural numbers and build with constructive methods. 3 Hilbert called for workers, training some himself, and began with them the task which proved to be so compelling and attractive to many talented mathematicians like Church, von Neumann, Herbrand, Gentzen, Skolem, Turing, Tarski, GSdel, and many more. Boring deep into the bedrock to explore the foundation site, Kurt GSdel [1931] unexpected limitations to the planned activity. It could never be completed as envisioned by Hilbert. 4 His surprising discovery changed expectations, but the tools GSdel created transformed the field and stimulated enormous interest in the enterprise. More remarkable discoveries followed. Within two decades, computer science was providing new "power tools" to realize in software the formal structures needed to support mathematics. By 1960 computer hardware could execute programming languages like Lisp, c.f. McCarthy [1963], designed for the symbolic processing needed to build formal structures. Up in the scaffolding computer scientists began to encounter their own problems with "wiring and communications," control of resource expenditure, design of better tools, etc. But already even in the 1970's poised over the ground like a giant drilling rig, the formal structures supported still deeper penetration into the bedrock designed to support mathematics (and with it the mathematical sciences and much of our technical knowledge). The theory of computational complexity, arising from Hartmanis and Stearns [1965], led to further beautiful discoveries like Cook's P - NP problem, and to a theory of algorithms needed for sophisticated constructions, and to a theory of feasible mathematics (see Buss [1986], Leivant [1994b,1994a,1995]), and to ideas for the foundations of computational mathematics. By 1970 the value of the small formal structure already assembled put to rest the nagging questions of earlier times about why mathematics should be formalized. The existing structure provided economic
Recommended publications
  • Pragmatic Quotient Types in Coq Cyril Cohen
    Pragmatic Quotient Types in Coq Cyril Cohen To cite this version: Cyril Cohen. Pragmatic Quotient Types in Coq. International Conference on Interactive Theorem Proving, Jul 2013, Rennes, France. pp.16. hal-01966714 HAL Id: hal-01966714 https://hal.inria.fr/hal-01966714 Submitted on 29 Dec 2018 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. Pragmatic Quotient Types in Coq Cyril Cohen Department of Computer Science and Engineering University of Gothenburg [email protected] Abstract. In intensional type theory, it is not always possible to form the quotient of a type by an equivalence relation. However, quotients are extremely useful when formalizing mathematics, especially in algebra. We provide a Coq library with a pragmatic approach in two complemen- tary components. First, we provide a framework to work with quotient types in an axiomatic manner. Second, we program construction mecha- nisms for some specific cases where it is possible to build a quotient type. This library was helpful in implementing the types of rational fractions, multivariate polynomials, field extensions and real algebraic numbers. Keywords: Quotient types, Formalization of mathematics, Coq Introduction In set-based mathematics, given some base set S and an equivalence ≡, one may see the quotient (S/ ≡) as the partition {π(x) | x ∈ S} of S into the sets π(x) ˆ= {y ∈ S | x ≡ y}, which are called equivalence classes.
    [Show full text]
  • Donald Knuth Fletcher Jones Professor of Computer Science, Emeritus Curriculum Vitae Available Online
    Donald Knuth Fletcher Jones Professor of Computer Science, Emeritus Curriculum Vitae available Online Bio BIO Donald Ervin Knuth is an American computer scientist, mathematician, and Professor Emeritus at Stanford University. He is the author of the multi-volume work The Art of Computer Programming and has been called the "father" of the analysis of algorithms. He contributed to the development of the rigorous analysis of the computational complexity of algorithms and systematized formal mathematical techniques for it. In the process he also popularized the asymptotic notation. In addition to fundamental contributions in several branches of theoretical computer science, Knuth is the creator of the TeX computer typesetting system, the related METAFONT font definition language and rendering system, and the Computer Modern family of typefaces. As a writer and scholar,[4] Knuth created the WEB and CWEB computer programming systems designed to encourage and facilitate literate programming, and designed the MIX/MMIX instruction set architectures. As a member of the academic and scientific community, Knuth is strongly opposed to the policy of granting software patents. He has expressed his disagreement directly to the patent offices of the United States and Europe. (via Wikipedia) ACADEMIC APPOINTMENTS • Professor Emeritus, Computer Science HONORS AND AWARDS • Grace Murray Hopper Award, ACM (1971) • Member, American Academy of Arts and Sciences (1973) • Turing Award, ACM (1974) • Lester R Ford Award, Mathematical Association of America (1975) • Member, National Academy of Sciences (1975) 5 OF 44 PROFESSIONAL EDUCATION • PhD, California Institute of Technology , Mathematics (1963) PATENTS • Donald Knuth, Stephen N Schiller. "United States Patent 5,305,118 Methods of controlling dot size in digital half toning with multi-cell threshold arrays", Adobe Systems, Apr 19, 1994 • Donald Knuth, LeRoy R Guck, Lawrence G Hanson.
    [Show full text]
  • Leading the Way in Scientific Computing. Addison-Wesley. I When Looking for the Best in Scientific Computing, You've Come to Rely on Addison-Wesley
    Leading the way in scientific computing. Addison-Wesley. I When looking for the best in scientific computing, you've come to rely on Addison-Wesley. I Take a moment to see how we've made our list even stronger. The LATEX Companion sional programming languages. This book is the definitive user's Michael Goossens, Frank Mittelbach, and Alexander Samarin guide and reference manual for the CWEB system. This book is packed with information needed to use LATEX even 1994 (0-201 -57569-8) approx. 240 pp. Softcover more productively. It is a true companion to Leslie Lamport's users guide as well as a valuable complement to any LATEX introduction. Concrete Mathematics. Second Edition Describes the new LATEX standard. Ronald L. Graham, Donald E. Knuth, and Oren Patashnick 1994 (0-201 -54 199-8) 400 pp. Softcover With improvements to almost every page, the second edition of this classic text and reference introduces the mathematics that LATEX: A Document Preparation System, Second Edition supports advanced computer programming. Leslie Lamport 1994 (0-201 -55802-5) 672 pp. Hardcover The authoritative user's guide and reference manual has been revised to document features now available in the new standard Applied Mathematics@: Getting Started, Getting It Done software release-LATEX~E.The new edition features additional styles William T. Shaw and Jason Tigg and functions, improved font handling, and much more. This book shows how Mathematics@ can be used to solve problems in 1994 (0-201-52983-1) 256 pp. Softcover the applied sciences. Provides a wealth of practical tips and techniques. 1 994 (0-201 -542 1 7-X) 320 pp.
    [Show full text]
  • Arithmetic in MIPS
    6 Arithmetic in MIPS Objectives After completing this lab you will: • know how to do integer arithmetic in MIPS • know how to do floating point arithmetic in MIPS • know about conversion from integer to floating point and from floating point to integer. Introduction The definition of the R2000 architecture includes all integer arithmetic within the actual CPU. Floating point arithmetic is done by one of the four possible coprocessors, namely coprocessor number 1. Integer arithmetic Addition and subtraction are performed on 32 bit numbers held in the general purpose registers (32 bit each). The result is a 32 bit number itself. Two kinds of instructions are included in the instruction set to do integer addition and subtraction: • instructions for signed arithmetic: the 32 bit numbers are considered to be represented in 2’s comple- ment. The execution of the instruction (addition or subtraction) may generate an overflow. • instructions for unsigned arithmetic: the 32 bit numbers are considered to be in standard binary repre- sentation. Executing the instruction will never generate an overflow error even if there is an actual overflow (the result cannot be represented with 32 bits). Multiplication and division may generate results that are larger than 32 bits. The architecture provides two special 32 bit registers that are the destination for multiplication and division instructions. These registers are called hi and lo as to indicate that they hold the higher 32 bits of the result and the lower 32 bits respectively. Special instructions are also provided to move data from these registers into the general purpose ones ($0 to $31).
    [Show full text]
  • Ultraproducts and Elementary Classes *
    MATHEMATICS ULTRAPRODUCTS AND ELEMENTARY CLASSES * BY H. JEROME KEISLER (Communicated by Prof. A. HEYTING at the meeting of May 27, 1961 INTRODUCTION In the theory of models of the first order predicate logic with identity we study the relationship between notions from logic and purely mathe­ matical objects, called relational systems, or (first order) structures, m, consisting of a set A and a sequence of relations on A corresponding to the predicate symbols of the logic. In such studies some of the most useful methods are those which permit us to form structures which have certain semantical properties. For example, the completeness theorem permits us to form a structure which satisfies a given consistent set of sentences. A more recent tool is the reduced product operation, which is particularly simple and direct from the mathematical point of view. Speaking very roughly, a reduced product Iliei ill:i/D of the structures mi, i El, is formed by first taking their direct product and then forming the quotient system determined in a certain way by the filter D on the index set 1. If D is an ultrafilter we have an ultraproduct (or prime reduced product), and if each m:i coincides with a fixed system ill: we have a reduced power, or ultrapower, ill: I j D. Ultraproducts have recently been applied to obtain new, comparatively direct mathematical proofs and at the same time stronger forms of a number of theorems in model theory. An outstanding example is the proof of the compactness theorem outlined in [33]. They have also been used to obtain several completely new results in the theory of models (for example, see [35]).
    [Show full text]
  • Quotient Types: a Modular Approach
    Quotient Types: A Modular Approach Aleksey Nogin Department of Computer Science Cornell University, Ithaca, NY 14853 [email protected] Abstract. In this paper we introduce a new approach to axiomatizing quotient types in type theory. We suggest replacing the existing mono- lithic rule set by a modular set of rules for a specially chosen set of primitive operations. This modular formalization of quotient types turns out to be much easier to use and free of many limitations of the tradi- tional monolithic formalization. To illustrate the advantages of the new approach, we show how the type of collections (that is known to be very hard to formalize using traditional quotient types) can be naturally for- malized using the new primitives. We also show how modularity allows us to reuse one of the new primitives to simplify and enhance the rules for the set types. 1 Introduction NuPRL type theory differs from most other type theories used in theorem provers in its treatment of equality. In Coq’s Calculus of Constructions, for example, there is a single global equality relation which is not the desired one for many types (e.g. function types). The desired equalities have to be handled explicitly, which is quite burdensome. As in Martin-L¨of type theory [20] (of which NuPRL type theory is an extension), in NuPRL each type comes with its own equality relation (the extensional one in the case of functions), and the typing rules guar- antee that well–typed terms respect these equalities. Semantically, a quotient in NuPRL is trivial to define: it is simply a type with a new equality.
    [Show full text]
  • Mathematics for Computer Scientists (G51MCS) Lecture Notes Autumn 2005
    Mathematics for Computer Scientists (G51MCS) Lecture notes Autumn 2005 Thorsten Altenkirch October 26, 2005 Contents 1 1 Types and sets What is a set? Wikipedia 1 says Informally, a set is just a collection of objects considered as a whole. And what is a type? Wikipedia offers different definitions for different subject areas, but if we look up datatype in Computer Science we learn: In computer science, a datatype (often simply type) is a name or label for a set of values and some operations which can be performed on that set of values. Here the meaning of type refers back to the meaning of sets, but it is hard to see a substantial difference. We may conclude that what is called a set in Mathematics is called a type in Computer Science. Here, we will adopt the computer science terminology and use the term type. But remember to translate this to set when talking to a Mathematician. There is a good reason for this choice: I am going to use the type system of the programming language Haskell to illustrate many important constructions on types and to implement mathematical constructions on a computer. Please note that this course is not an introduction to Haskell, this is done in the 2nd semester in G51FUN. If you want to find out more about Haskell now, I refer to Graham Hutton’s excellent, forthcoming book, whose first seven chapters are available from his web page 2 . The book is going to be published soon and is the course text for G51FUN. Another good source for information about Haskell is the Haskell home page 3 While we are going to use Haskell to illustrate mathematical concepts, Haskell is also a very useful language for lots of other things, from designing user interfaces to controlling robots.
    [Show full text]
  • Quotient Types — a Modular Approach *,**
    Quotient Types — a Modular Approach ?;?? Aleksey Nogin Department of Computer Science Cornell University Ithaca, NY 14853 E-mail: [email protected] Web: http://nogin.org/ Abstract. In this paper we introduce a new approach to defining quo- tient types in type theory. We suggest replacing the existing monolithic rule set by a modular set of rules for a specially chosen set of primitive operations. This modular formalization of quotient types turns out to be very powerful and free of many limitations of the traditional monolithic formalization. To illustrate the advantages of the new formalization, we show how the type of collections (that is known to be very hard to formal- ize using traditional quotient types) can be naturally formalized using the new primitives. We also show how modularity allows us to reuse one of the new primitives to simplify and enhance the rules for the set types. 1 Introduction NuPRL type theory differs from most other type theories used in theorem provers in its treatment of equality. In Coq’s Calculus of Constructions, for example, there is a single global equality relation which is not the desired one for many types (e.g. function types). The desired equalities have to be handled explicitly, which is quite burdensome. As in Martin-L¨oftype theory [17] (of which NuPRL type theory is an extension), in NuPRL each type comes with its own equality relation (the extensional one in the case of functions), and the typing rules guar- antee that well–typed terms respect these equalities. Semantically, a quotient in NuPRL is trivial to define: it is simply a type with a new equality.
    [Show full text]
  • Infinite Computation, Co-Induction and Computational Logic
    Infinite Computation, Co-induction and Computational Logic Gopal Gupta Neda Saeedloei, Brian DeVries, Richard Min, Kyle Marple, Feliks Klu´zniak Department of Computer Science, University of Texas at Dallas, Richardson, TX 75080. Abstract. We give an overview of the coinductive logic programming paradigm. We discuss its applications to modeling ω-automata, model checking, verification, non-monotonic reasoning, developing SAT solvers, etc. We also discuss future research directions. 1 Introduction Coinduction is a technique for reasoning about unfounded sets [12], behavioral properties of programs [2], and proving liveness properties in model checking [16]. Coinduction also provides the foundation for lazy evaluation [9] and type inference [21] in functional programming as well as for interactive computing [33]. Coinduction is the dual of induction. Induction corresponds to well-founded structures that start from a basis which serves as the foundation: e.g., natural numbers are inductively defined via the base element zero and the successor function. Inductive definitions have 3 components: initiality, iteration and mini- mality. For example, the inductive definition of lists of numbers is as follows: (i) [] (empty list) is a list (initiality); (ii) [H|T] is a a list if T is a list and H is some number (iteration); and, (iii) the set of lists is the smallest set satisfying (i) and (ii) (minimality). Minimality implies that infinite-length lists of numbers are not members of the inductively defined set of lists of numbers. Inductive definitions correspond to least fixed point (LFP) interpretations of recursive definitions. Coinduction eliminates the initiality condition and replaces the minimality condition with maximality. Thus, the coinductive definition of a list of numbers is: (i) [H|T] is as a list if T is a list and H is some number (iteration); and, (ii) the set of lists is the largest set of lists satisfying (i) (maximality).
    [Show full text]
  • Quotient Types
    Quotient Types Peter V. Homeier U. S. Department of Defense, [email protected] http://www.cis.upenn.edu/~homeier Abstract. The quotient operation is a standard feature of set theory, where a set is divided into subsets by an equivalence relation; the re- sulting subsets of equivalent elements are called equivalence classes. We reinterpret this idea for Higher Order Logic (HOL), where types are di- vided by an equivalence relation to create new types, called quotient types. We present a tool for the Higher Order Logic theorem prover to mechanically construct quotient types as new types in the HOL logic, and also to de¯ne functions that map between the original type and the quotient type. Several properties of these mapping functions are proven automatically. Tools are also provided to create quotients of aggregate types, in particular lists, pairs, and sums. These require special atten- tion to preserve the aggregate structure across the quotient operation. We demonstrate these tools on an example from the sigma calculus. 1 Quotient Sets Quotient sets are a standard construction of set theory. They have found wide application in many areas of mathematics, including algebra and logic. The following description is abstracted from [3]. A binary relation on S is an equivalence relation if it is reflexive, symmetric, and transitive. » reflexive: x S: x x symmetric: 8x;2 y S: x » y y x transitive: 8x; y;2 z S: x » y ) y »z x z 8 2 » ^ » ) » Let be an equivalence relation. Then the equivalence class of x (modulo )is » » de¯ned as [x] def= y x y .
    [Show full text]
  • More Model Theory Notes Miscellaneous Information, Loosely Organized
    More Model Theory Notes Miscellaneous information, loosely organized. 1. Kinds of Models A countable homogeneous model M is one such that, for any partial elementary map f : A ! M with A ⊆ M finite, and any a 2 M, f extends to a partial elementary map A [ fag ! M. As a consequence, any partial elementary map to M is extendible to an automorphism of M. Atomic models (see below) are homogeneous. A prime model of T is one that elementarily embeds into every other model of T of the same cardinality. Any theory with fewer than continuum-many types has a prime model, and if a theory has a prime model, it is unique up to isomorphism. Prime models are homogeneous. On the other end, a model is universal if every other model of its size elementarily embeds into it. Recall a type is a set of formulas with the same tuple of free variables; generally to be called a type we require consistency. The type of an element or tuple from a model is all the formulas it satisfies. One might think of the type of an element as a sort of identity card for automorphisms: automorphisms of a model preserve types. A complete type is the analogue of a complete theory, one where every formula of the appropriate free variables or its negation appears. Types of elements and tuples are always complete. A type is principal if there is one formula in the type that implies all the rest; principal complete types are often called isolated. A trivial example of an isolated type is that generated by the formula x = c where c is any constant in the language, or x = t(¯c) where t is any composition of appropriate-arity functions andc ¯ is a tuple of constants.
    [Show full text]
  • Resources for Further Study
    Resources for Further Study A number of valuable resources are available for further study of philosophical logic. In addition to the books and articles cited in the references at the end of each chapter included in this volume, there are four general categories of resources that can be consulted for information about the history and current research developments in philosophical logic. Additional materials can be found by soliciting advice from logicians, philosophers, and mathematicians at local colleges and universities. Logic Handbooks Many university and independent presses publish books on or related to mathematical and philo- sophical logic. There are also several special series of original monographs in logic that are worth investigating. The literature is too vast to justify a selection of the individual books that have con- tributed to the development of logic. We can nevertheless identify special categories of texts of special interest, beginning with handbooks and book series dedicated to logic and philosophical logic. Here are some recent relevant publications: Boyer, Robert S. (1988) A Computational Logic Handbook. Boston, MA: Academic Press. Sherwood, John C. (1960) Discourse of Reason: A Brief Handbook of Semantics and Logic. New York: Harper & Row. Handbook of Fuzzy Computation, ed. Enrique H. Ruspini, Piero P. Bonissone and Witold Pedrycz. Philadelphia, PA: Institute of Physics Publications, 1998. Handbook of Logic and Language, ed. Johan van Benthem and Alice ter Meulen. Cambridge, MA: MIT Press, 1997. Handbook of Logic in Artificial Intelligence and Logic Programming, ed. Dov Gabbay, C. J. Hogger, and J. A. Robinson. Oxford: Clarendon Press, 1993–8. Emmet, E. R. (1984) Handbook of Logic.
    [Show full text]