universe variables u inductive vec (A : Type u) : nat → Type (max 1 u) | nil {} : vec 0 | cons : Π {n}, A → vec n → vec (n+1) open vec variables {A : Type u} variables f : A → A → A /- The following definition fails because the pattern variables are introduced in the following order: a va n b vb However, the type of va must be (vec A n). That is, it depends on a variable introduced after va. The error message is confusing. Alternatives: 1- Ignore the problem since this is a very obscure use of inaccessible terms. 2- Reorder variables based on their occurrence in inaccessible terms. If we do that, the variables in the pattern will be ordered as: n a va b vb and this example will work. This is not fully satisfactor since we can create another declaration where this heuristic is not the right solution. 3- Produce a better error message. -/ definition map_head : ∀ {n}, vec A n → vec A n → vec A n | .0 nil nil := nil | .(n+1) (@cons .A .n a va) (@cons .A n b vb) := cons (f a b) va