【发布时间】:2015-02-23 23:00:03
【问题描述】:
是否有任何有效的算法可以在简单类型的 lambda 演算的类型良好的封闭项和自然数之间进行映射?例如,使用 bruijn 索引(并且可能顺序不正确):
0 → (λ 0)
1 → (λ (λ (0 1)))
2 → (λ (λ (1 0)))
3 → (λ 0 (λ 0))
4 → (λ (λ 0) 0)
5 → (λ (λ 1) 0)
6 → ... so on
相关问题:是否有一种算法可以在自然数和简单类型 lambda 演算的规范化项之间进行映射?此外,同样的问题也适用于无类型 lambda 演算。
【问题讨论】:
-
它必须是双射的吗?如果是这样,我不相信有任何有效的解决方案。
-
如果识别归一化项不可计算,那么您可能对枚举算法不满意。
-
您所说的“地图之间”是指两个地图,每个方向一个地图(可能它们彼此相反,使其成为同构)?此外,您是否希望它仅限于 Church 数字,还是希望它适用于任意 lambda 项?听起来您正在寻找后者,后者(如果我问的第一件事是正确的)似乎在询问所有 lambda 演算项的集合是否可数。
-
是的,两张地图。函数“natToLambda”及其反函数“lambdaToNat”。是的,我想要后者。是可数的!
-
你需要
lambdaToNat是满射的吗?
标签: algorithm search functional-programming enumeration lambda-calculus