27.04.2015 Views

Computability and Logic

Computability and Logic

Computability and Logic

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5<br />

Abacus <strong>Computability</strong><br />

Showing that a function is Turing computable directly, by giving a table or flow chart<br />

for a Turing machine computing the function, is rather laborious, <strong>and</strong> in the preceding<br />

chapters we did not get beyond showing that addition <strong>and</strong> multiplication <strong>and</strong> a few<br />

other functions are Turing computable. In this chapter we provide a less direct way of<br />

showing functions to be Turing computable. In section 5.1 we introduce an ostensibly<br />

more flexible kind of idealized machine, an abacus machine, or simply an abacus. In<br />

section 5.2 we show that despite the ostensible greater flexibility of these machines, in<br />

fact anything that can be computed on an abacus can be computed on a Turing machine.<br />

In section 5.3 we use the flexibility of these machines to show that a large class of<br />

functions, including not only addition <strong>and</strong> multiplication, but exponentiation <strong>and</strong> many<br />

other functions, are computable on a abacus. In the next chapter functions of this class<br />

will be called recursive, so what will have been proved by the end of this chapter is that<br />

all recursive functions are Turing computable.<br />

5.1 Abacus Machines<br />

We have shown addition <strong>and</strong> multiplication to be Turing-computable functions, but<br />

not much beyond that. Actually, the situation is even a bit worse. It seemed appropriate,<br />

when considering Turing machines, to define Turing computability for functions<br />

on positive integers (excluding zero), but in fact it is customary in work on other<br />

approaches to computability to consider functions on natural numbers (including<br />

zero). If we are to compare the Turing approach with others, we must adapt our<br />

definition of Turing computability to apply to natural numbers, as can be accomplished<br />

(at the cost of some slight artificiality) by the expedient of letting the number n<br />

be represented by a string of n + 1 strokes, so that a single stroke now represents zero,<br />

two strokes represent one, <strong>and</strong> so on. But with this change, the adder we presented in<br />

the last chapter actually computes m + n + 1, rather than m + n, <strong>and</strong> would need to be<br />

modified to compute the st<strong>and</strong>ard addition function; <strong>and</strong> similarly for the multiplier.<br />

The modifications are not terribly difficult to carry out, but they still leave us with<br />

only a very few examples of interesting effectively computable functions that have<br />

been shown to be Turing computable. In this chapter we greatly enlarge the number of<br />

examples, but we do not do so directly, by giving tables or flow charts for the relevant<br />

Turing machines. Instead, we do so indirectly, by way of another kind of idealized<br />

machine.<br />

45

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!