Documentation

RegexCorrectness.Strategy.Materialize.Lemmas

@[simp]
theorem Regex.Strategy.materializeRegexGroups_group {s : String} {tag : } {first last : s.ValidPos} {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.ValidPos} {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.ValidPosPlusOne n} {updates : List ( × s.ValidPos)} {offset : } {pos : s.ValidPos} :
materializeUpdatesAux n accum (updates ++ [(offset, pos)]) = (materializeUpdatesAux n accum updates).setIfInBounds offset (String.ValidPosPlusOne.validPos pos)
theorem Regex.Strategy.materializeUpdatesAux_swap {s : String} {n : } {accum : Vector s.ValidPosPlusOne n} {updates : List ( × s.ValidPos)} {offset₁ : } {pos₁ : s.ValidPos} {offset₂ : } {pos₂ : s.ValidPos} (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.ValidPosPlusOne n} {updates : List ( × s.ValidPos)} {offset : } {pos : s.ValidPos} (h : ∀ (offset' : ) (pos' : s.ValidPos), (offset', pos') updatesoffset offset') :
materializeUpdatesAux n accum ((offset, pos) :: updates) = (materializeUpdatesAux n accum updates).setIfInBounds offset (String.ValidPosPlusOne.validPos pos)
theorem Regex.Strategy.materializeUpdatesAux_append {s : String} {n : } {accum : Vector s.ValidPosPlusOne n} {updates₁ updates₂ : List ( × s.ValidPos)} :
materializeUpdatesAux n accum (updates₁ ++ updates₂) = materializeUpdatesAux n (materializeUpdatesAux n accum updates₁) updates₂
theorem Regex.Strategy.materializeUpdatesAux_getElem {s : String} {n : } {accum : Vector s.ValidPosPlusOne n} {updates : List ( × s.ValidPos)} {offset : } (h : offset < n) :
(materializeUpdatesAux n accum updates)[offset] = ((materializeUpdatesAux n (Vector.replicate n (String.ValidPosPlusOne.sentinel s)) updates)[offset] <|> accum[offset])
@[simp]
theorem Regex.Strategy.materializeUpdates_snoc {s : String} {n : } {updates : List ( × s.ValidPos)} {offset : } {pos : s.ValidPos} :
theorem Regex.Strategy.materializeUpdates_append_getElem {s : String} {n : } {updates₁ updates₂ : List ( × s.ValidPos)} {offset : } (h : offset < n) :
(materializeUpdates n (updates₁ ++ updates₂))[offset] = ((materializeUpdates n updates₂)[offset] <|> (materializeUpdates n updates₁)[offset])