∀ {i p : ℕ} (motive : (cs : List Char) → List Char → i + String.utf8Len cs = p → Prop) (cs cs' : List Char)
  (hp : i + String.utf8Len cs = p),
  (∀ (hp : i + String.utf8Len [] = p), motive [] [] hp) →
    (∀ (c : Char) (cs' : List Char) (hp : i + String.utf8Len [] = p), motive [] (c :: cs') hp) →
      (∀ (c : Char) (cs cs' : List Char) (hp : i + String.utf8Len (c :: cs) = p), motive (c :: cs) cs' hp) →
        motive cs cs' hp