case refl
l : List Char
c : Char
r : List Char
h : ValidFor l (c :: r) { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } }
⊢ ValidFor (c :: l) r
    (Iterator.next { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } })
l : List Char
c : Char
r : List Char
it : Iterator
h : ValidFor l (c :: r) it
⊢ ValidFor (c :: l) r (Iterator.next it)
cases h.out'
case refl
l : List Char
c : Char
r : List Char
h : ValidFor l (c :: r) { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } }
⊢ ValidFor (c :: l) r
    { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) + csize c } }
case refl
l : List Char
c : Char
r : List Char
h : ValidFor l (c :: r) { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } }
⊢ ValidFor (c :: l) r
    (Iterator.next { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } })
simp only [Iterator.next, next_of_valid l.reverse c r]
case refl
l : List Char
c : Char
r : List Char
h : ValidFor l (c :: r) { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } }
⊢ ValidFor (c :: l) r { s := { data := List.reverseAux l (c :: r) }, i := { byteIdx := utf8Len l + csize c } }
case refl
l : List Char
c : Char
r : List Char
h : ValidFor l (c :: r) { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } }
⊢ ValidFor (c :: l) r
    { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) + csize c } }
rw [← List.reverseAux_eq, utf8Len_reverse]
no goals
case refl
l : List Char
c : Char
r : List Char
h : ValidFor l (c :: r) { s := { data := List.reverse l ++ c :: r }, i := { byteIdx := utf8Len (List.reverse l) } }
⊢ ValidFor (c :: l) r { s := { data := List.reverseAux l (c :: r) }, i := { byteIdx := utf8Len l + csize c } }
constructor