Definizione di funzioni ricorsive primitive su tipi di dati generali


9

Le funzioni ricorsive primitive sono definite sui numeri naturali. Tuttavia, sembra che il concetto debba generalizzare ad altri tipi di dati, consentendo di parlare di funzioni ricorsive primitive che mappano elenchi su alberi binari, per esempio. Per analogia, le funzioni ricorsive parziali rispetto ai numeri naturali si generalizzano piacevolmente a funzioni calcolabili su qualsiasi tipo di dati, e mi piacerebbe capire come fare lo stesso tipo di generalizzazione per le funzioni ricorsive primitive.

Intuitivamente, se dovessi definire un semplice linguaggio imperativo che permettesse operazioni di base su, dire elenchi (come la concatenazione, la testa e la coda, il confronto di elementi) e una forma di iterazione che richiede di sapere in anticipo quante iterazioni si verificheranno ( come iterare gli elementi in un elenco immutabile), quindi un tale linguaggio dovrebbe al massimo essere in grado di calcolare le primitive funzioni ricorsive sugli elenchi. Ma come posso comprenderlo formalmente e, più specificamente, come potrei provare a dimostrare che il mio linguaggio calcola tutte le funzioni ricorsive primitive su elenchi e non solo su un sottoinsieme di essi?

Per essere chiari, sono interessato a comprendere le funzioni ricorsive primitive come una classe ben definita di funzioni (se davvero lo sono), piuttosto che semplicemente nel funzionamento della ricorsione primitiva stessa, che sembra semplice. Sarei interessato ai puntatori a tutto ciò che è stato scritto sulla ricorsione primitiva su strutture di dati generali, o addirittura in qualsiasi contesto diverso dai numeri naturali.

aggiornamento: potrei aver trovato una risposta, in un documento chiamato Walther Recursion , di McAllester e Arkoudas. (Atti del CADE 1996 ). Questo sembra contenere una versione generalizzata della ricorsione primitiva e la più potente ricorsione di Walther. Ho intenzione di scrivere un'auto-risposta una volta digerito questo, ma nel frattempo questa nota potrebbe essere utile per gli altri con la stessa domanda.


1
Non mi è chiaro cosa stai cercando esattamente. Sembra che tu stia solo cercando di trovare i tipi W , ma potrebbe non essere così.
Andrej Bauer,

3
È probabilmente utile notare che i tipi di dati "ordinari" (simili ad alberi) possono essere codificati in modo abbastanza semplice in numeri naturali, e quindi le funzioni PR sui naturali sono una rappresentazione abbastanza buona di ciò che potresti desiderare. In alternativa, è possibile utilizzare il Sistema T di Gödel esteso ai tipi di dati del primo ordine strettamente positivi con i "soliti" ricorsori.
cody

1
È possibile limitare i tipi di output degli eliminatori ai tipi di base se si desidera eliminare questa "funzione".
cody,

1
Mi sembra ancora che una forma di tipi W limitati sia ciò che stai cercando. Qualcosa come i tipi W con ramificazione finita e i ricorsori limitati all'eliminazione in altri tipi W limitati.
Andrej Bauer,

1
La conferenza CADE 1996 visita qui: dblp.org/db/conf/cade/cade96
John Fisher,

Risposte:


5

In generale, in un linguaggio con tipi di dati (come elenchi, alberi, ecc.) È facile descrivere un linguaggio di funzioni che si comportano esattamente come ci aspettiamo che si comporti una ricorsione primitiva.

Ad esempio se il tipo di dati è e i costruttori c 1 , ... , c n hanno tipoDc1,,cn

ci:T1iT2iTk1iDD

recDOO

recDO:(T11Tk11DDOO)DO

e la semantica operativa sarà:

recDO f1  fn (ci t1tki d1dm)fi t1tki (recDO f1 fn d1)(recDO f1fn dm)

i

recNO:(NOO)ONO

recNO f0 f1 0f1 0
recNO f0 f1 (S n)f0 n (recNO f0 f1 n)

come sperato (nota che il costruttore zero ha zero argomenti!).

recDOO

Tij


Sarebbe bello avere una descrizione più elegante di questo processo però. Ecco dove arriva la risposta di Carlos: questi tipi di dati possono essere descritti più elegantemente nella teoria delle categorie come le algebre iniziali di alcuni funzioni, spesso chiamate funzioni polinomiali . Il ricorsore è quindi solo (una variante) il morfismo iniziale di questa algebra, a volte chiamato catamorfismo da parte di persone che cercano di confondere le cose. Questo morfismo esiste per costruzione dell'algebra iniziale.

Un paramorfismo è solo la particolare variante che ho descritto sopra.


recNO:(NOO)ONO

recN

Non ho alcun riferimento elementare di mano, anche se immagino che queste diapositive forniscano una piacevole introduzione, e il capitolo 3 della tesi di Ralph Mattes approfondisce i dettagli tecnici, sebbene consenta tipi induttivi non di "primo ordine".
cody

2

Recentemente ho posto questa domanda e ho trovato diversi articoli di interesse:

Logiche presentate in modo induttivo : (a) definisce una logica che fornisce una nozione generica di ricorsione primitiva su qualsiasi tipo di dati che soddisfi determinati requisiti (b) dimostra che questa logica è un'estensione conservativa dell'aritmetica ricorsiva primitiva.

La complessità dei programmi di loop : dimostra che la loro nozione di programma di loop equivale alle primitive funzioni ricorsive.

Programmi logici per insiemi ricorsivi primitivi : dimostra che la loro classe di programmi logici è equivalente alle funzioni ricorsive primitive.

Una caratterizzazione teorica delle funzioni dell'insieme ricorsivo primitivo : dimostra che tutte le funzioni ricorsive primitive su un dato insieme sono solo quelle definibili in una teoria dell'insieme molto debole.


0

Forse stai pensando al concetto di paramorfismo ?

Dalla programmazione funzionale con banane, lenti, buste e filo spinato :

h=(b,)

h0=bh(n+1)=n(hn)

b=1nm=(n+1)×m

h

hnil=bh(consab)=a(b,hb)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.