[Python] un bel dilemma
Michele Orru`
lists a tumbolandia.net
Mer 29 Lug 2015 14:52:17 CEST
enrico franchi <enrico.franchi a gmail.com> writes:
> Non sono certo di avere compreso la domanda.
Mi associo ad enrico sul dubbio.
> Come nota a margine, l'operatore di cui parli (fix) sembra proprio il
> combinatore Y.
Già. In realtà la questione è più profonda.
Perdonate il tecnicismo e gli eventuali strafalcioni, spero l'importanza
del risultato riassunto compensi ad entrambi.
Sia U il tuo universo, su cui hai definito delle regole di riduzione
R ⊂ (P_fin(U) × U)
dove P_fin(U) ⊂ P(U) è l'insieme delle parti *finite* di U.
Sia Ř(X): P(U) → P(U): X ↦ {y | x₁, x₂, …, xₙ / y ∈ R con xᵢ ∈ X}
l'insieme di stati raggiungibili mediante regole di riduzione con input
in X.
Identifichiamo con Řⁱ l'i-esima applicazione di Ř, ossia l'insieme di
stati raggiungibili applicando al più i volte le regole di riduzione.
È possibile dimostrare (Knaster-Tarski) che Ř ammette un minimo punto
fisso, e che esso è
fix(Ř) = U_i Řⁱ(∅)
Pertanto, una *derivazione* è un elemento del punto fisso di Ř, e tutte
le riduzioni che fai per eseguire un programma non sono altro che la
ricerca di un punto fisso.
Per questo quella pagina dice che è così importante dal punto di vista
teorico. Per questo la domanda di Nadir è un po' confusa.
Per chi cercasse riferimenti, io avevo appreso queste cose da pagina 52
in poi del Winskel.
<http://gen.lib.rus.ec/book/index.php?md5=52621c8c571f29d0299aa9e8091b691f>
> Questa e' la faccia di Y in Python:
> http://www.enrico-franchi.org/2008/10/y-combinator-in-python.html
> O per lo meno, una delle facce.
Qualcuno è riuscito pure ad implementarlo sul typesystem di ghc, per una
qualche ottimizzazzione del type-checker(?); questo è il riferimento più
appropriato che ho trovato:
<https://mail.haskell.org/pipermail/haskell/2006-September/018497.html>
--
µ.
Maggiori informazioni sulla lista
Python