∀ {ρ : Type} (pat : ρ) [inst : String.Slice.Pattern.Model.PatternModel pat] {s : String.Slice} (pos' : s.Pos)
  {l : List (String.Slice.Pattern.SearchStep s)} {startPos endPos : s.Pos},
  startPos < endPos →
    (∀ (pos : s.Pos), startPos ≤ pos → pos < endPos → ¬String.Slice.Pattern.Model.MatchesAt pat pos) →
      (List.findSome?
              (fun x =>
                match x with
                | String.Slice.Pattern.SearchStep.matched s_1 endPos => some s_1
                | String.Slice.Pattern.SearchStep.rejected startPos endPos => none)
              l =
            some pos' ↔
          endPos ≤ pos' ∧
            String.Slice.Pattern.Model.MatchesAt pat pos' ∧
              ∀ (pos'' : s.Pos), endPos ≤ pos'' → pos'' < pos' → ¬String.Slice.Pattern.Model.MatchesAt pat pos'') →
        (List.findSome?
              (fun x =>
                match x with
                | String.Slice.Pattern.SearchStep.matched s_1 endPos => some s_1
                | String.Slice.Pattern.SearchStep.rejected startPos endPos => none)
              (String.Slice.Pattern.SearchStep.rejected startPos endPos :: l) =
            some pos' ↔
          startPos ≤ pos' ∧
            String.Slice.Pattern.Model.MatchesAt pat pos' ∧
              ∀ (pos'' : s.Pos), startPos ≤ pos'' → pos'' < pos' → ¬String.Slice.Pattern.Model.MatchesAt pat pos'')