nd_auto_lang |
Def L(NDA)(l) == NDA(l)
Thm* Alph,St:Type, NDA:NDA(Alph;St). L(NDA) LangOver(Alph)
|
nd_accept_list |
Def NDA(l) == q:St. NDA(l) q & (F(NDA)(q))
Thm* Alph,St:Type, NDA:NDA(Alph;St), l:Alph*. NDA(l) Prop
|
NDA_fin |
Def F(n) == 2of(2of(n))
Thm* Alph,States:Type, n:NDA(Alph;States). F(n) States  
|
assert |
Def b == if b True else False fi
Thm* b: . b Prop
|
nd_compute_list |
Def NDA(l) q
== if null(l) q = I(NDA) St
else t:St. NDA(tl(l)) t & NDA(t,hd(l),q) fi
(recursive)
Thm* Alph,St:Type, NDA:NDA(Alph;St), l:Alph*, q:St. NDA(l) q Prop
|
NDA_init |
Def I(n) == 1of(2of(n))
Thm* Alph,States:Type, n:NDA(Alph;States). I(n) States
|
pi2 |
Def 2of(t) == t.2
Thm* A:Type, B:(A Type), p:a:A B(a). 2of(p) B(1of(p))
|
hd |
Def hd(l) == Case of l; nil "?" ; h.t h
Thm* A:Type, l:A*. ||l|| 1  hd(l) A
|
NDA_act |
Def n == 1of(n)
Thm* Alph,States:Type, n:NDA(Alph;States). n States Alph States Prop
|
tl |
Def tl(l) == Case of l; nil nil ; h.t t
Thm* A:Type, l:A*. tl(l) A*
|
null |
Def null(as) == Case of as; nil true ; a.as' false
Thm* T:Type, as:T*. null(as)
Thm* null(nil) 
|
pi1 |
Def 1of(t) == t.1
Thm* A:Type, B:(A Type), p:a:A B(a). 1of(p) A
|