【问题标题】:Why does the y-combinator provide Turing equivalence?为什么 y 组合器提供图灵等价性?
【发布时间】:2014-09-30 12:04:54
【问题描述】:

This answer

  1. 这是 lambda 演算中的一个基本 y 组合子:

    Y f = (\x -> f (x x)) (\x -> f (x x))

即 Clojure 中的类似内容:

(defn Y [f]
  ((fn [x] (x x))
   (fn [x]
     (f (fn [& args]
          (apply (x x) args))))))

(def fac
     (fn [f]
       (fn [n]
         (if (zero? n) 1 (* n (f (dec n)))))))

(def fib
     (fn [f]
       (fn [n]
         (condp = n
           0 0
           1 1
           (+ (f (dec n))
              (f (dec (dec n))))))))
  1. 这是 y-Combinator 的另一个表达式(参数的第 2 步)

  2. 我们已经编码了图灵完备的语言(因为我们使用了 y-Combinator)(论证的第 3 步)

我的问题是:为什么 y-combinator 提供图灵等价性? 看来这只是一个论点的假设。

【问题讨论】:

    标签: clojure lambda-calculus turing-complete y-combinator


    【解决方案1】:

    由于只有 λ 已经足够图灵完备,Y Combinator 只是库代码。它提供了简单的自递归。

    我读到的问题是,是否可以通过消除自应用来消除 λ 演算中的图灵完整性,问题显然是否定的,因为没有办法可靠地检测自应用,除非实际运行微积分(停止问题)。

    这个论点只是展示了如何在没有明显自递归的情况下构建 Y,并强调 Y 只是整个模式系列中最精简的版本。

    对于不是图灵完备的 lambda 演算子集的真正答案是:总函数。

    【讨论】:

      【解决方案2】:

      首先。要成为图灵等价物,您不需要太多。在 BrainF**ck 中,+-<>[] 就足够了。如果您要从 LISPy 语言中删除功能并首先删除所有循环和递归调用(Fortran 在 60 中没有递归),它仍然是图灵等效的吗?

      是的。这是因为您同时具有向上和向下的高阶函数。有了它,您可以创建Y 并获得递归。使用递归,即使实现没有直接提供任何循环,它也将是图灵等价的。

      是启用它的 Y 组合器吗?并不真地。您也可以使用call-with-current-continuation 进行循环,所以我会说它是启用它的高阶函数。如果您在没有高阶函数的语言中执行完全相同的操作,则无法创建 Y 并且无法计算所有可计算值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        • 2021-03-21
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        相关资源
        最近更新 更多