Quel point fixe est le type de liste Haskell?


Réponses:


4

La bonne chose est de configurer

data ListF a x = Nil | Cons a x

Vous pouvez maintenant écrire

newtype Mu f= Mu (forall a.(f a->a)->a)
data Nu f   = forall a. Nu a (a->f a)

À Haskell, nous pouvons observer cela Mu ListFet Nu ListFcoïncider. Donc, ça peut être soit (!). (une source sur cette demande: http://www.cs.ox.ac.uk/jeremy.gibbons/publications/adt.pdf )

De plus, nous pouvons prouver les choses par induction sur toutes les listes et obtenir des preuves qui fonctionnent tant que nous nous limitons à nous préoccuper des finis, comme décrit ici: http://www.cs.ox.ac.uk/jeremy.gibbons/ publications / fast + loose.pdf

Deux autres références à ce sujet sont:


Je pense que vous manquez un x dans cette déclaration de type de données ...
miniBill

2
Il y a une raison pour laquelle Jeremy a qualifié ce papier de "rapide et lâche". Cette réponse est exactement le genre de déni dont je parle. C'est le plus grand point fixe, la fin de l'histoire. Le premier article lié de Jeremy en parle, par exemple.
Andrej Bauer

10

C'est le plus grand point fixe, ou la dernière hébreu, selon la façon dont vous configurez les choses. Dans Haskell, il est impossible de définir le type de données des listes finies car Haskell n'a pas de types inductifs, seulement les types coinductifs. Beaucoup de gens nient ce problème particulier.


Beaucoup de gens sont dans le déni?
miniBill

2
Bien sûr, je rencontre des gens qui essaient de prouver les choses par induction sur des listes, des arbres, etc. à Haskell. Ils prétendent que tous ces types de données sont inductifs.
Andrej Bauer

Et vous ne pouvez pas prouver les choses par induction sur des listes?
miniBill

2
Vous ne pouvez pas prouver les propriétés du type [a]dans Haskell par induction. Vous pouvez le faire pour un sous-ensemble des valeurs, à savoir les listes finies. Mais ce n'est pas ce qui [a]est.
Andrej Bauer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.