{motive : List Char → String.Pos.Raw → Sort u} →
  (s : List Char) →
    (i p : String.Pos.Raw) →
      ((i : String.Pos.Raw) → motive [] i) →
        ((c : Char) → (cs : List Char) → motive (c :: cs) p) →
          ((c : Char) → (cs : List Char) → (i : String.Pos.Raw) → i ≠ p → motive cs (i + c) → motive (c :: cs) i) →
            motive s i