{motive : String.Legacy.Iterator → String.Legacy.Iterator → Sort u} →
  ((s₁ s₂ : String) →
      (i₁ i₂ : String.Pos.Raw) →
        { s := s₂, i := i₂ }.hasNext = true →
          { s := s₁, i := i₁ }.hasNext = true →
            String.Pos.Raw.get s₁ i₁ = String.Pos.Raw.get s₂ i₂ →
              motive { s := s₁, i := i₁ }.next { s := s₂, i := i₂ }.next →
                motive { s := s₁, i := i₁ } { s := s₂, i := i₂ }) →
    ((s₁ s₂ : String) →
        (i₁ i₂ : String.Pos.Raw) →
          { s := s₂, i := i₂ }.hasNext = true →
            { s := s₁, i := i₁ }.hasNext = true →
              ¬String.Pos.Raw.get s₁ i₁ = String.Pos.Raw.get s₂ i₂ → motive { s := s₁, i := i₁ } { s := s₂, i := i₂ }) →
      ((s₁ s₂ : String) →
          (i₁ i₂ : String.Pos.Raw) →
            { s := s₂, i := i₂ }.hasNext = true →
              ¬{ s := s₁, i := i₁ }.hasNext = true → motive { s := s₁, i := i₁ } { s := s₂, i := i₂ }) →
        ((s₁ s₂ : String) →
            (i₁ i₂ : String.Pos.Raw) →
              ¬{ s := s₂, i := i₂ }.hasNext = true → motive { s := s₁, i := i₁ } { s := s₂, i := i₂ }) →
          (_x : (_ : String.Legacy.Iterator) ×' String.Legacy.Iterator) → motive _x.1 _x.2