{-@ unsafeIndexB :: a:Array -> o:AValidO a -> l:AValidL o a
                 -> i:{v:Int | Btwn v o (o + l)}
                 -> {v:Word16 | (if (v >= 56320 && v <= 57343)
                                 then ((numchars(a, o, (i - o )+1)
                                     = (1 + numchars(a, o, (i-o)-1)))
                                    && (numchars(a, o, (i-o-1)) >= 0)
                                    && (((i-o)-1) >= 0))
                                 else ((numchars(a, o, (i-o)+1)
                                     = (1 + numchars(a, o, i-o)))
                                    && (numchars(a, o, (i-o)) >= 0)))}
  @-}
unsafeIndexB :: Array -> Int -> Int -> Int -> Word16
unsafeIndexB a o l i = let x = unsafeIndex a i
                       in liquidAssume (unsafeIndexBQ x a o i) x
unsafeIndexB :: Array -> Int -> Int -> Int -> Word16
unsafeIndexB a o l i = let x = unsafeIndex a i
                       in liquidAssume (unsafeIndexBQ x a o i) x
unsafeIndexB a o l i = let x = unsafeIndex a i
                       in liquidAssume (unsafeIndexBQ x a o i) x