To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
Over the past four decades, business and academic economists, operations researchers, marketing scientists, and consulting firms have increased their interest and research on pricing and revenue management. This book introduces the reader to a wide variety of research results on pricing techniques in a unified, systematic way and at varying levels of difficulty. The book contains a large number of exercises and solutions and therefore can serve as a main or supplementary course textbook, as well as a reference guidebook for pricing consultants, managers, industrial engineers, and writers of pricing software applications. Despite a moderate technical orientation, the book is accessible to readers with a limited knowledge in these fields as well as to readers who have had more training in economics.
Written for a broad audience of students in mathematics, computer science, operations research, statistics, and engineering, this textbook presents a short, lively survey of several fascinating non-calculus topics in modern applied mathematics. Coverage includes probability, mathematical finance, graphs, linear programming, statistics, computer science algorithms, and groups. A key feature is the abundance of interesting examples not normally found in standard finite mathematics courses, such as options pricing and arbitrage, tournaments, and counting formulas. The author assumes a level of mathematical sophistication at the beginning calculus level, that is, students should have had at least a course in pre-calculus, and the added sophistication attained from studying calculus would be useful.
There has recently been much interest in “artificial neural networks,” machines (or models of computation) based loosely on the ways in which the brain is believed to work. Neurobiologists are interested in using these machines as a means of modeling biological brains, but much of the impetus comes from their applications. For example, engineers wish to create machines that can perform “cognitive” tasks, such as speech recognition, and economists are interested in financial time series prediction using such machines.
In this chapter we focus on individual “artificial neurons” and feed-forward artificial neural networks. We are particularly interested in cases where the neurons are linear threshold neurons, sigmoid neurons, polynomial threshold neurons, and spiking neurons. We investigate the relationships between types of artificial neural network and classes of Boolean function. In particular, we ask questions about the type of Boolean functions a given type of network can compute, and about how extensive or expressive the set of functions so computable is.
Artificial Neural Networks
Introduction
It appears that one reason why the human brain is so powerful is the sheer complexity of connections between neurons. In computer science parlance, the brain exhibits huge parallelism, with each neuron connected to many other neurons. This has been reflected in the design of artificial neural networks. One advantage of such parallelism is that the resulting network is robust: in a serial computer, a single fault can make computation impossible, whereas in a system with a high degree of parallelism and many computation paths, a small number of faults may be tolerated with little or no upset to the computation.
A fundamental objective of cryptography is to enable two persons to communicate over an insecure channel (a public channel such as the internet) in such a way that any other person is unable to recover their message (called the plaintext) from what is sent in its place over the channel (the ciphertext). The transformation of the plaintext into the ciphertext is called encryption, or enciphering. Encryption-decryption is the most ancient cryptographic activity (ciphers already existed four centuries b.c.), but its nature has deeply changed with the invention of computers, because the cryptanalysis (the activity of the third person, the eavesdropper, who aims at recovering the message) can use their power.
The encryption algorithm takes as input the plaintext and an encryption key KE, and it outputs the ciphertext. If the encryption key is secret, then we speak of conventional cryptography, of private key cryptography, or of symmetric cryptography. In practice, the principle of conventional cryptography relies on the sharing of a private key between the sender of a message (often called Alice in cryptography) and its receiver (often called Bob). If, on the contrary, the encryption key is public, then we speak of public key cryptography. Public key cryptography appeared in the literature in the late 1970s.
The first part of the book, “Algebraic Structures,” deals with compositions and decompositions of Boolean functions.
A set F of Boolean functions is called complete if every Boolean function is a composition of functions from F; it is a clone if it is composition-closed and contains all projections. In 1921, E. L. Post found a completeness criterion, that is, a necessary and sufficient condition for a set F of Boolean functions to be complete. Twenty years later, he gave a full description of the lattice of Boolean clones. Chapter 1, by Reinhard Pöschel and Ivo Rosenberg, provides an accessible and self-contained discussion of “Compositions and Clones of Boolean Functions” and of the classical results of Post.
Functional decomposition of Boolean functions was introduced in switching theory in the late 1950s. In Chapter 2, “Decomposition of Boolean Functions,” Jan C. Bioch proposes a unified treatment of this topic. The chapter contains both a presentation of the main structural properties of modular decompositions and a discussion of the algorithmic aspects of decomposition.
Part II of the collection covers topics in logic, where Boolean models find their historical roots.
In Chapter 3, “Proof Theory,” Alasdair Urquhart briefly describes the more important proof systems for propositional logic, including a discussion of equational calculus, of axiomatic proof systems, and of sequent calculus and resolution proofs. The author compares the relative computational efficiency of these different systems and concludes with a presentation of Haken's classical result that resolution proofs have exponential length for certain families of formulas.
This chapter explores the learnability of Boolean functions. Broadly speaking, the problem of interest is how to infer information about an unknown Boolean function given only information about its values on some points, together with the information that it belongs to a particular class of Boolean functions. This broad description can encompass many more precise formulations, but here we focus on probabilistic models of learning, in which the information about the function value on points is provided through its values on some randomly drawn sample, and in which the criteria for successful “learning” are defined using probability theory. Other approaches, such as “exact query learning” (see [1, 18, 20] and Chapter 7 in this volume, for instance) and “specification,” “testing,” or “learning with a helpful teacher” (see [12, 4, 16, 21, 26]) are possible, and particularly interesting in the context of Boolean functions. Here, however, we focus on probabilistic models and aim to give a fairly thorough account of what can be said in two such models.
In the probabilistic models discussed, there are two separate, but linked, issues of concern. First, there is the question of how much information is needed about the values of a function on points before a good approximation to the function can be found. Second, there is the question of how, algorithmically, we might find a good approximation to the function. These two issues are usually termed the sample complexity and computational complexity of learning.
Let f: Dn → R be a finite function: that is, D and R are finite sets. Such a function can be represented by the table of all (a, f (a)), a Є Dn, which always has an exponential size of ∣D∣n. Therefore, we are interested in representations that for many important functions are much more compact. The best-known representations are circuits and decision diagrams. Circuits are a hardware model reflecting the sequential and parallel time to compute f (a) froma (see Chapter 11). Decision diagrams (DDs), also called branching programs (BPs), are nonuniform programs for computing f (a) from a based on only two types of instructions represented by nodes in a graph (see also Figure 10.1):
Decision nodes: depending on the value of some input variable xi the next node is chosen.
Output nodes (also called sinks): a value from R is presented as output.
A decision diagram is a directed acyclic graph consisting of decision nodes and output nodes. Each node v represents a function fv defined in the following way. Let a = (a1, …, an) Є Dn. At decision nodes, choose the next node as described before. The value of fv(a) is defined as the value of the output node that is finally reached when starting at v. Hence, for each node each input a Є Dn activates a unique computation path that we follow during the computation of fv(a). An edge e = (v,w) of the diagram is called activated by a if the computation path starting at v runs via e.
We explore network reliability primarily from the viewpoint of how the combinatorial structure of operating or failed states enables us to compute or bound the reliability. Many other viewpoints are possible, and are outlined in [7, 45, 147]. Combinatorial structure is most often reflected in the simplicial complex (hereditary set system) that represents all operating states of a network; most of the previous research has been developed in this vernacular. However, the language and theory of Boolean functions has played an essential role in this development; indeed these two languages are complementary in their utility to understand the combinatorial structure. As we survey exact computation and enumerative bounds for network reliability in the following, the interplay of complexes and Boolean functions is examined.
In classical reliability analysis, failure mechanisms and the causes of failure are relatively well understood. Some failure mechanisms associated with network reliability applications share these characteristics, but many do not. Typically, component failure rates are estimated based on historical data. Hence, time-independent, discrete probability models are often employed in network reliability analysis. In the most common model, network components (nodes and edges, for example) can take on one of two states: operative or failed. The state of a component is a random event that is independent of the states of other components. Similarly, the network itself is in one of two states, operative or failed.
Two-level logic minimization has been a success story both in terms of theoretical understanding (see, e.g., [15]) and availability of practical tools (such as espresso) [2, 14, 31, 38]. However, two-level logic is not suitable to implement large Boolean functions, whereas multilevel implementations allow a better tradeoff between area and delay. Multilevel logic synthesis has the objective to explore multilevel implementations guided by some function of the following metrics:
(i) The area occupied by the logic gates and interconnect (e.g., approximated by literals, which correspond to transistors in technology-independent optimization);
(ii) The delay of the longest path through the logic;
(iii) The testability of the circuit, measured in terms of the percentage of faults covered by a specified set of test vectors, for an appropriate fault model (e.g., single stuck faults, multiple stuck faults);
(iv) The power consumed by the logic gates and wires.
Often good implementations must satisfy simultaneously upper or lower constraints placed on these parameters and look for good compromises among the cost functions.
It is common to classify optimization as technology-independent versus technology-dependent, where the former represents a circuit by a network of abstract nodes, whereas the latter represents a circuit by a network of the actual gates available in a given library or programmable architecture. A common paradigm is to first try technology-independent optimization and then map the optimized circuit into the final library (technology mapping).
The basic step in functional decomposition of a Boolean function f : {0, 1}n ↦ {0, 1} with input variables N = {x1, x2, … xn} is essentially the partitioning of the set N into two disjoint sets A = {x1, x2, …, xp} (the “modular set”) and B = {xp+1, …, xn} (the “free set”), such that f = F(g(xA), xB). The function g is called a component (subfunction) of f, and F is called a composition (quotient) function of f. The idea here is that F computes f based on the intermediate result computed by g and the variables in the free set. More complex (Ashenhurst) decompositions of a function f can be obtained by recursive application of the basic decomposition step to a component function or to a quotient function of f.
Functional decomposition for general Boolean functions has been introduced in switching theory in the late 1950s and early 1960s by Ashenhurst, Curtis, and Karp [1, 2, 20, 23, 24]. More or less independent from these developments, decomposition of positive functions has been initiated by Shapley [36], Billera [5, 4], and Birnbaum and Esary [12] in several contexts such as voting theory (simple games), clutters, and reliability theory. However, the results in these areas are mainly formulated in terms of set systems and set operations.
The literature contains a wide variety of proof systems for propositional logic. In this chapter, we outline the more important of such proof systems, beginning with an equational calculus, then describing a traditional axiomatic proof system in the style of Frege and Hilbert.We also describe the systems of sequent calculus and resolution that have played an important part in proof theory and automated theorem proving. The chapter concludes with a discussion of the problem of the complexity of propositional proofs, an important area in recent logical investigations. In the last section,we give a proof that any consensus proof of the pigeonhole formulas has exponential length.
An Equational Calculus
The earliest proof systems for propositional logic belong to the tradition of algebraic logic and represent proofs as sequences of equations between Boolean expressions. The proof systems of Boole, Venn, and Schröder are all of this type. In this section, we present such a system, and prove its completeness, by showing that all valid equations between Boolean expressions can be deduced formally.
We start from the concept of Boolean expression defined in Chapter 1 of the monograph Crama and Hammer [9]. If ϕ and ψ are Boolean expressions, then we write ϕ[ψ/xi] for the expression resulting from ϕ by substituting ψ for all occurrences of the variable xi in ϕ. With this notational convention, we can state the formal rules for deduction in our equational calculus.