∀ (bytes : ByteArray) (i : ℕ),
  bytes.utf8DecodeChar? i =
    if h₀ : i < bytes.size then
      match h : ByteArray.utf8DecodeChar?.parseFirstByte bytes[i] with
      | ByteArray.utf8DecodeChar?.FirstByte.invalid => none
      | ByteArray.utf8DecodeChar?.FirstByte.done => ByteArray.utf8DecodeChar?.assemble₁ bytes[i] h
      | ByteArray.utf8DecodeChar?.FirstByte.oneMore =>
        if h₁ : i + 1 < bytes.size then ByteArray.utf8DecodeChar?.assemble₂ bytes[i] bytes[i + 1] else none
      | ByteArray.utf8DecodeChar?.FirstByte.twoMore =>
        if h₁ : i + 2 < bytes.size then ByteArray.utf8DecodeChar?.assemble₃ bytes[i] bytes[i + 1] bytes[i + 2] else none
      | ByteArray.utf8DecodeChar?.FirstByte.threeMore =>
        if h₁ : i + 3 < bytes.size then
          ByteArray.utf8DecodeChar?.assemble₄ bytes[i] bytes[i + 1] bytes[i + 2] bytes[i + 3]
        else none
    else none