高阶模式匹配是一个不确定的问题。这意味着不存在算法,给定的公式a => b
,其中a
和b
是在简单类型λ演算的开放式术语,认定的取代S
,使得aS => bS
,其中=>
代表“具有相同的BN正常形式”。但是,人类可以有效地解决该问题。例如,给定以下问题:
a = (λt . t
(F (λ f x . (f (f (f x)))))
(F (λ f x . (f (f x)))))
b = (λ t . t
(λ f x . (f (f (f (f (f (f x)))))))
(λ f x . (f (f (f (f x))))))
任何对lambda演算有足够了解的人都将能够注意到F
教堂数字的“双重”功能,很快就会带来以下解决方案:
F = (λ a b c . (a b (a b c)))
我的问题是:如果这个问题无法确定,那么人类如何迅速而轻松地解决它?
24
“人类可以有效地解决该问题”-需要引用。您的证据是什么?显示一个可以有效解决问题的示例并不意味着您可以针对问题的所有实例有效解决问题。您不能通过显示X的一个示例来证明“对于所有X,X都是正确的”。
—
DW
问题是无法确定的,这意味着没有算法可以针对问题的每个实例正确回答“是”或“否” 。这并不意味着可以找到一种算法来解决某些(或许多)问题实例。[呵呵。正如我在撰写此评论时DW回答的那样。]
—
Rick Decker
解决这个问题?我什至不明白这个问题。
—
MikeTheLiar 2015年
我的理解是这样的:该解决方案是一个临时的解决方案。问题的每个实例都有一个-在大多数情况下,不像示例中那样容易引起,但是您始终可以说“如果获得实例X,则输出Y”,因为只能基于正确性来判断算法-但是以这种方式对所有此类解决方案进行硬编码不会产生有限的过程(这是唯一合理的种类,因此通常是什么意思)。换句话说,为了确定问题,在选择算法策略之前,您不可以查看给出了哪个实例。
—
范德蒙德2015年
同样,这就是为什么通常只考虑或调用无数个实例的问题的原因,因为否则您可以枚举上述所有解决方案。
—
范德蒙德2015年