1
CD5560
FABER
Formal Languages, Automata and Models of Computation
Lecture 13
Mälardalen University
2005
2
Rices sats
Om är en mängd av Turing-accepterbara språk som innehåller något men inte alla sådana språk, så kan ingen TM avgöra för ett godtyckligt Turing-accepterbart språk L om L tillhör eller ej.
(Varje icke-trivial egenskap av Turing-accepterbara språk är oavgörbar.)
3
Avgörbart? Motivera!
a) ”Är L(M) oändlig?” Givet att M är en godtycklig DFA.
b) ”Är L(M) oändlig?” Givet att M är en godtycklig TM.
Svar
a) AVGÖRBART! Man behöver bara kontrollera om M innehåkker någon slinga på väg till acceptans, vilket kan göras i ändligt många steg. Formellt: Se kursboken uppgift 7.2.
b) OAVGÖRBART! Följer av Rices sats, om man väljer som mängden av alla oändliga Turingaccepterbara språk, eftersom denna mängd är icketrivial.
Exempel
4
Content
RecursionPrimitivt rekursiva funktionerRekursiva funktionerFör varje TM finns det en rekursiv funktionFör varje rekursiv funktion finns det en TM
5
Recursion
In computer programming, recursion is related to performing computations in a loop.
6
Recursion in Problem Modelling
Reducing the complexity by
• breaking up computational sequences into its simplest forms.
• synthesizing components into more complex objects by replicating simple component sequences over and over again.
7
"A reduction is a way of converting one problem into another problem in such a way that a solution to the second problem can be used to solve the first problem."
Michael Sipser, Introduction to the Theory of Computation
8
Recursion can be seen as concept of well-defined self-reference.
We use recursion frequently. Consider, for example, the following hypothetical “definition of a Jew”. I found it on web, as a joke.
“Somebody is a Jew if she is Abraham's wife Sarah, or if his or her mother is a Jew.”
(My digression: I wonder what about Abraham?)
9
So if I want to know if I am a Jew, I look at this definition. I'm not Sarah, so I need to know whether my mother is a Jew.
How do I know about my mother? I look at the definition again. She isn't Sarah either, so I ask about her mother.
I keep going back through the generations - recursively.
10
Self-referential definitions can be dangerous if we're not careful to avoid circularity.
The definition ''A rose is a rose'‘* just doesn't cut it.
This is why our definition of recursion includes the word well-defined.
*Know Gertrude Stein? '' A rose is a rose is a rose''
11
We can write pseudocode to determine whether somebody is an immigrant:
FUNCTION isAnImmigrant(person): IF person immigrated herself, THEN:
return true ELSE:
return isAnImmigrant(person's parent) END IF
This is a recursive function, since it uses itself to compute its own value.
[According to some authors (Rudbeckius) Adam and Eve were Swedish.]
Yet another recursive definition: an immigrant…
12
Functions
From math classes, we have seen many ways of defining and combining numerical functions.– Inverse f-1
– Composition f ◦ g– Derivatives f´(x), f´´(x), …– Iteration f1(x), f2(x), f3(x), f4(x), …
– …
13
Functions
Look at what happens when we use only some of these.
– How can we define standard interesting functions?
– How do these relate to e.g. TM computations? We have seen TMs as functions. They are cumbersome!
As alternative, look at a more intuitive definition of functions.
14
Notation
For brevity, limit to functions on natural numbers
N = {0,1,2,…}
Notation will also use n-tuples of numbers
(m1, …, mn)
15
Natural Numbers
Start with standard recursive definition of natural numbers (remember Peano?):
A natural number is either
• 0, or• successor(n), where n is a natural number.
16
What is a recurrence?
A recurrence is a well-defined mathematical function written in terms of itself.
It is a mathematical function defined recursively.
17
Fibonacci sequence
1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...
The first two numbers of the sequence are both 1, while each succeeding number is the sum of the two numbers before it.
(We arrived at 55 as the tenth number, since it is the sum of 21 and 34, the eighth and ninth numbers.)
18
F is called a recurrence, since it is defined in terms of itself evaluated at other values.
F(0) = 1 F(1) = 1 (base cases)
F(n) = F(n - 1) + F(n - 2)
19
A recursive process is one in which objects are defined in terms of other objects of the same type.
Using some sort of recurrence relation*, the entire class of objects can then be built up from a few initial values and a small number of rules.
Recursion & Recurrence
(*Recurrence is a mathematical function defined recursively.)
20
Computable Function
Any computable function can be programmed using while-loops (i.e., "while something is true, do something else").
For-loops (which have a fixed iteration limit) are a special case of while-loops.
Computable functions could also be coded using a combination of for- and while-loops.
21
Total Function
A function defined for all possible input values.
Primitive Recursive Function
A function which can be implemented using only for-loops.
22
103
An example function
1)( 2 nnfDomain Range
10)3( f
23
We need a way to define functions.
We need a set of basic functions.
24
Zero function: 0)( xzero
Successor function: 1)( xxsucc
Projection functions: 1211 ),( xxxp
2212 ),( xxxp
Basic Primitive Recursive Functions
25
Building functions
Composition
)),(),,((),( 21 yxgyxghyxf
26
Composition, Generally
Giveng1 : Nk N . . . gm : Nk N
f : Nm N
h(n1,…,nk) = f(g1(n1,…,nk), …, gm(n1,…,nk))
h = f ◦ (g1,…,gm) Alternate notation.
Create h : Nk N
27
Primitive Recursion “Template”
)),(),,(()1,( 2 yxfyxghyxf
)()0,( 1 xgxf
N.B. For primitive recursive functions recursion in only one argument.
28
Any function built from
the basic primitive recursive functions
is called Primitive Recursive Function.
29
0)( xzero
)())(( xzeroxsucczero
Basic Primitive Zero function
(a constant function)
0)0()1()2()3( zerozerozerozero
Example
30
Basic Primitive Identity function
...
xxidentity
xx
210)(
210
))(())((
0)0(
xidentsuccxsuccidentity
identity
Recursive definition
31
Basic Primitive Successor function
...
1321)(
210
xxsucc
xx
32
))(()( xzerosuccxone
Using Basic Primitive Zero function
and a Successor function we can construct Constant functions
etc..
))(()( xonesuccxtwo
))(()( xtwosuccxthree
333
)2(
))1((
)))0(((
))))((((
)))(((
))(()(
succ
succsucc
succsuccsucc
xzerosuccsuccsucc
xonesuccsucc
xtwosuccxthree
Example
34
A Primitive Recursive Function ),( yxadd
xxadd )0,( (projection)
)),(()1,( yxaddsuccyxadd (successor function)
35
5
)4(
))3((
)))0,3(((
))1,3(()2,3(
succ
succsucc
addsuccsucc
addsuccadd
Example
36
5
14
1)13(
1)1)0,3((
1))1,3(()2,3(
add
addadd
Example
37
Basic Primitive Predecessor function
...
1100)(
210
xxpred
xx
38
Predecessor
xxsuccpred
pred
))((
0)0(
1)( xxpred
)())((
0)0(
xGxsuccpred
pred
Predecessor is a primitive recursive function with no direct self-reference.
x) identity(G(x) templaterecursive primitive
39
Subtraction
)),(())(,(
)0,(
xysubpredxsuccysub
yysub
xyxysub ),(
)1)()1(( xyxy
40
1
)2(
))3((
)))0,3(((
))1,3(()2,3(
pred
predpred
subpredpred
subpredsub
Example
41
0)0,( xmult
)),(,()1,( yxmultxaddyxmult
),( yxmultA Primitive Recursive Function
))()1(( xxyyx
42
x
xxadd
xxaddxadd
xxaddxaddxadd
xaddxaddxaddxadd
xmultxaddxaddxaddxadd
xmultxaddxaddxadd
xmultxaddxadd
xmultxaddxmult
4
)3,(
))2,(,(
))),(,(,(
))))0,(,(,(,(
)))))0,(,(,(,(,(
))))1,(,(,(,(
)))2,(,(,(
))3,(,()4,(
Example
43
1),0( xexp
)),,((),1( yyxexpmultyxexp
),( yxexpA Primitive Recursive Function
)( 1 yyy xx
44
Example
4
)),(
)),,((
)),),,(((
)),),),,1((((
)),),),),,0(((((
)),),),,1((((
)),),,2(((
)),,3((),4(
yyyyy
yyyymult
yyyymultmult
yyyymultmultmult
yyyymultmultmultmult
yyyyyexpmultmultmultmult
yyyyexpmultmultmult
yyyexpmultmult
yyexpmultyexp
45
Primitive Recursion: Logic
A predicate (Boolean function) with output in the set {0,1} which is interpreted as {yes, no}, can be used to define standard functions.– Logical connectives , ,, , …– Numeric comparisons =, < ,, …– Bounded existential quantification in, f(i)– Bounded universal quantification in, f(i)– Bounded minimization min i in, f(i)
where result = 0 if f(i) never true within bounds.
46
Recursive Predicates and?zero ?_ zeronon
1110))?(?(?_
0001)),(()?(
3210
xzerozerozeronon
xxonesubxzero
x
47
),( yxand ),( yxor ),( yxless )(xnon returns
1
0
00 yx 00 yx
00 yx00 yx
yx
yx
0x
0x
More Recursive Predicates
))),(?((),(
))),(?((),(
))),(?((),(
yxsubzerononyxless
yxaddzerononyxor
yxmultzerononyxand
48
)),((),(_ yxequalnonyxequalnon
))),(()),,(((),( xylessnonyxlessnonandyxequal
More Recursive Predicates...
49
Example
Recursive predicates can combine into powerful functions.
What does this compute?
Tests primality.
???(n) = in, jn, ((i=1 j=n) (j=1 i=n) ijn)
50
prime(n) = n2 i<n, (i1 mod(n,i) > 0)
mod(m,n) = if n>0 then (min i im, div(m,n)n+i=m) else 0
div(m,n) = if n>0 then (min i im, (i+1)n>m) else 0
ExampleAnother version of prime(n)
51
Function
0
0),,(
xify
xifzzyxif
if
52
yzyxsuccif
zzyif
),),((
),,0(
)(),),((
)(),,0(
yGzyxsuccif
zBzyif
identityG Bwith
our construction
primitive recursive template
)),(),,(()1,( 2 yxfyxghyxf
)()0,( 1 xgxf
53
Division example: x/4
rdqx quotient remainderx
0
1
2
3
4
5
6
7
8
0400
1401
2402
3403
0414
1415
2416
3417
0428
0
0
0
0
1
1
1
1
2
0
1
2
3
0
1
2
3
0
quotientq remainderr 4d
54
Division as Primitive Recursion
))),,((
,
),,((),(
ddxsubremain
x
dxlessifdxremain
)))),,(((
,0
),,((),(
ddxsubquotsucc
dxlessifdxquot
55
Division example: x/4
))),,((
,
),,((),(
ddxsubremain
x
dxlessifdxremain
rdqx quotient remainderx
0
1
2
3
4
5
6
7
8
0400
1401
2402
3403
0414
1415
2416
3417
0428
0
0
0
0
1
1
1
1
2
0
1
2
3
0
1
2
3
0
quotientq
remainderr
4d
)))),,(((
,0
),,((),(
ddxsubquotsucc
dxlessifdxquot
56
Division as Primitive Recursion
)0
)),,(((
),)),,(((()),((
0),0(
dxsubremainsucc
ddxremainsucclessifdxsuccremain
dremain
)),()),),((?(()),((
0),0(
dxquotdxsuccremainzeroadddxsuccquot
dquot
57
)),(?(),( dxremainzerodxdivisible
Recursive Predicate divisible
58
)),((),(_ yxequalnonyxequalnon
Recursive Predicate
)),(?(),( dxremindzerodxdivisible
59
Theorem
The set of primitive recursive functions
is countable.
Proof
Each primitive recursive function
can be encoded as a string.
Enumerate all strings in proper order.
Check if a string is a function.
60
There is a function that
is not primitive recursive.
Proof
Enumerate the primitive recursive functions,,, 321 fff
Theorem
61
Define function
1)()( ifig i
g differs from every if
g is not primitive recursive
END OF PROOF
62
A specific function that is not
primitive recursive:
Ackermann’s function:
)),(,1()1,(
)1,1()0,(
1),0(
yxAxAyxA
xAxA
yyA
Grows very fast,
faster than any primitive recursive function
63
The Ackermann function is the simplest example of a well defined total function which is computable but not primitive recursive, providing a counterexample to the belief in the early 1900s that every computable function was also primitive recursive.
64
Recursive Functions
0),(such that smallest )),(( yxgyyxgy
Ackermann’s function is a
Recursive Function
65
Primitive recursive functions
Recursive Functions
66
Primitive Recursion: Extended Example
Needs following building blocks:– constants– addition– multiplication– exponentiation– subtraction
A polynomial function:
f(x,y) = 3x7+ xy – 7y2.
67
Additionadd(m,n) = m+n
add(0,n) =add(m+1,n) =
nsucc(add(m,n))
Multiplication:mult(m,n) = mn
mult(0,n) =mult(m+1,n) =
0add(mult(m,n),n)
68
Exponentiation:exp(m,n) = nm
exp(0,n) =exp(m+1,n) =
1mult(exp(m,n),n)
= one(n)
Subtraction sub(m,n) = m-n
sub(0,n) =sub(m+1,n) =
0 = zero(n)succ(sub(m,n))
69
Primitive Recursion: Extended Example
f(x,y) = (3x7+ xy) - 7y2
f = sub◦ (add ◦ (f1,f2), f3)
f1(x,y) = mult(3,exp(7,x)) f1 = mult ◦ (three, exp ◦ (seven))
f2(x,y) = mult(x,y) f2 = mult
f3(x,y) = mult(7,exp(2,y)) f3 = mult ◦ (seven, exp ◦ (two))
f(x,y) = sub(add(f1(x,y),f2(x,y)),f3(x,y))
70
Primitive Recursion
All primitive recursive functions are total.I.e., they are defined for all values.
Primitive recursion lack some interesting functions.“True” subtraction – when using natural numbers.“True” division – undefined when divisor is 0.Trigonometric functions – undefined for some values.…
71
Partial Recursive
A function is partial recursive it can be defined by the previous constructions.
A function is recursive it is partial recursive and total.
72
Division:div(m,n) = m n
div(m,n) = min i, sub(succ(m),add(mult(i,n),n)) = 0
div(m,n) = minimum i such thati mnin m-(n-1)in+n m+1(m+1) – (in+n) 0(m+1) (in+n) = 0
Example
73
Relations Among Function Classes
Functions TMs– Define TMs in terms of the
function formers.– Straightforward, but long.
TMs Functions– Define functions where
subcomputations encode TM behavior.
– Simple encoding scheme.– Straightforward, but very
messy.
partial recursive= recognizable
recursive= decidable
primitiverecursive
74
otherwise 0,
)(
even isn if,1
neven
))(,1()1(
1)0(
kevensubkeven
even
More Examples of Primitive Recursion
A recursive function is a function that calls itself (by using its own name within its function body).
Even
75
))1(),(()1(
1)0(
xxfactmultxfact
fact
Factorials
))1)1(! nnn
76
),(),)),(((()),((
),0(),0(
),()?(
),()(
yxisSquareyxsuccsquareequaloryxsuccisSquare
yequalyisSquare
xxisSquarexsquare
xxmultxsquare
)),(,()),(,(),),,(((),(
)0,()?(
yymultxequalysuccxhxyymultlessifyxh
xhxsquare
Is a number a square?
Forward recursion (-recursion)
77
number. naturalany of square anot is 5
0))5,0(
))5,0(.......................................................................
))5,1(..........................................................................
))5,2(..........................................................................
))))5,3(),5,4(((),5,5(((
)5,4(),5,5((()5,5(
)5,5()5?(
isSquare
isSquareetc
isSquareetc
isSquareetc
isSquaresquareequalorsquareequalor
isSquaresquareequalorisSquare
isSquaresquare
78
etc
multequalhmultlessifh
hsquare
...
))0,0(,5(),1,5(),5),0,0((()0,5(
)0,5()5?(