It would still be correct if τi contains a variable that does not belong
to α, since this variable would not be generalized in the types
of constructors and destructors.
(Of course, it would be unsafe to generalize such a variable: for instance,
one could then define type g = Cg of α with Cg : ∀ α. α → g and f : ∀ α,
β. g → (α → β) → β and assign any type to
the expression e =def match Cg 1 with Cg y ⇒ y ≡ f (Cg 1)
(λ y. y), which reduces to the integer 1.)
Conversely, it is safe, although strange and useless, that α contains
superfluous variables. Consider for instance the definition type g(α)
= Cg of int. Then g 1 would have type g(α) for
any type α.
Note that the latter is allowed in OCaml, while the former is rejected.