В чем разница между этими полиморфными типами?

В системе F, в чем разница между следующими 3 типами: Три формулы, включающие в себя и подразумевают, как показано ниже

Воспроизводится в тексте здесь:

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

Второй является более общим, чем первый?

1 ответ

Решение

Зависит от того, насколько туго forall квантификатор связывает. Предположим, что он связывается со следующим терминальным выражением (переменная или ()-блок).

Первым станет (X0 -> X0) -> (X0 -> X0) где X0 переменная нового типа.

Второй станет (X0 -> X0) -> forall X1. (X1 -> X1) где X0 а также X1 свежие.

Третий - (bot -> X) -> (bot -> X) где X старый переплет, а бот необитаемый forall X. X,

Другие вопросы по тегам