Le terme λ suivant, ici sous forme normale:
sort = (λabc.(a(λdefg.(f(d(λhij.(j(λkl.(k(λmn.(mhi))l))
(h(λkl.l)i)))(λhi.(i(λjk.(bd(jhk)))(bd(h(λjk.(j
(λlm.m)k))c)))))e))(λde.e)(λde.(d(λfg.g)e))c))
Implémente un algorithme de tri pour les listes codées par église. Autrement dit, le résultat de:
sort (λ c n . (c 3 (c 1 (c 2 n)))) β→ (λ c n . (c 1 (c 2 (c 3 n))))
De même,
sort_below = λabcd.a(λef.f(λghi.g(λj.h(λkl.kj(ikl)))(hi))e(λgh.h))
(λe.d)(λe.b(λf.e(f(λghi.hg)(λgh.cfh))))
Implémente également le tri pour les mêmes listes que ci-dessus, sauf que vous devez fournir un argument supplémentaire avec une limite pour les nombres qu'il considérera:
sort_below 4 [5,1,3,2,4] → [1,2,3]
J'essaie de déterminer si ces termes sont typables sur la logique affine élémentaire. Étant donné que je ne connais aucun vérificateur de type EAL accessible au public, cela s'avère une tâche plus difficile que ce à quoi je m'attendais. Existe-t-il un type de sort
logique affine élémentaire?
lo.logic
lambda-calculus
type-systems
MaiaVictor
la source
la source
Réponses:
Je pense
sort
, comme présenté ici, n'est pas typable sur EAL. Je ne peux pas le prouver, mais cela ne fonctionne pas sur l'algorithme abstrait de Lamping sans l'oracle. De plus, bien que le terme soit quelque peu intelligent et bref, il utilise des stratégies très farfelues qui ne sont pas adaptées à l'EAL.Mais derrière cette question, il y en a une plus intéressante: "une fonction de tri nat peut-elle être implémentée en EAL" ? C'était une question très difficile à l'époque, mais maintenant cela semble assez trivial. Oui bien sûr. Il existe de nombreuses façons plus simples de le faire. Par exemple, on peut simplement remplir un Scott encodé
NatSet
avec des Church encodésNat
, puis le convertir en une liste. Voici une démonstration complète:Voici la forme normale indexée par bruijn d'une version légèrement modifiée de ce qui
sort
précède, qui doit recevoir(x -> (x x))
comme premier argument pour fonctionner (sinon elle n'a pas de forme normale):Rétrospectivement assez simple.
la source