Quale fixpoint è il tipo di elenco Haskell?


Risposte:


4

La cosa giusta è configurare

data ListF a x = Nil | Cons a x

Adesso puoi scrivere

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

In Haskell possiamo osservarlo Mu ListFe Nu ListFcoincidere. Quindi, può essere uno dei due (!). (una fonte su questo reclamo: http://www.cs.ox.ac.uk/jeremy.gibbons/publications/adt.pdf )

Inoltre, possiamo provare le cose attraverso l'induzione su tutti gli elenchi e ottenere prove che funzionano fino a quando ci limitiamo a prenderci cura di quelli finiti, come descritto qui: http://www.cs.ox.ac.uk/jeremy.gibbons/ pubblicazioni / veloce + loose.pdf

Altri due riferimenti su questo sono:


Penso che ti manchi una x in quella dichiarazione del tipo di dati ...
miniBill

2
C'è una ragione per cui Jeremy ha definito quel giornale "veloce e sciolto". Questa risposta è esattamente il tipo di negazione di cui sto parlando. È il più grande punto fisso, fine della storia. Il primo articolo collegato di Jeremy parla di questo, per esempio.
Andrej Bauer,

10

È il più grande punto fisso, o la coalgebra finale, a seconda di come si impostano le cose. In Haskell è impossibile definire il tipo di dati delle liste finite perché Haskell non ha tipi induttivi, ma solo quelli induttivi. Molte persone negano questo particolare problema.


Molte persone negano?
miniBill

2
Certo, incontro persone che cercano di provare le cose per induzione su liste, alberi, ecc. A Haskell. Fingono che tutti questi tipi di dati siano induttivi.
Andrej Bauer,

E non puoi provare le cose per induzione nelle liste?
miniBill

2
Non è possibile dimostrare le proprietà del tipo [a]in Haskell per induzione. È possibile farlo per un sottoinsieme dei valori, vale a dire le liste finite. Ma questo non[a] è ciò che è.
Andrej Bauer,
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.