Hi Michael,
Sorry about that! In brief, the issue was that there
are MULTIPLE definitions of height -- `realHeight` and
`getHeight` you need to tell LH that they are "equivalent".
Now, in reality, you HAVE told LH they are equivalent, with
the spec:
{-@ getHeight :: t:AVL a -> {v:Nat | v = realHeight t} @-}
which _should_ generate the internal "invariant"
{-@ invariant {v: AVL a | getHeight v == realHeight v} @-}
but which, for some reason is _not_ doing so. (This is a bug in LH, that I will look into.)
For now, you can make progress by adding the above `invariant` line.
Sorry about this bug; will look into it ASAP!
- Ranjit.