Chương 5 của bài giảng Lý thuyết tính toán giới thiệu về hàm đệ quy. Chương này trình bày một số nội dung cơ bản như sau: Gödel''s incompleteness theorem; zero, successor, projector functions; functional composition; primitive recursion; proving functions are primitive recursive, Ackermann''s function. Mời các bạn cùng tham khảo.
Chương Hàm đệ đệ quy Recursive Function Theory Lý thuyế ết tí ính tố án thuy ttính to thuyết tốn Gưdel's Incompleteness Theorem Zero, Successor, Projector Functions Functional Composition PGS.TS Phan Huy Khá Khánh Primitive Recursion khanhph@vnn.vn Proving Functions are Primitive Recursive Ackermann's Function (Theory (Theory of of Computation) Computation) Chương H àm đệ Hàm đệ quy 2/32 2/ 32 Maths Functions Computation An example function: Get N a set of Natural Numbers : Range Domain N N f(n) = n2 + N = { 0, 1, 2, … } Building the functions on N For examples : x+y x*y xy x2 + y2 10 f(3) = 10 We need a way to define functions are computable functions We need a set of basic functions 3/32 3/ 32 4/32 4/ 32 Complicated Functions Function is computable Factorial function: x ( y + z) n! = n (n-1) (n-2) … is complicated functions from the addition and multiplication function is computable : is computable: there is a sequence of multiplication operations there is a sequence of operations of the addition and the multiplication The factorial function is not alone the composition of the addition and multiplication operations The number of multiplication oprations depends on Attention : n There are also many functions that are not composed from the basis functions 5/32 5/ 32 6/32 6/ 32 Recursivity Function is computable Why is computable? Factorial function is a recursive definition: 0! =1 (n + 1) ! = (n + 1) n ! Uses the recursivity to define some functions f(n + 1) is defined from: f(n) Start at: f(0) Basic primitive recursive functions: Computation on the natural number N Primitive Recursive Function: Any function built from the basic primitive recursive functions 7/32 7/ 32 Computable functions Gödel's Incompleteness Theorem “Any interesting consistent system must be incomplete; that is, it must contain some unprovable propositions” propositions” Basic set of Recursive primitive functions Primitive Recursive Functions : Mechanism for composition of functions by combining previously-defined functions composition Clearly 8/32 8/ 32 Hierarchy of Functions PrimitivePrimitive-Recursive Functions Recursive ( (-recursive) Functions and/or recursive definitions they are infinite in number Interesting wellwell-defined Functions but "unprovable "unprovable"" BB Function Some can have any arity (unary, binary, …) f(n1, n2, …, nm), m 9/32 9/ 32 Primitive Recursive Functions 10/32 10/ 32 Zero, Successor, Projector Functions Defined over the domain I = set of all nonnon-negative integers or domain I×I or domain I×I×I, etc etc Zero function: z(x) (x) = 0, for all x I Successor function: s(x) (x) = x+1 Definition: Functions are said to be Primitive Recursive if they can be built Projector functions: p1(x1, x2) = x1 from the basic functions (zero, successor, and projection) using functional composition and/or primitive recursion p2(x1, x2) = x2 11/32 11/ 32 12/32 12/ 32 Example of Primitive Recursives Subtraction pred(0) = pred(x+1) = x Constants are Primitive Recursive: = s(s(z(x))) s(s(z(x))) = s(s(s(z(x)))) s(s(s(z(x)))) = s(s(s(s(s(z(x)))))) monus(x, 0) 0) = x // called subtr in text monus(x, y+1) y+1) = pred(monus(x, y)) y)) absdiff(x, y) y) = monus(x, y) y) + monus(y, x) x) Addition & Multiplication add(x, 0) = x add(x, y+1) = s(add(x, y)) mult(x, 0) = mult(x, y+1) = add(x, mult(x, y)) 13/32 13/ 32 14/32 14/ 32 Operators Other Primitive Recursive Functions Relational Operators equal(x, y) y) = test(absdiff(x, y)) y)) geq(x, y) y) = test(monus(y, x)) x)) leq(x, y) y) = test(monus(x, y)) y)) Factorial & Exponentiation fact(0) = fact(n+1) = mult(s(n), fact(n)) exp(x, 0) = exp(x, n+1) = mult(x, exp(x, n)) Test for Zero (Logical Complement) test(0) test(0) = test(x+1) = gt(x, y) y) = test(leq(x, y)) y)) lt(x, y) y) = test(geq(x, y)) Minimum & Maximum min(x, y) = lt(x, y)*x + geq(x, y)*y max(x, y) = geq(x, y)*x + lt(x, y)*y 15/32 15/ 32 Division remaind(numerator, denominator) = rem(denominator, numerator) rem(x, 0) = rem(x, y+1) = s(rem(x, y))*test(equal(x, s(rem(x, y)))) div(numerator, denominator) = dv(denominator, numerator) dv(x, 0) = dv(x, y+1) = dv(x, y) + test(remaind(y+1, x)) 16/32 16/ 32 Test for Prime numdiv(x) numdiv(x) = divisors_leq(x, x) x) divisors_leq(x, 0) 0) = divisors_leq(x, y+1) = divisors_leq(x, y) y) + test(remaind(x, y+1)) y+1)) Square Root sqrt(0) = sqrt(x+1) = sqrt(x) + equal(x+1, (s(sqrt(x))*s(sqrt(x)))) is_prime(x) is_prime(x) = equal(numdiv(x), 2) { a b mod c } congruent(a, b, c) = equal(remaind(a, c), remaind(b, c)) 17/32 17/ 32 18/32 18/ 32 Greatest Common Divisor Functional Composition (can’ (can’t use Euclidean Algorithm— Algorithm—not P.R.) gcd(a, 0) 0) = a gcd(a, b+1) b+1) = find_gcd(a, b+1, b+1) b+1) f(x, y) y) = h(g1 (x, y), g2(x, y)) y)) find_gcd(a, b, 0) 0) = find_gcd(a, b, c+1) c+1) = (c+1)*test_rem(a, (c+1)*test_rem(a, b, c+1) c+1) + find_gcd(a, b, c)*test(test_rem(a, b, c+1)) c+1)) from previously defined functions g1, g2, and h e.g.: test_rem(a, b, c) c) = test(remaind(a, c))*test(remaind(b, c)) c)) min(x, y) y) = lt(x, y)*x y)*x + geq(x, y)*y y)*y h(x, y) y) = add(x, y) y) g1(x, y) y) = mult(lt(x, y), p1(x, y)) y)) g2(x, y) y) = mult(geq(x, y), p2(x, y)) y)) h = mult(), g 1=lt(), g2=p1() h = mult(), g 1=geq(), g2=p2() 19/32 19/ 32 20/32 20/ 32 Ackermann's Function Primitive Recursion We can actually give an example of a total Turing-computable function that is not primitive recursive, namely Ackermann’s function: Composition: f(x, 0) 0) = g1(x) f(x, y+1) y+1) = h(g2(x, y), f(x, y) y)) A(0, n) = n+1 A(m+1, 0) = A(m, 1) A(m+1, n+1) = A(m, A(m+1, n)) For example, A(0, 0) = A(0, 1) = A(1, 1) = A(0, A(1, 0)) = A(0, A(0, 1)) = A(0, 1) + = Note: Last argument defined at zero and y+1 only e.g.: exp(x, 0) 0) = exp(x, n+1) n+1) = x * exp(x, n) g1(x) = s(z(x)) h(x, y) y) = mult(x, y) y) g2(x, y) y) = p1(x, y) y) 21/32 21/ 32 22/32 22/ 32 Ackermann's Function Ackermann's Function Theorem For every unary primitive recursive function f, there is some m such that f(m) < A(m, m) So A cannot be primitive recursive itself Ackermann's Function is NOT Primitive Recursive 23/32 23/ 32 Just because it is not defined using the "official" rules of primitive recursion is not a proof that it IS NOT primitive recursive Perhaps there is another definition that uses primitive recursion (NOT!) Proof is beyond the scope of this course… course… 24/32 24/ 32 "Meaning" of Ackermann's Function Rates of growth (addition, multiplication, exponentiation, tetration) tetration) Growth of Ackerman’ Ackerman’s function: A(0, n) = n+1 ; A(3, n) = 2n + – A(1,0) 2; A(1,1) 3; A(1,2 ) 4; A(1,n) (n 3) 3 A(2,0) 3; A(2,1) 5; A(2,2) 7; A(2,n) *(n 3) A(1, A(1, n) = n+2 ; A(4, A(4, n) = - A(2, A(2, n) = 2n+3 with n powers of Ackerman’ Ackerman’s function and friends • A(m.n) n3 A(3,0) 5; A(3,1) 13; A(3,2) 29; A(3,3) 61; A(3, 4) 125; A(3,n) 3 Iterated exponentials 2{n times} 65534 3; A(4, n) 2 nn n Exponential functions 2 A(4, 0) 13; A(4,1) 65531; A(4, 2) • • 3n 3 • n! • nn Polynomial functions • 2n+5 • n3+3n2+2n+1 25/32 25/ 32 26/32 26/ 32 Countable Sets Recursively Enumerable Languages Countable if it can be put into a 11-toto-1 correspondence with the positive integers A language is said to be recursively enumerable if there exists a Turing machine that accepts it You should already be familiar with the enumeration procedure for the set of RATIONAL numbers [diagonalization, page 278] Quick review… review… This says nothing about what the machine will if it is presented with a word that is not in the language You should already be familiar with the fact (and proof) that the REAL numbers are NOT countable That is, if the accepting machine is started on a word in the language, it will halt in qf (i.e whether it halts in a nonnon-final state or loops) Quick review… review… 27/32 27/ 32 28/32 28/ 32 Existence of Languages that are not Recursively Enumerable Recursive Languages A language, L, is recursive if there exists a Turing machine that accepts L and halts on every w in + That is, there exists a membership decision procedure for L Let S be an infinite countable set Then its powerset 2S is not countable Proof by diagonalization Recall the fact that the REAL numbers are not countable For any nonempty , there exist languages that are not recursively enumerable 29/32 29/ 32 Every subset of * is a language Therefore there are exactly 2 * languages However, there are only a countable number of Turing machines Therefore there exist more languages than Turing machines to accept them 30/32 30/ 32 Recursively Enumerable but not Recursive We can list all Turing machines that eventually halted on a given input tape (say blank) Recall the enumeration procedure for TM’ TM’s from last period Once a string of 0’ 0’s and 1’ 1’s was verified as a valid TM, we would simply run it (while nonnon-deterministically continuing to list other machines) [Note how long this would take!] A halt on the part of the simulation (recall the Universal Turing Machine) would trigger adding the TM in question to the list of those that halted (copying it to another tape?) However, we cannot determine (and (and always halt) halt) whether or not a given TM will halt on a blank tape Stay tuned for the unsolvability of the Halting Problem The hierarchy of functions Recall that a function f : Nk N is total if f is defined on every input from Nk and is partial if we don’t insist that it has to be total All partial functions from Nk to N The computable partial functions •? • n The computable total functions • A(m,n) The primitive recursive functions • add(m,n) add(m,n) 31/32 31/ 32 32/32 32/ 32 ... 1 25; A(3,n) 3 Iterated exponentials 2{n times} 655 34 3; A(4, n) 2 nn n Exponential functions 2 A(4, 0) 13; A(4,1) 655 31; A(4, 2) • • 3n 3 • n! • nn Polynomial functions • 2n +5. .. Polynomial functions • 2n +5 • n3+3n2+2n+1 25/ 32 25/ 32 26/32 26/ 32 Countable Sets Recursively Enumerable Languages Countable if it can be put into a 11-toto-1 correspondence with the positive integers... functions by combining previously-defined functions composition Clearly 8/32 8/ 32 Hierarchy of Functions PrimitivePrimitive-Recursive Functions Recursive ( (-recursive) Functions and/or