Primitive rekursive Funktionen und Ackerman-Funktion

Ackermans Funktion ist eines der bekanntesten Merkmale der Informatik. Es ist mit mindestens einem fundamentalen Ergebnis und mindestens einem einfach wichtigen Ergebnis verbunden. Das grundlegende Ergebnis, um es ordentlich und unverständlich auszudrücken, ist folgendes: Es gibt überall eine bestimmte berechenbare Funktion, die nicht primitiv rekursiv ist. Ein wichtiges Ergebnis ist, dass der Wald disjunkter Mengen (auch als disjunkte Mengenvereinigung bezeichnet ) sehr schnell ist .


Ich mag es wirklich, die Funktion von Ackerman zu studieren, als Alles, was damit verbunden ist, ist sehr schön und elegant. Das oben aufgezeichnete fundamentale Ergebnis ist also viel einfacher zu verstehen, als es scheint.


Aus dem folgenden Text erfahren Sie, was primitive rekursive Funktionen sind und wie Sie herausfinden, dass die Akkerman-Funktion für sie nicht gilt. Und natürlich wird dieser Text Sie davon überzeugen, dass es sich um ein unglaublich schönes Design und eine unglaublich schöne Argumentation handelt!


1. Warum es interessant sein kann


Die Diskussion der Beziehung zwischen primitiven rekursiven Funktionen und der Ackerman-Funktion ist ein Beispiel für die Lösung eines Standardproblems in der Berechenbarkeitstheorie: Ein bestimmtes Berechnungsmodell, eine bestimmte Funktion sind angegeben, und es muss bestimmt werden, ob diese Funktion in diesem Modell berechenbar ist.


Andere ähnliche Beispiele sind beispielsweise mit der algorithmischen Entscheidbarkeit , der Äquivalenz verschiedener Rechenmodelle (Turing-Maschinen, teilweise rekursive Funktionen, normale Markov-Algorithmen usw.) verbunden. Und durch sie sind wir bereits mit einem völlig praktischen Definitionsbereich für die Vollständigkeit von Programmiersprachen, äquivalenten Transformationen von Programmtexten und anderen interessanten Dingen verbunden.


Ackermans Funktion scheint speziell geschaffen worden zu sein, um ein elegantes Beispiel für die Lösung solcher Probleme zu sein. Sie werden es bald sehen.


2. Ackerman-Funktion


, « ». , , , .


a0,a1,...,an,.... :


a0(x)=x+1


ai+1(x)=ai[x+2](x)


f[n](x)=f(f(...(f(x))...))n, n. , : , x+2xx.


, — , .


:


def Foo(number, argument):
    if number == 0:
        return argument + 1

    result = argument
    for i in range(argument + 2):
        result = Foo(number - 1, result)

    return result

ai(x)Foo(i, x).


. -, : ai(x)>xix. , , a0(x)=x+1>x, a0.


-, : ai+1(x)>ai(x)ix. , — , . :


ai+1(x)=ai[x+2](x)ai[2](x)=ai(ai(x))>ai(x)


,


ai+1(x)ai(ai(x))


3. - ()


« ». — . : , , , .


- ? «». - :


  1. , : Null(x1,x2,...,xk)=0
  2. : S(x)=x+1
  3. -: Pki(x1,x2,...,xk)=xi

. « »:


  • . fk, g1,g2,...,gkn, nF: n, kg1,...,gk, f. !

F(x1,...,xn)=f(g1(x1,...,xn),...,gk(x1,...,xn))


  • . fk, gk+2, , :

F(x1,...,xk,0)=f(x1,...,xk)


F(x1,...,xk,y+1)=g(x1,...,xk,y,F(x1,...,xk,y))


, . : , . : , , . , .. , .


, — , , .


.


, . , . , :


Sum(x,0)=P11(x)


Sum(x,y+1)=S(P33(x,y,Sum(x,y)))


— , . , . Sum(x,0)=x, , .. x. P11. , : x,y,Sum(x,y). , P33, .


:


Mult(x,0)=Null(x)


Mult(x,y+1)=Sum(P31(x,y,Mult(x,y)),P33(x,y,Mult(x,y)))


- . , ! , :


Fib0=0
Fib1=1
Fibn+2=Fibn+Fibn+1


, ; , !


, . , F, . , G, , :


F(n)=Fibn
G(n)=Fibn+1


F0, 1, 1, 2, 3, 5; G, , 1, 1, 2, 3, 5, 8. :
G(n+1)=G(n)+F(n)
F(n+1)=G(n)


:


F(0)=Null()


G(0)=S(Null())


F(y+1)=P21(G(y),F(y))


G(y+1)=Sum(F(y),G(y))


:


def G(x):
    if x == 0:
        return 1
    return G(x - 1) + F(x - 1)

def F(x):
    if x == 0:
        return 0
    return G(x - 1)

, , , , n- - !


4. ,


, - « » . : - kfn, :


f(x1,...,xk)<an(max(x1,...,xk))


Solche Aussagen für die Analysis zu beweisen, ist eine Freude. Zuerst beweisen wir es für grundlegende Funktionen und überprüfen dann, ob die Eigenschaft beim Anwenden von Operationen erhalten bleibt.


Nun, für grundlegende Operationen ist alles klar:


Null(x1,...,xk)=0<max(x1,...,xk)+1=a0(max(x1,...,xk))


S(x)=x+1=a0(x)<a1(x)


Pki(x1,...,xk)=ximax(x1,...,xk)<a0(max(x1,...,xk))


Im ersten Fall verwenden wir die Tatsache, dass die Identität Null immer kleiner als Eins ist, und sogar die Funktion a0fügt seinem Argument eins hinzu (denken Sie daran: Wir befinden uns in einer diskreten Welt, hier sind alle Argumente entweder natürliche Zahlen oder Null). Im zweiten Fall ist das Hinzufügen von eins genau das Ergebnis der Anwendung der Funktiona0Das ist monoton weniger als eine Funktion a1. Im dritten Fall gibt die Projektionsfunktion eines ihrer Argumente zurück, das genau kleiner als das Maximum aller Argumente ist und um eins erhöht wird.


. : , , , , .


Ff,g1,...,gk, aM. , F. :


F(x1,...,xn)=f(g1(x1,...,xn),...,gk(x1,...,xn))<


<aM(max(g1(x1,...,xn),...,gk(x1,...,xn)))<


<aM[max(aM(max(x1,...,xn)),...,aM(max(x1,...,xn)))]


<aM(aM(max(x1,...,xn)))aM+1(max(x1,...,xn))


f, gi, k, . aM, aM+1.


Ffg, aM.


, , . : f:


F(x1,...,xk,0)=f(x1,...,xk)<aM(max(x1,...,xk))


, , :


F(x1,...,xk,1)=g(x1,...,xk,0,F(x1,...,xk,0))<


<aM(max(x1,...,xk,0,aM(max(x1,...,xk)))<


<aM(aM(max(x1,...,xk))=aM[2](max(x1,...,xk))


F, g. aM: ,


aM(max(x1,...,xk))>max(x1,...,xk,0)


, ,


F(x1,...,xk,y)<aM[y+1](max(x1,...,xk))


,


aM[y+1](max(x1,...,xk))<aM+1(max(x1,...,xk,y))


:


F(x1,...,xk,y)<aM+1(max(x1,...,xk,y))


. , , .


5. ,


, , - aM, . :


A(n)=an(n)


, , : , — . , .


: A-.


, , -. 4 M, A(x)<aM(x)x. , :


A(M+1)=aM+1(M+1)>aM(M+1)


, -. - , ! .


6. ?


, , - , . , . nn. ,


nn...nn


mit einer vorbestimmten Anzahl von Exponenten ist primitiv rekursiv. Ich werde nicht faul sein und es beweisen. Zu Beginn werde ich eine Funktion erstellenny::


Pow(n,0)=S(Null())


Pow(n,y+1)=Mult(P31(n,y,Pow(n,y)),P33(n,y,Pow(n,y)))


Jetzt benutze ich es, um eine Funktion zu definieren nn::


SPow(n)=Pow(P11(n),P11(n))


Wie Sie sehen können, erfolgt dies durch einfaches Ersetzen. Jetzt gibt es keine Schwierigkeit mehr, eine Funktion zu definierennnn::


SSPow(n)=Pow(P11(n),SPow(n))


In Analogie können wir eine Funktion konstruieren, in der nzur Macht erhoben nfünfmal, zehnmal, hundertmal, eine Millionmal. Ackermans Funktion wächst schneller als jede dieser Funktionen. So schnell wächst es!

Source: https://habr.com/ru/post/undefined/


All Articles