Basic logic [and axioms]

The formal study of logic began in antiquity (see page 1099), with verbal descriptions of many templates for valid arguments—corresponding to theorems of logic—being widely known by medieval times. Following ideas of abstract algebra from the early 1800s, the work of George Boole around 1847 introduced the notion of representing logic in a purely symbolic and algebraic way. (Related notions had been considered by Gottfried Leibniz in the 1680s.) Boole identified 1 with True and 0 with False, then noted that theorems in logic could be stated as equations in which Or is roughly Plus and And is Times—and that such equations can be manipulated by algebraic means. Boole's work was progressively clarified and simplified, notably by Ernst Schröder, and by around 1900, explicit axiom systems for Boolean algebra were being given. Often they included most of the 14 highlighted theorems of page 817, but slight simplifications led for example to the "standard version" of page 773. (Note that the duality between And and Or is no longer explicit here.) The "Huntington version" of page 773 was given by Edward Huntington in 1933, along with

{LongEqual[Not[Not[a]] , a], LongEqual[Or[a, Not[Or[b, Not[b]]]] ,a], LongEqual[Not[Or[Not[Or[a, Not[b]]], Not[Or[a, Not[c]]]]] , Or[a, Not[Or[b, c]]]]}

The "Robbins version" was suggested by Herbert Robbins shortly thereafter, but only finally proved correct in 1996 by William McCune using automated theorem proving (see page 1157). The "Sheffer version" based on Nand (see page 1173) was given by Henry Sheffer in 1913. The shorter version was devised by David Hillman as part of the development of this book. The shortest version is discussed on page 808. (See also page 1175.)

In the main text each axiom defines an equivalence between expressions. The tradition in philosophy and mathematical logic has more been to take axioms to be true statements from which others can be deduced by the *modus ponens* inference rule {x, Implies[x, y]} -> y (see page 1155). In 1879 Gottlob Frege used his diagrammatic notation to set up a symbolic representation for logic on the basis of the axioms

{Implies[a, Implies[b, a]], Implies[Implies[a, Implies[b, c]], Implies[Implies[a, b], Implies[a, c]]], Implies[Implies[a, Implies[b, c]], Implies[b, Implies[a, c]]], Implies[Implies[a, b], Implies[Not[b], Not[a]]], Implies[Not[Not[a]], a], Implies[a, Not[Not[a]]]}

Charles Peirce did something similar at almost the same time, and by 1900 this approach to so-called propositional or sentential calculus was well established. (Alfred Whitehead and Bertrand Russell used an axiom system based on Or and Not in their original 1910 edition of *Principia Mathematica*.) In 1948 Jan Lukasiewicz found the single axiom version

{Implies[Implies[Implies[a, Implies[b, a]], Implies[Implies[Implies[Not[c], Implies[d, Not[e]]], Implies[Implies[c, Implies[d, f]], Implies[Implies[e, d], Implies[e, f]]]], g]], Implies[h, g]]}

equivalent for example to

{Implies[Implies[Not[a], Implies[b, Not[c]]], Implies[Implies[a, Implies[b, d]], Implies[Implies[c, b], Implies[c, d]]]], Implies[a, Implies[b, a]]}

It turns out to be possible to convert any axiom system that works with *modus ponens* (and supports the properties of \[Implies]) into a so-called equational one that works with equivalences between expressions by using

Module[{a}, Join[Thread[axioms == Implies[a, a]], {Implies[Implies[a, a], b] == b, Implies[Implies[a, b], b] == Implies[Implies[b, a], a]}]]

An analog of *modus ponens* for Nand is {x, Nand[x, Nand[y, z]]} -> z, and with this Jean Nicod found in 1917 the single axiom

{Nand[Nand[a, Nand[b, c]], Nand[Nand[e, Nand[e, e]], Nand[Nand[d, b], Nand[Nand[a, d], Nand[a, d]]]]]}

which was highlighted in the 1925 edition of *Principia Mathematica*. In 1931 Mordechaj Wajsberg found the slightly simpler

{Nand[Nand[a, Nand[b, c]], Nand[Nand[Nand[d, c], Nand[Nand[a, d], Nand[a, d]]], Nand[a, Nand[a, b]]]]}

Such an axiom system can be converted to an equational one using

Module[{a}, With[{t = Nand[a, Nand[a, a]], i = Nand[#1, Nand[#2, #2]] &}, Join[Thread[axioms == t], {i[t \[Nand] (b \[Nand] c), c] == t, i[t, b] == b, i[i[a, b], b] == i[i[b, a], a]}]]]

but then involves 4 axioms.

The question of whether any particular statement in basic logic is true or false is always formally decidable, although in general it is NP-complete (see page 768).