0% found this document useful (0 votes)
20 views13 pages

Recursive Functions 2

Uploaded by

coorg1415photos
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views13 pages

Recursive Functions 2

Uploaded by

coorg1415photos
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 13

Primitive Recursive Functions

1
Preliminaries: partial and total functions
● The domain of a partial function on set A contains the subset of A.
● The domain of a total function on set A contains the entire set A.

● A partial function f is called partially computable if there is


some program that computes it. Another term for such
functions partial recursive.

● Similarly, a function f is called computable if it is both total


and partially computable. Another term for such function is
recursive.
2
Composition
●Let f : A → B and g : B → C
● Composition of f and g can then be expressed as:
g ͦ f:A→C
(g ͦ f)(x) = g(f(x))
h(x) = g(f(x))

●NB: In general composition is not commutative:


( g ͦ f )(x) ≠ ( f ͦ g )(x) 3
Composition
●Definition: Let g be a function containing k
variables and f1 ... fk be functions of n variables, so
the composition of g and f is defined as:
h(0) = k
Base step
h( x1, ... , xn) = g( f1(x1 ,..., xn), … , fk(x1 ,..., xn) )
Inductive step

Example: h(x , y) = g( f1(x , y), f2(x , y), f3(x , y) )


● h is obtained from g and f1... fk by composition.
● If g and f1...fk are (partially) computable, then h is 4

(partially) computable. (Proof by construction)


Recursion
● From programming experience we know that recursion refers
to a function calling upon itself within its own definition.

● Definition: Let g be a function containing k variables then


h is obtained through recursion as follows:
h(x1 , … , xn) = g( … , h(x1 , … , xn) )
Example: x + y
f( x , 0 ) = x
(1)

f(x , y+1 ) = f( x , y ) + 1 (2)


5

Input: f ( 3, 2 ) => f ( 3 , 1 ) + 1 => ( f ( 3 , 0 ) + 1 ) + 1 => ( 3 + 1 ) + 1 => 5


PRC: Initial functions
● Primitive Recursively Closed (PRC) class of functions.
● Initial functions: s(x) = x + 1 succ

n(x) = 0 zero

ui (x1 , … , xn) = xi projn


● Example of a projection function: u2 ( x1 , x2 , x3 , x4 , x5 ) = x2

● Definition: A class of total functions C is called PRC² class if:


● The initial functions belong to C.
● Function obtained from functions belonging to C by
either composition or recursion belongs to C. 6
PRC: primitive recursive functions
● There exists a class of computable functions that is a
PRC class.
● Definition: Function is considered primitive
recursive if it can be obtained from initial
functions and through finite number of
composition and recursion steps.
● Theorem: A function is primitive recursive iff it
belongs to the PRC class. (see proof in chapter 3)
● Corollary: Every primitive recursive function is 7

computable.
Primitive recursive functions: sum
● We have already seen the addition function, which can
be rewritten in LRR as follows:

f( x , 0 ) = x
sum( x, succ(y) ) => succ( sum( x , y)) ;
sum( x , 0 ) => x ; f(x , y+1 ) = f( x , y ) + 1

Example: sum(succ(0),succ(succ(succ(0)))) => succ(sum(succ(0),succ(succ(0)))) =>


succ(succ(sum(succ(0),succ(0)))) => succ(succ(succ(sum(succ(0),0) =>
succ(succ(succ(succ(0))) => succ(succ(succ(1))) => succ(succ(2)) => succ(3) => 4

NB: To prove that a function is primitive recursive you need show that it
can be obtained from the initial functions using only concatenation and 8
recursion.
Primitive recursive functions: multiplication
h( x , 0 ) = 0
h( x , y + 1) = h( x , y ) + x
● In LRR this can be written as:
mult(x,0) => 0 ;
mult(x,succ(y)) => sum(mult(x,y),x) ;

● What would happen on the following input?


mult(succ(succ(0)),succ(succ(0)))
9
Primitive recursive functions: factorial
0! = 1
( x + 1 ) ! = x ! * s( x )

●LRR implementation would be as follows:


fact(0) => succ(null(0)) ;
fact(succ(x)) => mult(fact(x),succ(x)) ;

Output for the following? fact(succ(succ(null(0))))

10
Primitive recursive functions:
power and predecessor
Power function In LRR the power function can
be expressed as follows:

pow(x,0) => succ(null(0)) ;


pow(x,succ(y)) => mult(pow(x,y),x) ;

Predecessor
In LRR the predecessor is as follows:
function
pred(1) => 0 ;
p (0) = 0
p(t+1)=t pred(succ(x)) => x ;

11
Primitive recursive functions:
∸, | x – y | and α
dotsub(x,x) => 0 ;
x∸0=x dotsub(x,succ(y)) => pred(dotsub(x,y)) ;

x ∸ ( t + 1) = p( x ∸ t ) What would be the output?


● dotsub(succ(succ(succ(0))),succ(0))

|x–y|=(x∸y)+(y∸x) abs(x,y) => or(dotsub(x,y),dotsub(y,x)) ;

α(x) = 1 ∸ x α(x) => dotsub(1,x) ;

Output for the following?


● a(succ(succ(0)))
12
● a(null(0))
Primitive recursive functions
x+y f( x , 0 ) = x
f( x , y + 1 ) = f( x , y ) + 1
x*y h( x , 0 ) = 0
h( x , y + 1 ) = h( x , y ) + x
x! 0! = 1
( x + 1 )! = x! * s(x)
x^y x^0 = 1
x^( y + 1 ) = x^y * x
p(x) p( 0 ) = 0
p( x + 1 ) = x
x∸y x∸0=x
if x ≥ y then x ∸ y = x – y; else x ∸ y = 0 x ∸ ( t + 1) = p( x ∸ t )

|x–y| |x–y|=(x∸y)+(y∸x)

α(x) α(x) = 1 ∸ x 13

You might also like