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
.
Validity condition to help with termination proofs
Instances For
Returns the size of the prefix table
Equations
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
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
.
Equations
Instances For
Make prefix table from a pattern array
Equations
Instances For
Make prefix table from a pattern stream
Equations
Instances For
Inner loop for mkPrefixTableOfStream
KMP matcher structure
- table : PrefixTable α
Prefix table for the pattern
Current longest matching prefix