-1

In System F, what is the difference between the following 3 types: Three formulas involving forall and implies as below.

Reproduced in text here:

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

Is the second one more general than the first?

Bakuriu
  • 98,325
  • 22
  • 197
  • 231
yonutix
  • 1,964
  • 1
  • 22
  • 51
  • Downvote wasn't me, but I think you should ask that on cs.stackexchange.com. – snøreven Feb 08 '16 at 15:22
  • Me neither, but CS might be more suitable -- this is not about Haskell. Also, I'd start from alpha-converting those quantifiers ... – chi Feb 08 '16 at 15:24
  • Do you mean that after forall I sould replace a with b? – yonutix Feb 08 '16 at 15:56
  • 1
    Belongs to cs.se, but probably even they would want a clearer question with what you understand and what not: instead of just "solve this for me". – Ramon Snir Feb 08 '16 at 16:16

1 Answers1

0

Depends on how tight forall quantifier binds. Lets assume that it binds on next terminal expression (variable or ()-block).

The first will become (X0 -> X0) -> (X0 -> X0) where X0 is a fresh type variable.

The second will become (X0 -> X0) -> forall X1. (X1 -> X1) where X0 and X1 are fresh.

The third - (bot -> X) -> (bot -> X) where X is the old binding and bot is the uninhabited forall X. X.

Heimdell
  • 617
  • 5
  • 11