Documentation

RegexCorrectness.Strategy.Materialize.Lemmas

@[simp]
theorem Regex.Strategy.materializeRegexGroups_group {tag : } {first last : String.Pos} {groups : Data.CaptureGroups} :
materializeRegexGroups (Data.CaptureGroups.group tag first last groups) = fun (tag' : ) => if tag = tag' then some (first, last) else materializeRegexGroups groups tag'
@[simp]
theorem Regex.Strategy.materializeUpdatesAux_snoc {n : } {accum : Vector (Option String.Pos) n} {updates : List ( × String.Pos)} {offset : } {pos : String.Pos} :
materializeUpdatesAux n accum (updates ++ [(offset, pos)]) = (materializeUpdatesAux n accum updates).setIfInBounds offset (some pos)
theorem Regex.Strategy.materializeUpdatesAux_swap {n : } {accum : Vector (Option String.Pos) n} {updates : List ( × String.Pos)} {offset₁ : } {pos₁ : String.Pos} {offset₂ : } {pos₂ : String.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 {n : } {accum : Vector (Option String.Pos) n} {updates : List ( × String.Pos)} {offset : } {pos : String.Pos} (h : ∀ (offset' : ) (pos' : String.Pos), (offset', pos') updatesoffset offset') :
materializeUpdatesAux n accum ((offset, pos) :: updates) = (materializeUpdatesAux n accum updates).setIfInBounds offset (some pos)
theorem Regex.Strategy.materializeUpdatesAux_append {n : } {accum : Vector (Option String.Pos) n} {updates₁ updates₂ : List ( × String.Pos)} :
materializeUpdatesAux n accum (updates₁ ++ updates₂) = materializeUpdatesAux n (materializeUpdatesAux n accum updates₁) updates₂
theorem Regex.Strategy.materializeUpdatesAux_getElem {n : } {accum : Vector (Option String.Pos) n} {updates : List ( × String.Pos)} {offset : } (h : offset < n) :
(materializeUpdatesAux n accum updates)[offset] = ((materializeUpdatesAux n (Vector.replicate n none) updates)[offset] <|> accum[offset])
@[simp]
theorem Regex.Strategy.materializeUpdates_snoc {n : } {updates : List ( × String.Pos)} {offset : } {pos : String.Pos} :
materializeUpdates n (updates ++ [(offset, pos)]) = (materializeUpdates n updates).setIfInBounds offset (some pos)
theorem Regex.Strategy.materializeUpdates_append_getElem {n : } {updates₁ updates₂ : List ( × String.Pos)} {offset : } (h : offset < n) :
(materializeUpdates n (updates₁ ++ updates₂))[offset] = ((materializeUpdates n updates₂)[offset] <|> (materializeUpdates n updates₁)[offset])