nd_valcom |
Def NDA(C) q
== I(NDA) = 1of(hd(C)) St
& ( i: (||C||-1).
NDA(1of(C[i]),hd(rev(2of(C[i]))),1of(C[(i+1)]))
& 2of(C[(i+1)]) = rev(tl(rev(2of(C[i])))) Alph*)
& 1of(hd(rev(C))) = q St
& 2of(hd(rev(C))) = nil Alph*
Thm* Alph,St:Type, NDA:NDA(Alph;St), C:NComp(Alph;St), q:St. NDA(C) q Prop
|
NDA_act |
Def n == 1of(n)
Thm* Alph,States:Type, n:NDA(Alph;States). n States Alph States Prop
|
NDA_init |
Def I(n) == 1of(2of(n))
Thm* Alph,States:Type, n:NDA(Alph;States). I(n) States
|
reverse |
Def rev(as) == Case of as; nil nil ; a.as' rev(as') @ [a] (recursive)
Thm* T:Type, as:T*. rev(as) T*
|
append |
Def as @ bs == Case of as; nil bs ; a.as' a.(as' @ bs) (recursive)
Thm* T:Type, as,bs:T*. (as @ bs) T*
|
nd_computation |
Def NComp(Alph;St) == {C:(St Alph* List )| i: (||C||-1). ||2of(C[i])|| > 0 }
Thm* Alph,St:Type. NComp(Alph;St) Type
|
select |
Def l[i] == hd(nth_tl(i;l))
Thm* A:Type, l:A*, n: . 0 n  n < ||l||  l[n] A
|
hd |
Def hd(l) == Case of l; nil "?" ; h.t h
Thm* A:Type, l:A*. ||l|| 1  hd(l) A
|
int_seg |
Def {i..j } == {k: | i k < j }
Thm* m,n: . {m..n } Type
|
list_p |
Def T List == {l:(T*)| ||l|| > 0 }
Thm* T:Type. (T List ) Type
|
length |
Def ||as|| == Case of as; nil 0 ; a.as' ||as'||+1 (recursive)
Thm* A:Type, l:A*. ||l||
Thm* ||nil|| 
|
map |
Def map(f;as) == Case of as; nil nil ; a.as' f(a).map(f;as') (recursive)
Thm* A,B:Type, f:(A B), l:A*. map(f;l) B*
|
nd_automata |
Def NDA(Alph;States) == (States Alph States Prop) States (States  )
Thm* Alph,States:Type{i}. nd_automata{i}(Alph;States) Type{i'}
|
pi1 |
Def 1of(t) == t.1
Thm* A:Type, B:(A Type), p:a:A B(a). 1of(p) A
|
pi2 |
Def 2of(t) == t.2
Thm* A:Type, B:(A Type), p:a:A B(a). 2of(p) B(1of(p))
|
nth_tl |
Def nth_tl(n;as) == if n 0 as else nth_tl(n-1;tl(as)) fi (recursive)
Thm* A:Type, as:A*, i: . nth_tl(i;as) A*
|
tl |
Def tl(l) == Case of l; nil nil ; h.t t
Thm* A:Type, l:A*. tl(l) A*
|
lelt |
Def i j < k == i j & j < k
|
gt |
Def i > j == j < i
Thm* i,j: . i > j Prop
|
le |
Def A B == B < A
Thm* i,j: . i j Prop
|
le_int |
Def i j ==  j < i
Thm* i,j: . i j 
|
not |
Def A == A  False
Thm* A:Prop. ( A) Prop
|
lt_int |
Def i < j == if i < j true ; false fi
Thm* i,j: . i < j 
|
bnot |
Def  b == if b false else true fi
Thm* b: .  b 
|