![]() A countably infinite set is one that can be enumerated. More precisely, our proof claims that the set of possible programs is countably infinite while the set of languages over an alphabet is uncountably infinite.Īt this point, you may be thinking, “Infinity is a strange enough idea by itself now I have to deal with two of them!” This works because the question of whether a string belongs in a language (Yes/No) is itself a problem. Intuitively, our proof will show that there are more languages that is, more problems than there are possible programs to solve them. The last piece of the puzzle before we prove our claim that not all functions are computable is the concept of countability. For example, if our language A is the set of strings, then one member of A* is the string ‘0101111’. This can be thought of as the union of all possible powers of the language. One important operator is the Kleene star operator that’s also used with regular expressions. It turns out that languages, like numbers, may be operated on with operators such as concatenation, union, intersection, and the like. In all these cases, a set of strings is called a language-for example, the set of all binary strings that represent even numbers or the set of strings that have an even number of characters. ![]() Maybe we care about the set of strings that some machine accepts, or maybe we are building a machine that accepts strings in a certain set and no others, or maybe we’re asking if it’s even possible to design a machine that accepts everything in some particular set and no others. Given these parameters, it is important to characterize one more type: a collection of strings. This abstraction fits well with the mathematical definition of functions from earlier. Any finite sequence of characters is a string-for example, “0110.”įurthermore, we will represent a machine’s output as a binary accept-reject decision, delivered once the machine (hopefully) finishes its computation. ![]() For example, the machine’s alphabet may be binary (0s and 1s) or it might be the ASCII character set. We will call the input the machine’s alphabet that is, a set of strings of characters from some finite set. ![]() To help make our arguments, let us imagine computers as machines taking some input, performing a sequence of operations, and after some time, giving some output. However, the mathematical definition allows us to reach interesting conclusions such as the existence of uncomputable functions (i.e., unsolvable problems):īecause, not every function can be described as an algorithm. The two definitions of functions, the one we are so familiar with and the formal one, coincide for many practical purposes. This definition tells us that a computer is a machine for computing functions.īecause computers transform arbitrary input to some output. Turns out the mathematical definition is different:Ī function is a set of ordered pairs such that the first element of each pair is from a set X (called the domain), the second element of each pair is from a set Y (called the codomain or range), and each element of the domain is paired with exactly one element of the range. In school, we are often taught a mental model of problems and functions that goes something like this:Ī function is a procedure you apply to an input x in order to find an output f(x). Computability What Is a Computer? What Is a Problem? The abstract view of computing produces results that have stood the test of time, being as valuable to us today as they were when initially developed in the 1970s. By understanding the power and limitations of computers and algorithms, we can improve the way we think and better reason about different strategies. In this article, we will address these questions by stepping away from the particulars of programming languages and computer architectures.
0 Comments
Leave a Reply. |