La risposta alla tua domanda è davvero lì nella favola di Reynolds (Sezione 1). Lasciami provare ad interpretarlo per te.
In un linguaggio o formalismo in cui i tipi sono trattati come astrazioni , una variabile di tipo può rappresentare qualsiasi concetto astratto di sorta. Non assumiamo che i tipi siano generati tramite una sintassi dei termini del tipo, o una raccolta fissa di operatori del tipo, o che possiamo testare due tipi per l'uguaglianza ecc. In tale linguaggio, se una funzione coinvolge una variabile di tipo allora l'unica cosa che la funzione può fare ai valori di quel tipo è di rimescolare i valori che è stato dato. Non può inventare nuovi valori di quel tipo, perché non "sa" cos'è quel tipo! Questa è l'idea intuitiva della parametricità .
Quindi Reynolds ha pensato a come catturare matematicamente questa idea intuitiva e ha notato il seguente principio. Supponiamo di istanziare la variabile type, diciamo , a due diversi tipi concreti, diciamo A e A ′ , in istanze separate, e teniamo a mente una corrispondenza R : A ↔ A ′ tra i due tipi concreti. Quindi possiamo immaginare che, in un caso, forniamo un valore x ∈ A alla funzione e, nell'altro caso, un valore corrispondente x ′ ∈ A ′ (dove "corrispondente" significa che x etAA′R:A↔A′x∈Ax′∈A′x sono correlati da R ). Quindi, poiché la funzione non sa nulla sui tipi stiamo fornendo per t oppure i valori di quel tipo, si deve trattare x e x ' esattamente nello stesso modo. Quindi, i risultati che otteniamo dalla funzione dovrebbero nuovamente corrispondere alla relazione R che abbiamo tenuto presente nella nostra mente, cioè, ovunque l'elemento x appaia nel risultato di un'istanza, l'elemento x ′ deve apparire nell'altra istanza. Pertanto,una funzione parametricamente polimorfica dovrebbe preservare tutte le possibili corrispondenze relazionali tra possibili istanze di variabili di tipo.x′Rtxx′Rxx′
Questa idea di conservazione delle corrispondenze non è nuova. I matematici lo sanno da molto tempo. In primo luogo, hanno pensato che le funzioni polimorfiche dovrebbero preservare gli isomorfismi tra le istanze di tipo. Nota che isomorfismo significa avere un'idea di una corrispondenza uno a uno . Apparentemente, gli isomorfismi erano originariamente chiamati "omomorfismi". Quindi si resero conto che anche quelli che ora chiamiamo "omomorfismi", cioè un'idea di corrispondenze molte-a-una , sarebbero stati preservati. Tale conservazione prende il nome di trasformazione naturale nella teoria delle categorie. Ma, se ci pensiamo intensamente, ci rendiamo conto che la conservazione degli omomorfismi è assolutamente insoddisfacente. I tipi e A ′AA′abbiamo menzionato sono completamente arbitrari. Se scegliamo come A ′ e A ′ come A , dovremmo ottenere la stessa proprietà. Quindi, perché la "corrispondenza molti-a-uno", un concetto asimmetrico, dovrebbe avere un ruolo nella formulazione di una proprietà simmetrica? Pertanto, Reynolds ha fatto il grande passo di generalizzare dagli omomorfismi alle relazioni logiche, che sono corrispondenze molte-a-molte . Il pieno impatto di questa generalizzazione non è ancora del tutto chiaro. Ma l'intuizione di base è abbastanza chiara.AA′A′A
RIKKt×Int→Int×tR×IInt→IInt×Rf(x,n)(x′,n)(m,x)(m,x′)F(IA1,…,IAn)=IF(A1,…,An) estensione dell'identità
t→tt→IntInt→tt×t→t×t(t→t)→t(t→t)→(t→t)