Esistono calcoli lambda digitati completi di Turing? In tal caso, quali sono alcuni esempi?
Esistono calcoli lambda digitati completi di Turing? In tal caso, quali sono alcuni esempi?
Risposte:
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 ).
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 → T Le regole sopra presentate sono piuttosto goffe, in quanto fanno termini comeY
Attenendosi al calcolo lambda puro, un sistema di tipo interessante è il calcolo lambda con tipi di intersezione.
I tipi di intersezione hanno proprietà interessanti rispetto alla normalizzazione:
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.