Haskellリストタイプはどのフィックスポイントですか?


9

リストが次のように定義されているとしましょう

List a = Nil | Cons a (List a)

次に、HaskellでList x最大または最小の固定点は何ですか?lfpは無限リストを除外する必要がありますが(ただし、Haskellで作成できます)、gfpは有限リストを除外する必要があるためです。

回答:


4

適切なことはセットアップすることです

data ListF a x = Nil | Cons a x

今、あなたは書くことができます

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

Haskellではそれを観察しMu ListFNu ListF一致させることができます。つまり、どちらか(!)(この主張に関する1つの情報源:http : //www.cs.ox.ac.uk/jeremy.gibbons/publications/adt.pdf

さらに、ここで説明するように、すべてのリストの帰納法によって物事を証明し、有限なものを気にすることに限定する限り、機能する証明を得ることができます。http//www.cs.ox.ac.uk/jeremy.gibbons/ Publications / fast + loose.pdf

これに関する他の2つの参照は次のとおりです。


そのデータ型宣言でxが欠落していると思います...
miniBill

2
ジェレミーがその論文を「速くて緩い」と呼んだのには理由があります。この答えはまさに私が話している否定のようなものです。これが最大の定点、話の終わりです。たとえば、ジェレミーの最初のリンクされた論文はそれについてです。
Andrej Bauer

10

これは、設定方法に応じて、最大の固定小数点、つまり最終的な代数です。Haskellには帰納型はなく、共帰型のみがあるため、Haskellでは有限リストのデータ型を定義することは不可能です。多くの人々がこの特定の問題について否定しています。


多くの人が否定していますか?
miniBill 2014年

2
もちろん、Haskellのリストや木などを帰納的に証明しようとする人に会います。これらのデータ型はすべて帰納的であると偽っています。
Andrej Bauer

そして、リストの帰納法によって証明することはできませんか?
miniBill 2014年

2
[a]Haskellで型のプロパティを帰納的に証明することはできません。これは、値のサブセット、つまり有限リストに対して行うことができます。しかし、これはあるではない何か[a]です。
Andrej Bauer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.