找到没有以下类型的自由变量的lambda-terme?

时间:2013-12-09 20:49:33

标签: lambda functional-programming lambda-calculus

有人可以解释一下在没有以下类型的自由变量的情况下找到lambda-terme的过程吗?我对如何解决这个问题有所了解,但我不确定这是正确的方法。

a)p->(q-> q)
b)(p-> q) - >((q-> r) - >(p-> r))
c)(p->(q->(q-> r))) - >(p->(q-> r))

1 个答案:

答案 0 :(得分:0)

a)p -> (q -> q)

我们需要点p

\p -> …

并产生一个q -> q,所以我们重复一次,取q,我们唯一可以做的就是返回那个q

\p -> \q -> q

我们可以添加parens以强调:

\p -> (\q -> q)

b)(p - > q) - > ((q - > r) - >(p - > r))

我们再说一遍。我们的术语从pq的函数开始:

\p2q -> …

它必须返回((q -> r) -> (p -> r))类型的函数,因此我们首先返回一些函数从q返回r

\p2q -> \q2r -> …

我们现在需要它来生成r给定p。只有很多方法可以拼凑出可用的部分:

\p2q -> \q2r -> \p -> q2r (p2q p)

再次,用重点括号:

\p2q -> (\q2r -> (\p -> q2r (p2q p)))

c)(p -> (q -> (q -> r))) -> (p -> (q -> r))

嗯,我的命名惯例在这一点上有点短暂;)

首先,我们的术语需要(p -> (q -> (q -> r)))

\p2q2q2r -> …

接下来,我们必须生成(p -> (q -> r))类型的字词,因此我们将其设为p,然后选择q

\p2q2q2r -> \p -> \q -> …

现在生成r只是将我们拥有的东西拼凑起来

\p2q2q2r -> \p -> \q -> ((p2q2q2r p) q) q

希望帮助你完成家庭作业;)