Esiste un calcolo lambda tipizzato completo di Turing?


Risposte:


37

Si certo. Molti calcoli lambda tipizzati accettano solo termini fortemente normalizzanti , in base alla progettazione, quindi non possono esprimere calcoli arbitrari. Ma un sistema di tipi può essere quello che ti piace; rendilo abbastanza ampio e puoi esprimere tutti i calcoli deterministici.

Un sistema di tipo banale che comprende un frammento completo di Turing del calcolo lambda è quello che accetta ogni termine come ben digitato (con un tipo superiore ).

ΓM:

Più in pratica, i linguaggi di programmazione funzionale tipicamente statici hanno al loro interno un calcolo lambda tipizzato che consente un combinatore di punti fissi altrettanto tipizzato. Ad esempio, inizia con il calcolo lambda semplicemente digitato (o il sistema di tipo ML o il sistema F o qualsiasi altro sistema di tipo a tua scelta) e aggiungi una regola che crea un combinatore di punti fissi come ben scritto. Γ f : T TY=λf.(λX.f(XX))(λX.f(XX)) Le regole sopra presentate sono piuttosto goffe, in quanto fanno termini comeY

Γf:TTΓYf:TΓf:TTΓ(λX.f(XX))(λX.f(XX)):T
ben scritti anche se i loro componenti non sono ben scritti - non sono completamente compositivi. Una semplice correzione è quella di aggiungere un combinatore di fixpoint come costante di linguaggio e fornire una regola delta per esso; quindi è semplice avere un sistema di tipi e una semantica di riduzione conconservazione dei tipi. Ti allontani dal calcolo lambda puro nel regno del calcolo lambda con costanti. Yf
Γfix:(TT)Tfixff(fixf)

Attenendosi al calcolo lambda puro, un sistema di tipo interessante è il calcolo lambda con tipi di intersezione.

ΓM:T1ΓM:T2ΓM:T1T2(io)ΓM:(io)

I tipi di intersezione hanno proprietà interessanti rispetto alla normalizzazione:

  • io

Vedi Caratterizzazione dei termini lambda che hanno tipi di unione per un'intuizione sul perché i tipi di intersezione hanno un ambito così notevole.

Quindi hai un sistema di tipi che definisce un linguaggio completo di Turing (poiché ogni termine è ben digitato) e una semplice caratterizzazione dei calcoli di terminazione. Naturalmente, poiché questo tipo di sistema caratterizza la normalizzazione, non è decidibile.

(io)(io)io

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.