# 2.5: Multiple Procedures and Architectures

- Page ID
- 21212

\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

\( \newcommand{\Span}{\mathrm{span}}\)

\( \newcommand{\id}{\mathrm{id}}\)

\( \newcommand{\Span}{\mathrm{span}}\)

\( \newcommand{\kernel}{\mathrm{null}\,}\)

\( \newcommand{\range}{\mathrm{range}\,}\)

\( \newcommand{\RealPart}{\mathrm{Re}}\)

\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

\( \newcommand{\Argument}{\mathrm{Arg}}\)

\( \newcommand{\norm}[1]{\| #1 \|}\)

\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)

\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)

\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

\( \newcommand{\vectorC}[1]{\textbf{#1}} \)

\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)According to a Chinese proverb, we all like lamb, but each has a different way to cook it. This proverb can be aptly applied to the circuits of switches for which Shannon (1938) developed a logical interpretation. Any of these circuits can be described as defining a logical function that maps inputs onto an output: the circuit outputs a current (or not) depending on the pattern of currents controlled by one or more switches that flow into it. However, just like lamb, there are many different ways to “cook” the input signals to produce the desired output. In short, many different circuits can be constructed to compute the same input-output function.

To illustrate this point, let us begin by considering Shannon’s (1938) selective circuit, which would be off when 0 or 2 of its 4 relays were closed, but which would be on when any other number of its relays was closed. In Shannon’s original formulation, 20 components—an arrangement of 20 different switches—defined a circuit that would behave in the desired fashion. After applying logical operations to simplify the design, Shannon reduced the number of required components from 20 to 14. That is, a smaller circuit that involved an arrangement of only 14 different switches delivered the same input-output behaviour as did the 20-switch circuit.

Reflecting on these two different versions of the selective circuit, it’s clear that if one is interested in comparing them, the result of the comparison depends on the perspective taken. On the one hand, they are quite different: they involve different numbers of components, related to one another by completely different patterns of wiring. On the other hand, in spite of these obvious differences in details, at a more abstract level the two designs are identical, in the sense that both designs produce the same input-output mapping. That is, if one built a truth table for either circuit that listed the circuit’s conductivity (output) as a function of all possible combinations of its 4 relays (inputs), the two truth tables would be identical. One might say that the two circuits use markedly different procedures (i.e., arrangements of internal components) to compute the same input-output function. They generate the same behaviour, but for different reasons.

Comparisons between different devices are further complicated by introducing the notion of an architecture (Brooks, 1962). In computer science, the term architecture was originally used by Frederick P. Brooks Jr., a pioneering force in the creation of IBM’s early computers. As digital computers evolved, computer designers faced changing constraints imposed by new hardware technologies. This is because new technologies defined anew the basic information processing properties of a computer, which in turn determined what computers could and could not do. A computer’s architecture is its set of basic information processing properties (Blaauw & Brooks, 1997, p. 3): “The architecture of a computer system we define as the minimal set of properties that determine what programs will run and what results they will produce.”

The two different versions of Shannon’s (1938) selective circuit were both based on the same architecture: the architecture’s primitives (its basic components) were parallel and serial combinations of pairs of switches. However, other sets of primitives could be used.

An alternative architecture could use a larger number of what Shannon (1938) called special types of relays or switches. For instance, we could take each of the 16 logical functions listed in Table 2-2 and build a special device for each. Each device would take two currents as input, and would convert them into an appropriate output current. For example, the XOR device would only deliver a current if only one of its input lines was active; it would not deliver a current if both its input lines were either active or inactive—behaving exactly as it is defined in Table 2-2. It is easy to imagine building some switching circuit that used all of these logic gates as primitive devices; we could call this imaginary device “circuit x.”

The reason that the notion of architecture complicates (or enriches!) the comparison of devices is that the same circuit can be created from different primitive components. Let us define one additional logic gate, the NOT gate, which does not appear in Table 2-2 because it has only one input signal. The NOT gate reverses or inverts the signal that is sent into it. If a current is sent into a NOT gate, then the NOT gate does not output a current. If a current is not sent into a NOT gate, then the gate outputs a current. The first NOT gate—the first electromechanical relay— was invented by American physicist Joseph Henry in 1835. In a class demonstration, Henry used an input signal to turn off an electromagnet from a distance, startling his class when the large load lifted by the magnet crashed to the floor (Moyer, 1997).

The NOT gate is important, because it can be used to create any of the Table 2-2 operations when combined with two other operators that are part of that table: AND, which McCulloch represented as p·q, and OR, which McCulloch represented as p ∨ q. To review, if the only special relays available are NOT, A,ND and OR, then one can use these three primitive logic blocks to create any of the other logical operations that are 34 Chapter 2 given in Table 2-2 (Hillis, 1998). “This idea of a universal set of blocks is important: it means that the set is general enough to build anything” (p. 22).

To consider the implications of the universal set of logic gates to comparing circuits, let us return to our imaginary circuit x. We could have two different versions of this circuit, based on different architectures. In one, the behaviour of the circuit would depend upon wiring up some arrangement of all the various logical operations given in Table 2-2, where each operation is a primitive—that is, carried out by its own special relay. In the other, the arrangement of the logical operations would be identical, but the logical operations in Table 2-2 would not be primitive. Instead, we would replace each special relay from the first circuit with a circuit involving NOT, AND, and OR that would produce the desired behaviour.

Let us compare these two different versions of circuit x. At the most abstract level, they are identical, because they are generating the same input-output behaviour. At a more detailed level—one that describes how this behaviour is generated in terms of how the logical operations of Table 2-2 are combined together—the two are also identical. That is, the two circuits are based on the same combinations of the Table 2-2 operations. However, at a more detailed level, the level of the architecture, the two circuits are different. For the first circuit, each logical operation from Table 2-2 would map onto a physical device, a special relay. This would not be true for the second circuit. For it, each logical operation from Table 2-2 could be decomposed into a combination of simpler logical operations—NOT, AND, OR—which in turn could be implemented by simple switches. The two circuits are different in the sense that they use different architectures, but these different architectures are used to create the same logical structure to compute the same input-output behaviour.

We now can see that Shannon’s (1938) discoveries have led us to a position where we can compare two different electrical circuits by asking three different questions. First, do the two circuits compute the same input-output function? Second, do the two circuits use the same arrangement of logical operations used to compute this function? Third, do the two circuits use the same architecture to bring these logical operations to life? Importantly, the comparison between two circuits can lead to affirmative answers to some of these questions, and negative answers to others. For instance, Shannon’s two selective circuits use different arrangements of logical operations, but are based on the same architecture, and compute the same input-output function. The two versions of our imaginary circuit x compute the same input-output function, and use the same arrangement of logical operations, but are based on different architectures.

Ultimately, all of the circuits we have considered to this point are governed by the same physical laws: the laws of electricity. However, we will shortly see that it is possible to have two systems that have affirmative answers to the three questions listed in the previous paragraph, but are governed by completely different physical laws.