Hyde's Theorem #
theorem
khδ_moves_slowly
{A : Type u_1}
{k : ℕ}
{w : Fin (2 * k + 1) → A}
{p : Fin (2 * k + 1 + 1) → Fin (k + 1)}
{final : Fin (k + 1)}
(h : accepts_path (khδ' w) 0 final p)
:
If a Kayleigh graph accepts a word then it never advances by more than one. NOTE: More is true, it is sufficient that ``khδ'` process the word.
theorem
hyde_loop_when
{A : Type u_1}
{k : ℕ}
(w : Fin (2 * k + 1) → A)
(p : Fin (2 * (k + 1)) → Fin (k + 1))
(h : accepts_path (khδ' w) 0 0 p)
(t : Fin (2 * k + 1))
(ht : p t.castSucc = Fin.last k ∧ p t.succ = Fin.last k)
:
t = ⟨k, ⋯⟩
If the Kayleigh graph ever uses the loop, we know when! Same proof for khδ' as for khδ given earlier lemmas, so we could generalize this.
theorem
hyde_parity
{A : Type u_1}
{k : ℕ}
{w : Fin (2 * k + 1) → A}
{p : Fin (2 * (k + 1)) → Fin (k + 1)}
(h : accepts_path (khδ' w) 0 0 p)
(H : ¬∃ (t : Fin (2 * k + 1)), p t.castSucc = Fin.last k ∧ p t.succ = Fin.last k)
(t : Fin (2 * (k + 1)))
:
If a Kayleigh graph path never uses the loop, then it preserves parity.
theorem
hyde_unique_path_reading_word'
{A : Type u_1}
{k : ℕ}
{w : Fin (2 * k + 1) → A}
{v : Fin (2 * k + 1) → A}
{p : Fin (2 * (k + 1)) → Fin (k + 1)}
(h : accepts_word_path (khδ' w) v 0 0 p)
:
The Kayleigh graph NFA for an odd-length word w
accepts along only the intended path,
no matter what word v
with |v| = |w|
is read.
Hyde's theorem for odd-length words.
theorem
hyde_pos_length
{A : Type u_1}
{n : ℕ}
(hn : n ≠ 0)
(w : Fin n → A)
:
A_N_at_most w (n / 2 + 1)
Hyde's theorem for positive-length words.
Hyde's theorem in relational form.
A_N is well-defined.