6

私は、Haskell関数の集合はすべての数学関数のサブセットであることを知っています。なぜなら、それはプログラミング言語なので、関数のすべてが計算可能でなければならないからです。しかし、すべてのハスケル関数(および一般的な純関数)はcontinuousであり、数学的な観点から真実であるか?関数型プログラミングの純関数はすべて連続していますか?

+1

@ HarryDeveloper1212これは良い質問だと思います。私は、質問が意味することを理解していることを明確にするために(私が望む)いくつかの編集を行った。変更に不満がある場合は、[質問の編集](http://stackoverflow.com/posts/34617662/edit)をもう一度押してください。 –

答えて

18

計算機能は、リンク先のWikipediaページの第2段落に記載されているスコットの連続性という意味で連続しています。

連続ないある(擬似ハスケル)である関数の一例

isInfinite :: [a] -> Bool 
isInfinite xs 
    | {- xs is an infinite list x0 : x1 : x2 : ... -}  = True 
    | {- xs is a finite list x0 : x1 : x2 : ... : xn : [] -} = False 
    | {- xs is a list with diverging spine 
          x0 : x1 : x2 : ... : xn : _|_ -} = _|_ 

() :() :() : ... 

シーケンス

のsupremumあるので連続して失敗しました
_|_ 
() : _|_ 
() :() : _|_ 
... 

しかし、

True = isInfinite (() :() :() : ...) 

シーケンスのsupremumない

_|_ = isInfinite (_|_) 
_|_ = isInfinite (() : _|_) 
_|_ = isInfinite (() :() : _|_) 
... 

計算可能な関数は、時間の有限量で機能のみ、その入力の有限の量を検査することができ、本質的にので、連続しています。したがって、計算可能な関数が、例えば特定の入力でTrueを返す場合、特定の有限の観測値の収集に対する元の入力と一致する入力セットのすべての入力に対して、Trueを返す必要があります。元の入力に収束する任意の増加するシーケンスは、最終的に着陸し、このセット内にとどまるので、この増加するシーケンス上の関数の値のシーケンスは、Trueに収束する。

連続関数は必ずしも計算可能ではありません。例えば、Integerがフラットなドメインであるため、任意の順序保存(すなわち、f _|_ = _|_、またはfは定数)機能Integer -> Boolが連続しています。もちろん、それらの多くは計算可能です。

+0

優れた、明確な答え。 – luqui

関連する問題