1 00:00:00,429 --> 00:00:05,259 There are many other models of computation, each of which describes a class of integer 2 00:00:05,259 --> 00:00:10,210 functions where a computation is performed on an integer input to produce an integer 3 00:00:10,210 --> 00:00:11,210 answer. 4 00:00:11,210 --> 00:00:16,650 Kleene, Post and Turing were all students of Alonzo Church at Princeton University in 5 00:00:16,650 --> 00:00:18,990 the mid-1930's. 6 00:00:18,990 --> 00:00:22,860 They explored many other formulations for modeling computation: 7 00:00:22,860 --> 00:00:28,820 recursive functions, rule-based systems for string rewriting, and the lambda calculus. 8 00:00:28,820 --> 00:00:34,120 They were all particularly intrigued with proving the existence of problems unsolvable 9 00:00:34,120 --> 00:00:36,220 by realizable machines. 10 00:00:36,220 --> 00:00:41,700 Which, of course, meant characterizing the problems that could be solved by realizable 11 00:00:41,700 --> 00:00:43,900 machines. 12 00:00:43,900 --> 00:00:48,850 It turned out that each model was capable of computing *exactly* the same set of integer 13 00:00:48,850 --> 00:00:50,350 functions! 14 00:00:50,350 --> 00:00:54,870 This was proved by coming up with constructions that translated the steps in a computation 15 00:00:54,870 --> 00:00:57,420 between the various models. 16 00:00:57,420 --> 00:01:02,460 It was possible to show that if a computation could be described by one model, an equivalent 17 00:01:02,460 --> 00:01:06,530 description exists in the other model. 18 00:01:06,530 --> 00:01:11,390 This lead to a notion of computability that was independent of the computation scheme 19 00:01:11,390 --> 00:01:13,590 chosen. 20 00:01:13,590 --> 00:01:19,650 This notion is formalized by Church's Thesis, which says that every discrete function computable 21 00:01:19,650 --> 00:01:24,789 by any realizable machine is computable by some Turing Machine. 22 00:01:24,789 --> 00:01:30,610 So if we say the function f(x) is computable, that's equivalent to saying that there's a 23 00:01:30,610 --> 00:01:40,200 TM that given x as an input on its tape will write f(x) as an output on the tape and halt. 24 00:01:40,200 --> 00:01:45,890 As yet there's no proof of Church's Thesis, but it's universally accepted that it's true. 25 00:01:45,890 --> 00:01:51,440 In general "computable" is taken to mean "computable by some TM". 26 00:01:51,440 --> 00:01:56,590 If you're curious about the existence of uncomputable functions, please see the optional video at 27 00:01:56,590 --> 00:01:58,960 the end of this lecture. 28 00:01:58,960 --> 00:02:05,580 Okay, we've decided that Turing Machines can model any realizable computation. 29 00:02:05,580 --> 00:02:10,229 In other words for every computation we want to perform, there's a (different) Turing Machine 30 00:02:10,229 --> 00:02:12,169 that will do the job. 31 00:02:12,169 --> 00:02:16,170 But how does this help us design a general-purpose computer? 32 00:02:16,170 --> 00:02:22,200 Or are there some computations that will require a special-purpose machine no matter what? 33 00:02:22,200 --> 00:02:25,900 What we'd like to find is a universal function U: 34 00:02:25,900 --> 00:02:32,930 it would take two arguments, k and j, and then compute the result of running T_k on 35 00:02:32,930 --> 00:02:34,290 input j. 36 00:02:34,290 --> 00:02:40,319 Is U computable, i.e., is there a universal Turing Machine T_U? 37 00:02:40,319 --> 00:02:47,780 If so, then instead of many ad-hoc TMs, we could just use T_U to compute the results 38 00:02:47,780 --> 00:02:50,409 for any computable function. 39 00:02:50,409 --> 00:02:52,349 .249 Surprise! 40 00:02:52,349 --> 00:02:55,389 U is computable and T_U exists. 41 00:02:55,389 --> 00:03:01,110 If fact there are infinitely many universal TMs, some quite simple. 42 00:03:01,110 --> 00:03:07,129 The smallest known universal TM has 4 states and uses 6 tape symbols. 43 00:03:07,129 --> 00:03:12,269 A universal machine is capable of performing any computation that can be performed by any 44 00:03:12,269 --> 00:03:15,480 TM! 45 00:03:15,480 --> 00:03:17,099 What's going on here? 46 00:03:17,099 --> 00:03:25,500 k encodes a "program" - a description of some arbitrary TM that performs a particular computation. 47 00:03:25,500 --> 00:03:29,859 j encodes the input data on which to perform that computation. 48 00:03:29,859 --> 00:03:37,799 T_U "interprets" the program, emulating the steps T_k will take to process the input and 49 00:03:37,799 --> 00:03:40,329 write out the answer. 50 00:03:40,329 --> 00:03:46,819 The notion of interpreting a coded representation of a computation is a key idea and forms the 51 00:03:46,819 --> 00:03:51,879 basis for our stored program computer. 52 00:03:51,879 --> 00:03:57,439 The Universal Turing Machine is the paradigm for modern general-purpose computers. 53 00:03:57,439 --> 00:04:02,790 Given an ISA we want to know if it's equivalent to a universal Turing Machine. 54 00:04:02,790 --> 00:04:10,439 If so, it can emulate every other TM and hence compute any computable function. 55 00:04:10,439 --> 00:04:13,849 How do we show our computer is Turing Universal? 56 00:04:13,849 --> 00:04:18,870 Simply demonstrate that it can emulate some known Universal Turing Machine. 57 00:04:18,870 --> 00:04:24,780 The finite memory on actual computers will mean we can only emulate UTM operations on 58 00:04:24,780 --> 00:04:29,840 inputs up to a certain size but within this limitation we can show our 59 00:04:29,840 --> 00:04:35,020 computer can perform any computation that fits into memory. 60 00:04:35,020 --> 00:04:40,960 As it turns out this is not a high bar: so long as the ISA has conditional branches 61 00:04:40,960 --> 00:04:45,020 and some simple arithmetic, it will be Turing Universal. 62 00:04:45,020 --> 00:04:49,789 This notion of encoding a program in a way that allows it to be data to some other program 63 00:04:49,789 --> 00:04:52,110 is a key idea in computer science. 64 00:04:52,110 --> 00:04:58,340 We often translate a program Px written to run on some abstract high-level machine (eg, 65 00:04:58,340 --> 00:05:05,060 a program in C or Java) into, say, an assembly language program Py that can be interpreted 66 00:05:05,060 --> 00:05:06,740 by our CPU. 67 00:05:06,740 --> 00:05:10,389 This translation is called compilation. 68 00:05:10,389 --> 00:05:14,800 Much of software engineering is based on the idea of taking a program and using it as as 69 00:05:14,800 --> 00:05:19,110 component in some larger program. 70 00:05:19,110 --> 00:05:24,159 Given a strategy for compiling programs, that opens the door to designing new programming 71 00:05:24,159 --> 00:05:29,720 languages that let us express our desired computation using data structures and operations 72 00:05:29,720 --> 00:05:34,139 particularly suited to the task at hand. 73 00:05:34,139 --> 00:05:39,229 So what have learned from the mathematicians' work on models of computation? 74 00:05:39,229 --> 00:05:44,280 Well, it's nice to know that the computing engine we're planning to build will be able 75 00:05:44,280 --> 00:05:49,030 to perform any computation that can be performed on any realizable machine. 76 00:05:49,030 --> 00:05:55,419 And the development of the universal Turing Machine model paved the way for modern stored-program 77 00:05:55,419 --> 00:05:56,729 computers. 78 00:05:56,729 --> 00:06:00,589 The bottom line: we're good to go with the Beta ISA!