【问题标题】:Are all pure functions in functional programming continuous?函数式编程中的所有纯函数都是连续的吗?
【发布时间】:2016-04-09 15:08:04
【问题描述】:

我知道 Haskell 函数集只是所有数学函数的一个子集,因为它是一种编程语言,所以它的所有函数都必须是可计算的。但是,从数学的角度来看,所有 Haskell 函数(以及一般的纯函数)都是continuous,这是真的吗?

【问题讨论】:

  • @HarryDeveloper1212 我认为这是一个很好的问题。我进行了一些编辑,以便(我希望)澄清我理解问题的含义。如果您对我的更改不满意,请随时再次edit your question 将其恢复。

标签: function haskell math functional-programming purely-functional


【解决方案1】:

可计算函数在 Scott 连续性的意义上是连续的,在您链接到的 Wikipedia 页面的第二段中提到。

连续函数的一个例子是(伪Haskell)

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 : _|_ -} = _|_

它不能连续,因为

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

是序列的上确界

_|_
() : _|_
() : () : _|_
...

但是

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

不是序列的上确界

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

可计算函数是连续的,本质上是因为在有限的时间内,函数只能检查有限数量的输入。因此,如果一个可计算函数在特定输入上返回 True,它必须在输入集中的每个输入上返回 True,这些输入与特定有限观察集合上的原始输入一致。任何收敛到原始输入的递增序列最终都会落在这个集合内,所以这个递增序列上的函数值序列将收敛到True

连续函数不一定是可计算的。例如,任何保序(即f _|_ = _|_,或f 是常数)函数Integer -> Bool 是连续的,因为Integer 是一个平面域。但当然,其中只有无数个是可计算的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 2018-10-30
    • 2020-07-10
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2018-04-12
    相关资源
    最近更新 更多