将积极的积极量词提升到外面是否有效?

时间:2014-02-28 12:15:39

标签: haskell quantifiers

关于#haskell的讨论提出了这个问题。

如果它的出现是积极的,将深嵌套的forall提升到顶部是否总是正确的?

E.g:

((forall a. P(a)) -> S) -> T

(其中P,S,T应理解为元变量)

forall a. (P(a) -> S) -> T

(我们通常会将其写为(P(a) -> S) -> T

我知道你肯定被允许从某些积极的位置收集foralls,例如在最后->的右边等等。

这在经典逻辑中是有效的,所以这不是一个荒谬的想法,但总的来说它在直觉逻辑中是无效的。然而,我的非正式博弈理论对量词的直觉,即每个类型变量“由来电者选择”或“由被叫者选择”表明实际上只有两个选择,你可以将所有“由来电者选择”选项提升到顶端。除非游戏中的移动交错很重要吗?

1 个答案:

答案 0 :(得分:3)

假设

foo :: ((forall a. P a) -> S) -> T

并且为了讨论S = (P Int, P Char)。可能的类型正确的调用可能是:

foo (\x :: (forall a. P a) -> (x,x))

现在,假设

bar :: forall a. (P a -> S) -> T

其中S如上所述。现在很难调用bar!我们试着在a = Int上调用它:

bar (\x :: P Int -> (x, something))

现在我们需要一个something :: P Char,它不能简单地从x派生。如果a = Char,也会发生同样的情况。如果a不是Int, Char,那么情况会更糟。

你提到了直觉主义的逻辑。您可能会在该逻辑中看到foo的类型强于bar的类型。作为一个更强有力的假设,foo的类型因此可以应用于证据中的更多案例。因此,如果发现foo适用于更多情境,那就不足为奇了! :)