Funzione primitiva ricorsiva tramite ricorsione primitiva

magsas
Salve a tutti,
sto preparando l'esame di Teoria della Computazione 2 dove si studiano le funzioni parziali ricorsive. Non ho problemi a calcolare tali funzioni tramite l'operatore di composizione, ma ho qualche problema a calcolarle tramite l'operatore di ricorsione primitiva. Per esempio, come si può mostrare che la funzione f:N-->N definita da f(x) = x^2 + x + 1 è primitiva ricorsiva utilizzando la ricorsione primitiva? Ringrazio anticipatamente per l'aiuto. Ciao.

Risposte
Rggb1
"magsas":
Non ho problemi a calcolare tali funzioni tramite l'operatore di composizione

Hai definito la composizione nel caso in esame (io non ho provato)? Benissimo, allora
"magsas":
ho qualche problema a calcolarle tramite l'operatore di ricorsione primitiva

nel caso direi è $S(x)$ (successore) se $x=0$, e la tua composizione altrimenti.

Cosa ti torna? Fammi vedere, anche io sto studiando questi argomenti.

magsas
Ciao rggb,
non ho molto capito cosa intendevi dire. Comunque, per composizione dovrebbe essere così: f(x) = + ( * (x,x), S(x) ).

Quello che non mi riesce è la definizione tramite l'operatore di ricorsione primitiva, cioè questo:
    f( X1,......,Xn-1, 0 ) = g(X1,.....Xn-1)[/list:u:1irl4a1w]
      f( X1,......,Xn-1, Y+1 ) = h(X1,.....Xn-1, Y, f( X1,......,Xn-1, Y )[/list:u:1irl4a1w]

      dove f:N^n --> N, g:N^n-1 --> N, h:N^n+1 --> N.

      Non so se mi sono spiegato bene....

Rggb1
[ Vedo che assumi già definite le funzioni + e * - non lo davo per scontato. ;) Le chiamerò $\s\u\m$ e $\m\u\l$ ]

Le definizioni alle quali sono abituato sono differenti, comunque è quello che intendevo. La ricorsione primitiva è l'operatore che si compone di una funzione "base" per $x=0$ e una funzione "induzione" per $x>0$. Nella tua notazione, $g(x)$ può essere $S(x)$ (se preferisci, diventa $f(0)=S(0)$) e la tua $h(x)$ può essere $U^2(x-1, \s\u\m(\m\u\l(x, x), S(x)))$ dove $U$ è la funzione selettore (spero di non aver fatto errori banali).

Attendo commenti.

magsas
"Rggb":
[ Vedo che assumi già definite le funzioni + e * - non lo davo per scontato. ;) Le chiamerò $\s\u\m$ e $\m\u\l$ ]


In realtà bisogna dimostrarle all'esame, qui, per farla breve, le ho supposte note. Perdono.

"Rggb":

Le definizioni alle quali sono abituato sono differenti, comunque è quello che intendevo. La ricorsione primitiva è l'operatore che si compone di una funzione "base" per $x=0$ e una funzione "induzione" per $x>0$. Nella tua notazione, $g(x)$ può essere $S(x)$ (se preferisci, diventa $f(0)=S(0)$) e la tua $h(x)$ può essere $U^2(x-1, \s\u\m(\m\u\l(x, x), S(x)))$ dove $U$ è la funzione selettore (spero di non aver fatto errori banali).

Attendo commenti.


Per prima cosa vediamo se ho capito. Per te $U^2(x-1, \s\u\m(\m\u\l(x, x), S(x)))$ significa che restituisci solo la seconda componente?

Se è così, non mi trovo perché la funzione induttiva dovrebbe essere chiamata su input più piccoli e mi pare che $f(x+1)=(x+1)^2+(x+1)+1$ è diversa da $f(x+1)=U^2(x-1, \s\u\m(\m\u\l(x, x), S(x)))$.

Dov'è che sbaglio?

Rggb1
Esatto, il selettore che restituisce la seconda componente.

Come ho detto, forse ho fatto un errore banale (mi sto confondendo, fra x+1 e x-1 :?), ma principalmente questa incomprensione fra noi dipende dalle notazioni. Allora, vediamo di cominciare da qui: secondo la tua definizione, l'operatore di ricorsione primitiva, con una sola variabile, è

$f(x)={ ( g(), x=0 ),( h(x-1, f(x-1)), x>0 ):}$

o anche

${ (f(0)=g()), ( f(x+1)=h(x, f(x))):}$

ho capito bene?

magsas
"Rggb":
Esatto, il selettore che restituisce la seconda componente.

Come ho detto, forse ho fatto un errore banale (mi sto confondendo, fra x+1 e x-1 :?), ma principalmente questa incomprensione fra noi dipende dalle notazioni. Allora, vediamo di cominciare da qui: secondo la tua definizione, l'operatore di ricorsione primitiva, con una sola variabile, è

$f(x)={ ( g(), x=0 ),( h(x-1, f(x-1)), x>0 ):}$

o anche

${ (f(0)=g()), ( f(x+1)=h(x, f(x))):}$

ho capito bene?


La seconda definizione.

Rggb1
"magsas":
La seconda definizione.

Ok perfetto (del resto, sono equivalenti ;))

Quindi potremmo fare:
$f(0)=S(0)$
$f(x+1)=\s\u\m(\s\u\m(S(x), S(x)), \s\u\m(\m\u\l(x, x), S(x)))$
dove $\s\u\m\(x, y)$ è la somma e $\m\u\l(x, y)$ il prodotto, come accennavo prima.

Però mi sembra complicato :? Ci dovrebbe essere una strada più semplice... no? Come ti ho detto, ci stiamo aiutando a vicenda in quanto anche io sto studiando l'argomento.

magsas
"Rggb":
[quote="magsas"]
Quindi potremmo fare:
$f(0)=S(0)$
$f(x+1)=\s\u\m(\s\u\m(S(x), S(x)), \s\u\m(\m\u\l(x, x), S(x)))$
dove $\s\u\m\(x, y)$ è la somma e $\m\u\l(x, y)$ il prodotto, come accennavo prima.

Però mi sembra complicato :? Ci dovrebbe essere una strada più semplice... no? Come ti ho detto, ci stiamo aiutando a vicenda in quanto anche io sto studiando l'argomento.
[/quote]

Mi sembra che vada bene. Poi, complicata o meno l'importante è che funzioni!! Di soluzioni migliori per ora non me ne vengono...

Rggb1
Come vedi, ho usato la prima idea che avevo
$U^2(x-1, \s\u\m(\m\u\l(x, x), S(x)))
e l'ho "adattata al caso" $x+1$ (nei testi che ho io si usa induttivamente $x$ sulla base di $x-1$)
$\s\u\m(\s\u\m(S(x), S(x)), \s\u\m(\m\u\l(x, x), S(x)))
e probabilmente hai ragione, può andare. La formula induttiva è identica alla tua, che usa '+' e '*', ti basta cambiare notazione.

Mi riprometto di tornare sull'argomento in caso mi rendessi conto di aver fatto/scritto errori.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.