- valid : ∀ {i : Nat} (h : i < Array.size s.toArray), s.toArray[i].snd ≤ i
Validity condition to help with termination proofs
Prefix table for the Knuth-Morris-Pratt matching algorithm
This is an array of the form t = [(x₀,n₀), (x₁,n₁), (x₂, n₂), ...]
where for each i
, nᵢ
is
the length of the longest proper prefix of xs = [x₀,x₁,...,xᵢ]
which is also a suffix of xs
.
Instances For
Returns the size of the prefix table
Instances For
Transition function for the KMP matcher
Assuming we have an input xs
with a suffix that matches the pattern prefix t.pattern[:len]
where len : Fin (t.size+1)
. Then xs.push x
has a suffix that matches the pattern prefix
t.pattern[:t.step x len]
. If len
is as large as possible then t.step x len
will also be
as large as possible.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Extend a prefix table by one element
If t
is the prefix table for xs
then t.extend x
is the prefix table for xs.push x
.
Instances For
Make prefix table from a pattern array
Instances For
Make prefix table from a pattern stream
Instances For
Inner loop for mkPrefixTableOfStream
- table : Array.PrefixTable α
Prefix table for the pattern
- state : Fin (Array.PrefixTable.size s.table + 1)
Current longest matching prefix
KMP matcher structure
Instances For
Make a KMP matcher for a given pattern array
Instances For
Make a KMP matcher for a given a pattern stream
Instances For
Find next match from a given stream
Runs the stream until it reads a sequence that matches the sought pattern, then returns the stream state at that point and an updated matcher state.