Making a nondeterministic automaton total. #
NA.totalize makes the original NA total by replacing its LTS with LTS.totalize
and its starting states with their lifted non-sink versions.
Instances For
theorem Cslib.Automata.NA.totalize_run_mtr {Symbol : Type u_1} {State : Type u_2} {na : NA State Symbol} {xs : ωSequence Symbol} {ss : ωSequence (Option State)} {n : ℕ} (h : na.totalize.Run xs ss) (hl : (ss n).isSome = true) :
In an infinite execution of NA.totalize, as long as the NA stays in a non-sink state,
the execution so far corresponds to a finite execution of the original NA.
theorem Cslib.Automata.NA.totalize_mtr_run {Symbol : Type u_1} {State : Type u_2} {na : NA State Symbol} [Inhabited Symbol] {xl : List Symbol} {s t : State} (hs : s ∈ na.start) (hm : na.MTr s xl t) :
Any finite execution of the original NA can be extended to an infinite execution of
NA.totalize, provided that the alphabet is inbabited.
theorem Cslib.Automata.NA.FinAcc.totalize_language_eq {Symbol : Type u_1} {State : Type u_2} {na : FinAcc State Symbol} :
NA.totalize and the original NA accept the same language of finite words,
as long as the accepting states are also lifted in the obvious way.