Domanda

Ho dubbi sul tipo di unità nel contesto della teoria del tipo e il suo utilizzo in diversi scenari di custodia.

Avviare con, un Tipo di unità può essere visto come un tipo di prodotto nulleria , ovvero unità, con un solo termine di valore che è la tupla vuota, (). Inoltre, esistono una mappa Unique da qualsiasi tipo all'unità.

Ora, succede che l'uso del tipo di unità va oltre la definizione tanta banale, ed è infatti utilizzato nella definizione di tipi di dati algebrici, che sono somme di tipi di prodotti. Specificamente, è possibile rappresentare il concetto di un Tipo enumerato usando una somma dell'unità Tipi, ad esempio In StandardML potremmo avere:

datatype suit = HEARTS | CLUBS | DIAMONDS | SPADES
.

Dove i cuori, i club, i diamanti e le picche sono tipi di prodotti nullery e quindi tutti gli isomorfi all'unità.

Il mio dubbio è quanto segue: Se esistono solo un elemento di unità, come può il sistema di tipo distinguere tra le quattro distinte istanze utilizzate nel tipo di somma sopra (cinque istanze se consideriamo anche la tupla vuota ...)? Capisco che possono essere considerati tutti uguali l'uno all'altro fino all'isomorfismo, ma sono estensamente diversi e infatti, anche considerando solo il suit che dovremmo modellare la partita su di loro ...

È stato utile?

Soluzione

La risposta breve è che i tipi isomorfi non sono uguali, nonostante si comportassero in modo identico, e quindi il sistema di tipo può distinguere tra loro. In un sistema di tipo nominale, come quello che descrivi, i tipi sono essenzialmente identificati dai loro nomi, anche se sono strutturalmente equivalenti. Questo è il caso per i cinque tipi di unità che descrivi: sono strutturalmente equivalenti, ma nominalmente ineguali, e quindi sono trattati come distinti.

Si noti che l'aspetto di corrispondenza del modello è ortogonale: puoi pensare ai cinque tipi di unità come esistenti in isolamento. Nella maggior parte delle teorie di tipo, puoi prendere la somma di due tipi, anche due che sono (nominalmente) uguali, ad es. Unit + Unit. Sarai comunque richiesto di abbinare il modello e avrà due casi: il Unit sinistro e il Unit destro. L'aspetto nominale non è importante, anche se molti linguaggi di programmazione utilizzeranno i nomi per distinguere tra i diversi casi come questo, invece degli indici dei saponi (in particolare, nelle lingue in cui è permesso solo prendere somme di tipi nominali distinti, come ML standard).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top