def
Regex.NFA.εStep'
(nfa : NFA)
(it : String.Iterator)
(i j : Fin nfa.nodes.size)
(update : Option (ℕ × String.Pos))
:
Instances For
theorem
Regex.NFA.εStep'.anchor
{nfa : NFA}
{it : String.Iterator}
{i j : Fin nfa.nodes.size}
{update : Option (ℕ × String.Pos)}
{anchor : Data.Anchor}
{next : ℕ}
(hn : nfa[i] = Node.anchor anchor next)
:
theorem
Regex.NFA.εStep'.sparse
{nfa : NFA}
{it : String.Iterator}
{i j : Fin nfa.nodes.size}
{update : Option (ℕ × String.Pos)}
{cs : Data.Classes}
{next : ℕ}
(hn : nfa[i] = Node.sparse cs next)
:
theorem
Regex.NFA.εStep'.valid
{nfa : NFA}
{it : String.Iterator}
{i j : Fin nfa.nodes.size}
{update : Option (ℕ × String.Pos)}
(step : nfa.εStep' it i j update)
:
it.Valid
- base {nfa : NFA} {it : String.Iterator} {i : Fin nfa.nodes.size} (v : it.Valid) : nfa.εClosure' it i i []
- step {nfa : NFA} {it : String.Iterator} {i j k : Fin nfa.nodes.size} {update₁ : Option (ℕ × String.Pos)} {update₂ : List (ℕ × String.Pos)} (step : nfa.εStep' it i j update₁) (rest : nfa.εClosure' it j k update₂) : nfa.εClosure' it i k (update₁ ::ₒ update₂)
Instances For
theorem
Regex.NFA.εClosure'.single
{nfa : NFA}
{it : String.Iterator}
{i j : Fin nfa.nodes.size}
{update : Option (ℕ × String.Pos)}
(step : nfa.εStep' it i j update)
:
nfa.εClosure' it i j (List.ofOption update)
theorem
Regex.NFA.εClosure'.trans
{nfa : NFA}
{it : String.Iterator}
{i j k : Fin nfa.nodes.size}
{update₁ update₂ : List (ℕ × String.Pos)}
(cls₁ : nfa.εClosure' it i j update₁)
(cls₂ : nfa.εClosure' it j k update₂)
:
theorem
Regex.NFA.εClosure'.snoc
{nfa : NFA}
{it : String.Iterator}
{i j k : Fin nfa.nodes.size}
{update₁ : List (ℕ × String.Pos)}
{update₂ : Option (ℕ × String.Pos)}
(cls : nfa.εClosure' it i j update₁)
(step : nfa.εStep' it j k update₂)
:
nfa.εClosure' it i k (update₁ ++ List.ofOption update₂)
theorem
Regex.NFA.εClosure'_of_path
{nfa : NFA}
{i j : ℕ}
{it it' : String.Iterator}
{updates : List (ℕ × String.Pos)}
(wf : nfa.WellFormed)
(hit : it = it')
(path : nfa.Path 0 i it j it' updates)
:
theorem
Regex.NFA.εClosure'.valid
{nfa : NFA}
{it : String.Iterator}
{i j : Fin nfa.nodes.size}
{updates : List (ℕ × String.Pos)}
(cls : nfa.εClosure' it i j updates)
:
it.Valid