这些多态类型之间的区别是什么?

Which is the difference between these polymorphic types?

在系统F中,以下3种类型有什么区别:

转载于此:

∀X.((X → X) → (X → X))
∀X.((X → X) → ∀X.(X → X))
((∀X.X → X) → (∀X.X → X))

第二个比第一个更通用吗?

取决于 forall 量词绑定的紧密程度。假设它绑定到下一个终端表达式(变量或 ()-块)。

第一个将变为 (X0 -> X0) -> (X0 -> X0),其中 X0 是新类型变量。

第二个将变为 (X0 -> X0) -> forall X1. (X1 -> X1),其中 X0X1 是新鲜的。

第三个 - (bot -> X) -> (bot -> X) 其中 X 是旧绑定,bot 是无人居住的 forall X. X