Perché naturali invece di numeri interi?


28

Sono interessato al motivo per cui i numeri naturali sono così amati dagli autori di libri sulla teoria dei linguaggi di programmazione e la teoria dei tipi (ad esempio J. Mitchell, Fondamenti per i linguaggi di programmazione e B. Pierce, Tipi e linguaggi di programmazione). La descrizione del semplice lambda-calcolo e in particolare il linguaggio di programmazione PCF si basano solitamente su Nat e Bool. Per le persone che usano e insegnano i PL industriali generici è molto più naturale trattare numeri interi anziché naturali. Puoi citare alcune buone ragioni per cui il teorico del PL preferisce quello di Nat? Inoltre è un po 'meno complicato. Ci sono ragioni fondamentali o è solo un onore la tradizione?

UPD Per tutti quei commenti sulla "fondamentalità" dei naturali: sono abbastanza consapevole di tutte quelle cose interessanti, ma preferirei vedere un esempio quando è veramente vitale avere quelle proprietà nella teoria dei tipi della teoria di PL. Ad esempio induzione ampiamente citata. Quando abbiamo qualsiasi tipo di logica (che è semplicemente il tipo LC), come la logica di base del primo ordine, usiamo davvero l'induzione, ma l'induzione sull'albero di derivazione (che abbiamo anche in lambda).

La mia domanda in sostanza viene da persone del settore, che vogliono acquisire una teoria fondamentale dei linguaggi di programmazione. Avevano numeri interi nei loro programmi e senza argomenti concreti e applicazioni alla teoria studiata (teoria dei tipi nel nostro caso) perché studiare lingue con solo nat, si sentono piuttosto delusi.


Immagino che questa non sia una domanda a livello di ricerca, sebbene interessante.
Raffaello,

4
Non lo è, ma è una specie di domanda generale, che accettiamo.
Suresh Venkat,

1
Mi chiedo se in qualche modo l'insieme di numeri interi non negativi potrebbe essere persino più fondamentale dei numeri naturali a causa delle proprietà uniche del valore 0 che non esiste in quest'ultimo. Vorrei anche suggerire che questo è più valido come la scelta del tipo numerico fondamentale per i computer digitali data l'importanza di 0.
Richard Cook,

Non capisco il tuo UPD . I naturali sono più fondamentali degli interi e le risposte forniscono esempi del perché questo è il caso.
Radu GRIGore,

Ri: UPD. Non sono troppo sicuro del motivo per cui "le persone del settore" sarebbero "deluse". (Ho trascorso la mia carriera nell'industria da solo.) Perché qualcuno dovrebbe aspettarsi che la teoria dovrebbe essere un'ovvia estensione di ciò che già conosce? È abbastanza comune che alcune cose comuni nell'industria, in modo molto simile alle variabili intere, esistono più per "ragioni storiche" che per profonde teoriche.
Marc Hamann,

Risposte:


24

Risposta breve: i naturali sono i primi ordinali limite. Quindi svolgono un ruolo centrale nella teoria degli assiomi (ad esempio, l'assioma dell'infinito è l'affermazione che esistono) e la logica, ei teorici del PL tendono a condividere le preoccupazioni fondamentali con i logici. Vogliamo avere accesso al principio di induzione per dimostrare la totale correttezza, la terminazione e proprietà simili, e i naturali sono una (er) scelta naturale di ordine.

Tuttavia, non voglio implicare che interi binari a larghezza finita siano oggetti meno interessanti. Sono rappresentazioni della p-adica e ci permettono di usare i metodi delle serie di potenze nella teoria dei numeri e nella combinatoria. Ciò significa che il loro significato diventa più visibile negli algoritmi rispetto a PL, poiché è quando iniziamo a preoccuparci di più della complessità piuttosto che della terminazione.


20

I naturali sono un concetto molto più fondamentale degli interi.

L'induzione avviene sui naturali e gli interi possono essere derivati ​​dai naturali con la semplice aggiunta di un operatore inverso unario.

Vorrei davvero porre la domanda inversa: perché i progettisti dei primi linguaggi di programmazione (e di registrazione della macchina) hanno incorporato i numeri interi come tipo di dati di base quando sono così secondari e così facilmente derivati ​​dai naturali?

Ho il sospetto che sia solo perché c'erano alcune codifiche binarie interessanti che potevano gestire gli interi in modo elegante. ;-)

Pensa quanto spesso vuoi ignorare l'intervallo negativo di un intero programmatico e considera l'impulso di avere un tipo intero senza segno per recuperare il bit perso.


5
Un altro motivo: se si desidera qualcosa come i numeri di Church, un numero intero negativo dovrebbe indicare l'inversione della funzione. Quindi, in quel contesto, gli interi sarebbero più naturali in un calcolo di funzioni calcolabili biiettivamente.
Per Vognsen, il

@Per Vognsen: non sai da che parte stai discutendo. Ma penso che sia sicuro affermare che le funzioni calcolabili biiettivamente sono meno fondamentali delle funzioni calcolabili arbitrarie per la maggior parte del tempo. ;-)
Marc Hamann il

Non c'è dubbio che i numeri complessi, che sono in cima alla gerarchia dei numeri. Numeri naturali -> Numeri interi -> Numeri razionali -> Numeri reali -> I numeri complessi sono più fondamentali degli altri, perché hanno proprietà algebriche "più belle". Sono ovunque nella scienza, ma sono evidentemente assenti nelle "basi" della matematica. Quindi la risposta a numeri interi o naturali più "fondamentali" dipende davvero da chi si chiede: algoritmo o algebrista.
Tegiri Nenashi,

Dal momento che questo è un sito TCS, penso che siamo sicuri nel privilegiare la visione dell'informatica. ;-) Computazionalmente, quella gerarchia è progressiva: ogni nuova voce è letteralmente costruita su quella precedente. Dato che "fondamentale" di solito si riferisce a qualcosa alla base, penso che la fine naturale sia quella giusta per conferire quel titolo.
Marc Hamann,

17

Esiste una biiezione calcolabile tra e . Pertanto è sufficiente ragionare sulla calcolabilità e simili usando solo numeri naturali, sapendo sempre che i risultati si generalizzano in numeri interi (e numeri razionali, e tutti gli altri insiemi ricorsivamente enumerabili).ZNZ

Ragionare solo sui naturali è conveniente perché hai l'induzione e è un set ben fondato con l'ordine naturale . Quest'ultimo è particolarmente importante poiché può essere strumentalizzato nelle prove di terminazione. Mentre puoi definire un ordine ben fondato su , è meno conveniente perché non corrisponde al solito ordine.ZNZ


11

Ancora un altro motivo (correlato a quelli già forniti, ma questa risposta aggiunge nuove informazioni) è che esiste una costruzione molto semplice e senza quozienti dei naturali, che viene fornita con un bel principio di induzione [come è già stato detto] . Ciò su cui non è stato ampliato è quanto sia difficile realizzare una costruzione senza numeri di quozienti.

Più programmazione faccio dove voglio un'elevata sicurezza, più ho bisogno dei naturali e trovo che avere solo gli interi predefiniti per me sia un vero dolore.


Ci sono lingue che hanno un tipo di base per i naturali, lo sai.
Raffaello,

@Raphael: lo so. Ma non quelli che altrimenti mi piacciono (ovvero Haskell e OCaml). Non sono ancora pronto per iniziare la "programmazione" in Agda o Coq.
Jacques Carette,

Cosa c'è di così male nei quozienti?
David Harris,

3
I quotienti sono fantastici nella semantica. Sono molto, molto più difficili da affrontare nei calcoli reali e nelle rappresentazioni concrete. Ci sono innumerevoli articoli su come affrontarli in Coq, Isabelle, Agda, (teoria dei tipi in generale), ecc. Ho appena pensato che fosse conoscenza del folklore in tutte le comunità che i quozienti sono solo una sofferenza da affrontare "nella realtà".
Jacques Carette,

2
Sento che questa è la risposta più forte del gruppo: i naturali sono il tipo di dati induttivo non banale più semplice. una volta che hai dato la definizione e dimostrato proprietà semplici per i numeri naturali, hai spianato la strada a tipi di dati induttivi più complessi, come elenchi o alberi.
cody

7

Ci sono buone ragioni per cui i teorici del PL preferiscono i naturali anziché i numeri interi? Ce ne sono alcuni, ma in un libro di testo sulla semantica del linguaggio di programmazione, penso che non ci siano ragioni tecniche per cui debbano farlo. Non riesco a pensare a nessun posto diverso dai sistemi di tipo dipendente, in cui l'induzione sui dati è importante nella teoria del PL. Altri libri di testo di Mike Gordon , David Schmidt , Bob Tennent e John Reynolds non lo fanno. (E quei libri probabilmente sarebbero molto più adatti per insegnare alle persone che si preoccupano dei PL industriali generici!)

Quindi, lì, si ha la prova che è non è necessario. In realtà, direi che un buon libro di testo di teoria PL dovrebbe essere parametrico nei tipi primitivi del linguaggio di programmazione, ed è fuorviante suggerire il contrario.


6

Naturali, bool e operazioni su di essi possono essere codificati nel puro calcolo lambda in modo semplice, come i cosiddetti numeri della Chiesa (e bool della Chiesa, immagino). Non è chiaro come si codificherebbero gli interi, anche se ovviamente si può fare.


Intendevo innanzitutto il calcolo lambda digitato. Il corso dei libri che ho citato nel primo post si basa su questo. Immagino che lambda non tipizzata non sia così vitale nella teoria dei tipi e nella teoria di PL al giorno d'oggi (potrei sbagliarmi, ma è quello che vedo in quei libri.). Comunque grazie!
Artem Pelenitsyn,
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.