Documentation

RegexCorrectness.Strategy.Materialize.Lemmas

@[simp]
theorem Regex.Strategy.materializeRegexGroups_group {s : String} {tag : } {first last : s.Pos} {groups : Data.CaptureGroups s} :
materializeRegexGroups (Data.CaptureGroups.group tag first last groups) = fun (tag' : ) => if tag = tag' then some (first, last) else materializeRegexGroups groups tag'
theorem Regex.Strategy.mem_tags_of_materializeRegexGroups_some {s : String} {e : Data.Expr} {pos pos' : s.Pos} {groups : Data.CaptureGroups s} {tag : } (c : Data.Expr.Captures pos pos' groups e) (isSome : (materializeRegexGroups groups tag).isSome = true) :
tag e.tags
@[simp]
theorem Regex.Strategy.materializeUpdatesAux_snoc {s : String} {n : } {accum : Vector s.PosPlusOne n} {updates : List ( × s.Pos)} {offset : } {pos : s.Pos} :
materializeUpdatesAux n accum (updates ++ [(offset, pos)]) = (materializeUpdatesAux n accum updates).setIfInBounds offset (String.PosPlusOne.pos pos)
theorem Regex.Strategy.materializeUpdatesAux_swap {s : String} {n : } {accum : Vector s.PosPlusOne n} {updates : List ( × s.Pos)} {offset₁ : } {pos₁ : s.Pos} {offset₂ : } {pos₂ : s.Pos} (ne : offset₁ offset₂) :
materializeUpdatesAux n accum ((offset₁, pos₁) :: (offset₂, pos₂) :: updates) = materializeUpdatesAux n accum ((offset₂, pos₂) :: (offset₁, pos₁) :: updates)
theorem Regex.Strategy.materializeUpdatesAux_cons_of_not_in {s : String} {n : } {accum : Vector s.PosPlusOne n} {updates : List ( × s.Pos)} {offset : } {pos : s.Pos} (h : ∀ (offset' : ) (pos' : s.Pos), (offset', pos') updatesoffset offset') :
materializeUpdatesAux n accum ((offset, pos) :: updates) = (materializeUpdatesAux n accum updates).setIfInBounds offset (String.PosPlusOne.pos pos)
@[simp]
theorem Regex.Strategy.materializeUpdatesAux_append {s : String} {n : } {accum : Vector s.PosPlusOne n} {updates₁ updates₂ : List ( × s.Pos)} :
materializeUpdatesAux n accum (updates₁ ++ updates₂) = materializeUpdatesAux n (materializeUpdatesAux n accum updates₁) updates₂
theorem Regex.Strategy.materializeUpdatesAux_getElem {s : String} {n : } {accum : Vector s.PosPlusOne n} {updates : List ( × s.Pos)} {offset : } (h : offset < n) :
(materializeUpdatesAux n accum updates)[offset] = ((materializeUpdatesAux n (Vector.replicate n (String.PosPlusOne.sentinel s)) updates)[offset] <|> accum[offset])
@[simp]
theorem Regex.Strategy.materializeUpdates_snoc {s : String} {n : } {updates : List ( × s.Pos)} {offset : } {pos : s.Pos} :
materializeUpdates n (updates ++ [(offset, pos)]) = (materializeUpdates n updates).setIfInBounds offset (String.PosPlusOne.pos pos)
theorem Regex.Strategy.materializeUpdates_append_getElem {s : String} {n : } {updates₁ updates₂ : List ( × s.Pos)} {offset : } (h : offset < n) :
(materializeUpdates n (updates₁ ++ updates₂))[offset] = ((materializeUpdates n updates₂)[offset] <|> (materializeUpdates n updates₁)[offset])