Man soll die Funktion f mit
f(n,m)={ 0 , m= 0
{ n , m >0
als prmitiv-rekursive funktion dartellen.
ist doch einfach:
f(n,0) =0
f(n,m+1)=n
projektion bzw konstante funktion also prim-rek oder mach
ich mir das zu einfach?
vielleicht f durch sel-funktion simulieren?
Man soll die Funktion f mit
f(n,m)={ 0 , m= 0
{ n , m >0
als prmitiv-rekursive funktion dartellen.
ist doch einfach:
f(n,0) =0
f(n,m+1)=n
projektion bzw konstante funktion also prim-rek oder mach
ich mir das zu einfach?
vielleicht f durch sel-funktion simulieren?
Ich würde annehmen, dass hier eine exaktere Darstellung mit Hilfe der Konstruktoren, die bei der Definition der primitiv rekursiven Funktion benutzt wurden, erwartet wird, oder?
Fragen Sie doch diejenige Person, die Ihnen die Aufgabe hinter "Man soll die Funktion f mit…" gegeben hatte!
oehm projektion und konstante funktion sind doch schon die kontruktoren?!
ok man kanns bissl aufblasen und sagen f laesst sich darstellen
durch sel-funktion und sel-funktion prim.rek da
sel(m,0,n) simuliert also f und
sel(0,y,z)=y
sel(x+1,y,z)=z beides projektionen sind
was ist denn bitte die sel-Funktion?
hast du die selber definiert?
von welchen Typ ist sie dann (falls F3 an lokaler Uni: Nachfolgerfunktion, konstante Funktion,
Projektionsfunktion, Substitutionsfunktion oder primitive Rekursionsfunktion)?
wahrscheinlich meinst du die primitive Rekursionsfunktion,
da solltest du dir aber die Systax genauer anschauen,
auch wenns dir unnötig erscheint ist hier doch offensichtlich die korrekte Definition wichtig,
wenn es schon eine derart simple Funktion ist
hm sel-funktion is eigentlich recht bekannt:
mal formal beschreiben:
sel(x,y,z) liefert die 2te variable falls die erste null ist,
und liefert die 3te variable falls die erste ungleich null ist,
also:
sel(x,y,z)={y, x=0; z, sonst
sel(x,y,z) ist prim.rek, weil dastellbar als:
sel(0,y,z)=y (projektion)
sel(x+1,y,z)=z (projektion)
sorry ich weiss nicht was ihr immer mit definiton genau ankucken habt.
bei mir ist die klasse der prim.rek. funktionen definiert mit:
1. alle konstanten funktionen sind prim.rek.
2. alle projektionen sind prim.rek
(ebenfalls dreistellige funktion die auf zweite komponente
abbildet)
3. nachgfolgerfunktion auf natuerlichen zahlen ist prim.rek.
4. komposition von prim.rek. funktionen ist prim.rek.
5. jede funktion die durch prim.rek aus prim.rek.funktion entsteht ist prim.rek.
und mehr als die definition benutzen hab ich ja nich gemacht :)
nun, es zwingt dich ja keiner, es ebenso genau mit den Definitionen zu nehmen,
und ich kann mich ja auch irren,
aber
sel(x,y,z) ist prim.rek, weil dastellbar als:
sel(0,y,z)=y (projektion)
sel(x+1,y,z)=z (projektion)
ist für mich einfach keine korrekte Funktionsdarstellung
in einer mächtigen Programmiersprache wie Prolog mag man dies auswerten können,
bei den primitiv rekursiven F. allerdings nicht,
da gibt es feste, begrenze Regeln,
nicht
für 0 dies
und für > 0 jenes,
sondern haargenau
h(0, n1, ..,nx ) = f(n1, .. nx)
h(S(n), n1, .. ,nx) = g(n,h(n, n1,..,nx), n1,..,nx)
und nicht anderes,
also eine rekurisve Funktion (wie z.B. sel) kann gar nicht ohne Deklaration einer zweiten Hilfsfunktion (g) angegeben werden,
(meinem Lesevermögen nach)
okay ich denke ich hab nun eine idee nach der wir uns die haende reichen koennen :)
zuerst mal nem ich jetzt wieder die sel-funktion
(sel kommt von select) dieses mal lass ich aber die 3te variable entscheiden, also:
sel(a,b,c)= a fuer c=0; b fuer c>0
behauptung: sel(0,n,m) ist prim.rek darstellung von f.
z.z.
i. sel (0,n,m) simuliert f.
ii. sel (0,n,m) ist prim.rek.
1. m=0: f(n,0)=0 sel(0,n,0)=0 ok
2. m>0: f(n,m)=m sel(0,n,m)=m ok
also i. erfuellt.
ii.
1. m=0: sel(0,n,0)=g(0,n)=
[img]
http://mokrates.de/cgi-bin/texstring?P_1[/img](0,n)=0
(P ist Projektion)
2. m>0: sel(0,n,m+1)=h(sel(0,n,m),m,0)=
[img]
http://mokrates.de/cgi-bin/texstring?P_2[/img](sel(0,n,m,n,0)=n
(und P wieder Projektion)
i. ii. =>sel(o,n,m) ist prim.rek.darstellung von f
jo, so sieht das schon schön aus ;)
wenn man noch Tippfehler rausnimmt und auf die Reihenfolge in der Definiton achtet:
sel(0, y, 0) = f(y,0) = P2(y,0) = 0
sel(S(x), y, 0) = g(x,sel(x, y), y, 0) = P3(x,sel(x, y), y, 0) = y
f(n,m) = sel(m,n,0)
——–
man kann sicher auch die konstante Funktion auf 0 verwenden
sel(0, y) = f(y) = C0(y) = 0
sel(S(x), y) = g(x,sel(x, y), y) = P3(x,sel(x, y), y) = y
f(n,m) = sel(m,n)