在lambda演算中求解未知函数的函数方程


14

是否有任何技术可以解决lambda微积分中未知函数的函数方程?

假设我具有如下扩展定义的标识函数:

Ix=x

(即,为该函数的预期行为写下一个方程式),现在我想通过做一些代数变换来获得该函数的内涵式来为解决它:I

I=λx.x

告诉我们该函数如何精确地完成预期的工作(即,如何在lambda演算中实现它)。

当然,仅以身份功能为例。我对解决此类方程式的更通用方法感兴趣。特别是,我想找到一个满足以下要求的函数B

FλX中号=λXF中号

也就是说,将给定函数插入给定的lambda函数,使其位于其“ body”(它是任意的lambda表达式)之前,可能是通过拆开并构造一个新的函数,使其变为函数应用于的参数。FλX中号中号F

Answers:


13

这是一个已知的问题,称为高阶统一

不幸的是,这个问题通常是无法确定的。有一个可确定的片段,称为米勒模式片段。除其他外,它广泛用于具有元变量或模式匹配的依赖类型程序的类型检查。该片段是统一变量仅应用于不同的绑定程序变量的地方。

本文提供了一个很好的教程,介绍了高阶统一的工作原理,并逐步介绍了(相对)简单的实现。

不幸的是,您的函数看起来不属于此模式片段。也就是说,我所看到的与功能组合非常相似。以下功能是否满足您的要求?

=λF G X F G X

我们有:

  •  F λX中号
  • α -equivalence= F λÿ[ÿ/X]中号α
  • =λXF λÿ[ÿ/X]中号X
  • =λXF [X/ÿ][ÿ/X]中号
  • =λXF 中号

1
是啊,好像它:)有趣的是,我几乎得到了解决,但是从某些原因,我认为调用的东西会“执行它”,搞乱表达:问什么我错过的是我们可以将变量替换为外部绑定的另一个变量。λX中号
BarbaraKwarc

1
还要感谢您提供该论文的链接,我将检查出来,并在几天之内接受您的回答,也为其他人提供了机会。
BarbaraKwarc

3
这是更高阶的统一吗?问题似乎是关于未类型化的lambda演算,而不是简单类型的lambda演算。
彼得·泰勒

2

我想对带有恒等函数的方程式有一个部分答案:

一世X=X

我们希望通过找到对式来解决它,这将是这样的形式λ p 中号与一些未知的表达中号作为其主体。让我们用它替换在原来的公式:一世λp中号中号一世

λp中号X=X

然后将该函数应用于左侧的X

中号[p/X]=X

但是我们这里有什么?:>这个方程式是我们要寻找的表达式的公式,用x代替p中每次出现的p,它表示之后的样子应该像右手边:)换句话说,我们寻找的是:中号pX

一世=λXX

当然哪个是正确的答案:)


让我们尝试相同的方法来找到组合器的公式。我们希望它以某种方式工作,当应用于自身时,将产生应用于自身的自身:ω

ωω=ωω

现在,让我们发现对于式其为形式的λ X 中号对于一些未知表达中号。将其代入方程式,我们得到:ωλX中号中号

λX中号ω=ωω

将其应用于左侧的参数可得出的公式:中号

中号[X/ω]=ωω

这是说的每一个发生后取代中号ω它产生ωX中号ω,因此我们可以推断出替换之前的原始表达式 M应该为 xωω中号,因此我们要查找的函数应如下所示:XX

ω=λXXX

的确是这样:)


但是我有一种感觉,它可能变得如此简单,因为右侧已经在我们要查找的形式中。


是否有从出发的算法方法中号[X/ω]=ωωω=λXXX

在这两种简单的情况下–是的,有:只需反转替换即可。但是正如我所说,这些情况可能纯粹是靠运气:右手边已经处于所需的形式。当我用一些更复杂的示例进行尝试时,它没有用。不过,这就是我要寻找的:一种算法方式。
BarbaraKwarc

1
ωω=ωωωω
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.