Documentation

RegexCorrectness.NFA.Semantics.Equivalence.PathOfCaptures

theorem Regex.NFA.path_of_captures.group {s : String} {nfa : NFA} {next : } {e : Data.Expr} {result : NFA} {pos pos' : s.ValidPos} {groups : Data.CaptureGroups s} {tag : } (eq : nfa.pushRegex next (Data.Expr.group tag e) = result) (wf : nfa.WellFormed) (next_lt : next < nfa.nodes.size) (ih : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next e = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups update result.Path nfa.nodes.size result.start pos next pos' update) :
∃ (update : List ( × s.ValidPos)), EquivUpdate (Data.CaptureGroups.group tag pos pos' groups) update result.Path nfa.nodes.size result.start pos next pos' update
theorem Regex.NFA.path_of_captures.alternateLeft {s : String} {nfa : NFA} {next : } {result : NFA} {pos pos' : s.ValidPos} {groups : Data.CaptureGroups s} {e₁ e₂ : Data.Expr} (eq : nfa.pushRegex next (e₁.alternate e₂) = result) (wf : nfa.WellFormed) (next_lt : next < nfa.nodes.size) (ih : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next e₁ = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups update result.Path nfa.nodes.size result.start pos next pos' update) :
∃ (update : List ( × s.ValidPos)), EquivUpdate groups update result.Path nfa.nodes.size result.start pos next pos' update
theorem Regex.NFA.path_of_captures.alternateRight {s : String} {nfa : NFA} {next : } {result : NFA} {pos pos' : s.ValidPos} {groups : Data.CaptureGroups s} {e₁ e₂ : Data.Expr} (eq : nfa.pushRegex next (e₁.alternate e₂) = result) (wf : nfa.WellFormed) (next_lt : next < nfa.nodes.size) (ih : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next e₂ = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups update result.Path nfa.nodes.size result.start pos next pos' update) :
∃ (update : List ( × s.ValidPos)), EquivUpdate groups update result.Path nfa.nodes.size result.start pos next pos' update
theorem Regex.NFA.path_of_captures.concat {s : String} {nfa : NFA} {next : } {result : NFA} {pos pos' pos'' : s.ValidPos} {e₁ e₂ : Data.Expr} {groups₁ groups₂ : Data.CaptureGroups s} (eq : nfa.pushRegex next (e₁.concat e₂) = result) (wf : nfa.WellFormed) (next_lt : next < nfa.nodes.size) (ih₁ : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next e₁ = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups₁ update result.Path nfa.nodes.size result.start pos next pos' update) (ih₂ : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next e₂ = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups₂ update result.Path nfa.nodes.size result.start pos' next pos'' update) :
∃ (update : List ( × s.ValidPos)), EquivUpdate (groups₁.concat groups₂) update result.Path nfa.nodes.size result.start pos next pos'' update
theorem Regex.NFA.path_of_captures.starConcat {s : String} {nfa : NFA} {next : } {result : NFA} {pos pos' pos'' : s.ValidPos} {greedy : Bool} {e : Data.Expr} {groups₁ groups₂ : Data.CaptureGroups s} (eq : nfa.pushRegex next (Data.Expr.star greedy e) = result) (wf : nfa.WellFormed) (next_lt : next < nfa.nodes.size) (ih₁ : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next e = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups₁ update result.Path nfa.nodes.size result.start pos next pos' update) (ih₂ : ∀ {nfa : NFA} {next : } {result : NFA}, nfa.pushRegex next (Data.Expr.star greedy e) = resultnfa.WellFormednext < nfa.nodes.size∃ (update : List ( × s.ValidPos)), EquivUpdate groups₂ update result.Path nfa.nodes.size result.start pos' next pos'' update) :
∃ (update : List ( × s.ValidPos)), EquivUpdate (groups₁.concat groups₂) update result.Path nfa.nodes.size result.start pos next pos'' update
theorem Regex.NFA.path_of_captures {s : String} {nfa : NFA} {next : } {e : Data.Expr} {result : NFA} {pos pos' : s.ValidPos} {groups : Data.CaptureGroups s} (eq : nfa.pushRegex next e = result) (wf : nfa.WellFormed) (next_lt : next < nfa.nodes.size) (c : Data.Expr.Captures pos pos' groups e) :
∃ (update : List ( × s.ValidPos)), EquivUpdate groups update result.Path nfa.nodes.size result.start pos next pos' update
theorem Regex.NFA.path_of_captures_compile {s : String} {nfa : NFA} {e : Data.Expr} {pos pos' : s.ValidPos} {groups : Data.CaptureGroups s} (eq : compile e = nfa) (c : Data.Expr.Captures pos pos' groups e) :
∃ (update : List ( × s.ValidPos)), EquivUpdate groups update nfa.Path 1 nfa.start pos 0 pos' update