Correctness and linear cost of regular-domain validation #
The DFA scan and input rewind leave every work tape and the output empty. The execution phase then reproduces the original machine's complete run.
def
Complexity.CslibGuard.scanCfg
{k : ℕ}
{σ Q : Type}
(D : DFA Bool σ)
(w : List Bool)
(t : ℕ)
(ht : t ≤ w.length)
:
Turing.Cfg k Bool (State σ Q) w
The DFA scan after the first t input bits.
Equations
- Complexity.CslibGuard.scanCfg D w t ht = Complexity.CslibGuard.baseCfg w (some (Complexity.CslibGuard.State.scan (D.eval (List.take t w)))) ⟨t + 1, ⋯⟩
Instances For
def
Complexity.CslibGuard.liftCfg
{k : ℕ}
{σ Q : Type}
{w : List Bool}
(c : Turing.Cfg k Bool Q w)
:
Turing.Cfg k Bool (State σ Q) w
Embed source execution without changing any tape or head.
Equations
Instances For
theorem
Complexity.CslibGuard.step_lift
{k : ℕ}
{σ Q : Type}
(M : Turing.MultiTapeTM k Bool Q)
(D : DFA Bool σ)
{w : List Bool}
(c : Turing.Cfg k Bool Q w)
:
theorem
Complexity.CslibGuard.run_lift
{k : ℕ}
{σ Q : Type}
(M : Turing.MultiTapeTM k Bool Q)
(D : DFA Bool σ)
{w : List Bool}
(c : Turing.Cfg k Bool Q w)
(t : ℕ)
:
theorem
Complexity.CslibGuard.scan_zero
{k : ℕ}
{σ Q : Type}
(M : Turing.MultiTapeTM k Bool Q)
(D : DFA Bool σ)
(w : List Bool)
:
theorem
Complexity.CslibGuard.run_succ
{k : ℕ}
{σ Q : Type}
(M : Turing.MultiTapeTM k Bool Q)
(D : DFA Bool σ)
{w : List Bool}
(c : Turing.Cfg k Bool (State σ Q) w)
(t : ℕ)
:
theorem
Complexity.CslibGuard.run_add
{k : ℕ}
{σ Q : Type}
(M : Turing.MultiTapeTM k Bool Q)
(D : DFA Bool σ)
{w : List Bool}
(c : Turing.Cfg k Bool (State σ Q) w)
(t u : ℕ)
:
Turing.MultiTapeTM.runFrom c (t + u) = Turing.MultiTapeTM.runFrom (Turing.MultiTapeTM.runFrom c t) u
theorem
Complexity.CslibGuard.rejected
{k : ℕ}
{σ Q : Type}
(M : Turing.MultiTapeTM k Bool Q)
(D : DFA Bool σ)
{w : List Bool}
(hw : w ∉ D.accepts)
:
(Turing.MultiTapeTM.runFrom (Turing.MultiTapeTM.initCfg w) (w.length + 1)).state = none ∧ (Turing.MultiTapeTM.runFrom (Turing.MultiTapeTM.initCfg w) (w.length + 1)).output = []