Automaten, Spiele, und Logik Woche 13 7. Juli 2014 Inhalt der heutigen Vorlesung I Terminationsanalyse Rekursive Funktionnen fact(n)= if n==0 then 1 else n*fact(n-1) fibo(n)= if n<=1 then 1 else fibo(n-1) + fibo(n-2) ackerman(m,n)= if m==0 then n+1 elif n==0 then ackerman(m-1,1) else ackerman(m-1,ackerman(m,n-1)) mccarthy(n)= if n>100 then n-10 else mccarthy(mccarthy(n+11)) Hypothesen: Rekursion ist die einzige Quelle von einer mögliche unendliche Komputation, und Zahlen bleiben ≥ 0. Mutualle rekursion Beispiel: Zahl von geordnete Baüme mit n Zuständen. tree(n) = if n==1 then 1 else forest(n-1) forest(n) = if n==0 then 1 else sum(tree(i)*forest(n-i),i=1..n) Terminationsanalyse Entscheidungsproblem Gilt es, dass f (~ n) für irgendwelche Input n beendet? Beispiel: mccarthy terminiert, aber die folgende Variante nicht. mccarthy’(n)= if n>100 then n-10 else mccarthy’(mccarthy’(n+10)) Terminationsanalyse ist nicht einfach I unentscheidbar I I auch mit einem Orakle über die Termination gegen ein einziges Input. zu den Menschen auch schwer syracuse(n)= if n<=1 then 1 if (n mod 2)==0 then syracuse(n/2) else syracuse(3*n+1) Size-Change Termination Abstraktion Wenn g (e1 , . . . , em ) in die Definition von f (x1 , . . . , xn ) vorkommt, dann gibt es für jede i = 1, . . . , m drei Fällen: I ej = xi I man kann beweisen, dass ej < xi dann ist die Abstraktion ej = xi − 1 I ein Zahl, für den man keinen oberen Schrank in x1 , . . . , xn kennt dann ej = ω (d.h. eine beliebig grosse endliche Zahle). Weitere Simplifizierungen I Seitenkalkulation weg, Kontrol weg I Grundfallen weg I abstraktierte Funktion terminiert falls mindestens ein xi = 0 I identischen abstraktierten Aufrufen nur einmal gezählt Beispiele fact(n)= if n==0 then 1 else n*fact(n-1) wird fact(n) fact(n-1) Beispiele fact(n)= if n==0 then 1 else n*fact(n-1) wird fact(n) fact(n-1) fibo(n)= if n<=1 then 1 else fibo(n-1) + fibo(n-2) wird fibo(n) fibo(n-1) , fibo(n-1) Beispiele fact(n)= if n==0 then 1 else n*fact(n-1) wird fact(n) fact(n-1) fibo(n)= if n<=1 then 1 else fibo(n-1) + fibo(n-2) wird fibo(n) fibo(n-1) Beispiele fact(n)= if n==0 then 1 else n*fact(n-1) wird fact(n) fact(n-1) fibo(n)= if n<=1 then 1 else fibo(n-1) + fibo(n-2) wird fibo(n) fibo(n-1) ackerman(m,n)= if m==0 then n+1 elif n==0 then ackerman(m-1,1) else ackerman(m-1,ackerman(m,n-1)) wird ackerman(m,n) ackerman(m-1,ω) , ackerman(m,n-1) Übung Geben Sie die Abstraktion diese rekursive Programmen an: mccarthy(n)= if n>100 then n-10 else mccarthy(mccarthy(n+11)) tree(n) = if n==1 then 1 else forest(n-1) forest(n) = if n==0 then 1 else sum(tree(i)*forest(n-i),i=1..n) Lösung mccarthy(x) mccarthy(ω) tree(x) forest(x-1) forest(x) tree(x),forest(x-1) Termination einer Abstraktion Semantik einer Abstraktion I “,” heisst beide Kommande werden gelaufen I ω Ausdrucken : nicht deterministische Wahl einer Zahl Die Abstraktion terminiert falls auf allen Input und alle nicht-deterministischen Enstcheidungen wird ein endlicher Lauf definiert. Beispiele mccarthy(x) mccarthy(ω) termininiert nicht tree(x) forest(x-1) forest(x) tree(x),forest(x-1) terminiert ackerman(m,n) ackerman(m-1,ω) , ackerman(m,n-1) terminiert Korrektheit der Abstraktion Wir machen Terminationsanalyse auf die Abstraktion der Funktion statt der Funktion selbst. Korrektheiteigenschaft Wenn die Abstraktion terminiert auf allen Input, dann auch die ursprungliche Funktion. Model Rekursiver System Ein rekursiver System ist ein Tupel S = (V = {x1 , . . . , xn }, Fun, f0 , succ), so dass I V = {x1 , . . . , xn } ist eine nichtleere endliche Menge von Variablen I Fun ist eine nichtleere endliche Menge von Funktionsnamen I f0 ∈ Fun I succ : Fun → (Fun · (ω + V + V )n )∗ Beispiel: tree(x) forest(x-1) forest(x) tree(x),forest(x-1) lässt sich mit V := {x}, Fun := {t, f }, und succ := {t 7→ fx , f 7→ txfx } modelieren. Aufrufsequenzen und Kontrolsequenzen Aufrufsequenz Eine Aufrufsequenz ist eine Folgerung ρ = f0 (n~0 ), f1 (n~1 ), . . . , wobei n~i Vektoren von positive oder negative Zahlen sind, und fi ∈ Fun. Kontrolsequenz Eine Kontrolsequenz ist eine Folgerung σ = i0 , i1 , . . . von natürliche Zahlen. Konkretisierung Die Aufrufsequenz ρ ist eine Konkretisierung der Kontrolsequenz σ, ~ ) entspricht dem ik -Aufruf in der Definition von fk . wenn fk+1 (nk+1 Beispiel: a(m,n) a(m-1,ω) , a(m,n-1) dann ρ = a(2, 3), a(2, 2), a(1, 5) konkretisiert σ = 2, 1. Syntax und Semantik Syntaktisch erlaubte Kontrolsequenz Eine Kontrolsequenz i1 , i2 , . . . ist syntaktisch erlaubt, falls mindestens eine Aufrufsequenz ist ihre Konkretisierung. Positive Aufrufsequenz Eine Aufrufsequenz f1 (n~1 ), f2 (n~2 ), . . . heisst positiv, falls alle Parameter n~i positiv sind. Semantisch unerlaubte Kontrolsequenz Eine Kontrolsequenz heisst semantisch unerlaubt, falls keine positive Aufrufsequenz ihre Konkretisierung ist. Termination analyse, jetzt formal Seien I Lcall (S) : die Menge von syntaktisch erlaubte unendliche Kontrolsequenzen, und I Lterm (S) : die Menge von semantisch unerlaubte unendliche Kontrolsequenzen. Definition S heisst terminierend, falls Lcall (S) ⊆ Lterm (S). Übung Geben Sie Lcall (S) und Lterm (S) für die folgende rekursive Systemen an. 1. Ackerman: a 2. Baüme: t ax1 ωax1 x2 fx , f txfx 3. ... Zeigen Sie, dass für jedes S, Lcall (S) eine ω-reguläre Sprache ist. Absteigende Kette Definition Eine absteigende Kette für eine Kontrolsequenz i1 , i2 , . . . (von f0 an) ist eine Variablenfolgerung x1 , x2 , . . . so dass für alle Konkretisierung f0 (n~0 ), f1 (n~1 ), . . . , wenn vi das Wert von xi in fi (~ ni ) ist, dann gilt für alle i vi+1 ≤ vi . Lemma Sei σ eine unendliche Kontrolsequenz. Dann σ ist semantisch erlaubt genau dann wenn jede unendliche absteigende Kette nur endlich oft strikt absteigt. Lterm ist ω-regulär Idee: der Automat liest die Kontrolsequenz, ignoriert vielleicht ein Prefix, dann errät eine unendliche absteigende Kette, und prüft dass sie unendlich oft strikt absteigt. A = (Q, Σ, δ, qI , F ), wobei I Q := Fun × (V ∪ {ω}) × {0, 1} I Σ := {1, . . . , N}: N = maximal Zahl von unterschiedliche Aufrufe in eine Definition wenn f . . . gi e1 . . . en . . . I I I I δ(hf , ω, i, i) = {hgi , e, 0i : e ∈ V ∪ {ω}} δ(hf , x, i, i) = {hgi , xj , 0i : ej = x} δ(hf , x, i, i) = {hgi , xj , 1i : ej = x } I qI := hf0 , ω, 0i I F := Fun × V × {1} Beispiel f fx1 x2 x1 , f ωx1 x2 1,2 2 x2 1,2 2 1 x2 1 2 1,2 ω 1,2 x3 1 x1 1 Konklusion Satz Lterm (S) ist ω-regulär. Satz Das Problem, ob ein rekursiver System S terminiert, ist entscheidbar.