| auto_lang | 
 Def LangOf(DA)(l) ==  DA(l) 
Thm*  Alph,St:Type, A:Automata(Alph;St). LangOf(A)   LangOver(Alph) 
 | 
| automata | 
 Def Automata(Alph;States) == (States  Alph  States) States (States   )
Thm*  Alph,States:Type{i}. Automata(Alph;States)   Type{i'} 
 | 
| finite | 
 Def Fin(s) ==  n: , f:( n  s). Bij( n; s; f)
Thm*  T:Type. Fin(T)   Prop 
 | 
| biject | 
 Def Bij(A; B; f) == Inj(A; B; f)  &  Surj(A; B; f)
 Thm*  A,B:Type, f:(A  B). Bij(A; B; f)   Prop 
 | 
| int_seg | 
 Def {i..j } == {k: | i   k  <  j }
Thm*  m,n: . {m..n }   Type 
 | 
| length | 
 Def ||as|| == Case of as; nil   0 ; a.as'   ||as'||+1  (recursive)
 Thm*  A:Type, l:A*. ||l||    
 
 Thm* ||nil||     
 | 
| nat | 
 Def   == {i: | 0 i }
Thm*     Type 
 | 
| rev_implies | 
 Def P    Q == Q    P
Thm*  A,B:Prop. (A    B)   Prop 
 | 
| accept_list | 
 Def DA(l)  == FinalState(DA)(Result(DA)l)
Thm*  Alph,St:Type, A:Automata(Alph;St), l:Alph*. A(l)      
 | 
| assert | 
 Def  b == if b  True else False fi
Thm*  b: . b   Prop 
 | 
| surject | 
 Def Surj(A; B; f) ==  b:B.  a:A. f(a) = b
Thm*  A,B:Type, f:(A  B). Surj(A; B; f)   Prop 
 | 
| inject | 
 Def Inj(A; B; f) ==  a1,a2:A. f(a1) = f(a2)   B    a1 = a2
Thm*  A,B:Type, f:(A  B). Inj(A; B; f)   Prop 
 | 
| lelt | 
 Def i   j  <  k == i j  &  j < k
 | 
| le | 
 Def A B ==  B < A
Thm*  i,j: . i j   Prop 
 | 
| compute_list | 
 Def Result(DA)l
 == if null(l)  InitialState(DA) else  DA((Result(DA)tl(l)),hd(l)) fi
 (recursive)
 Thm*  Alph,St:Type, A:Automata(Alph;St), l:Alph*. (Result(A)l)   St 
 | 
| DA_fin | 
 Def FinalState(a) == 2of(2of(a))
 
 Thm*  Alph,States:Type, a:Automata(Alph;States). FinalState(a)   States    
 | 
| not | 
 Def  A == A    False
Thm*  A:Prop. ( A)   Prop 
 | 
| hd | 
 Def hd(l) == Case of l; nil   "?" ; h.t   h
 Thm*  A:Type, l:A*. ||l|| 1    hd(l)   A 
 | 
| tl | 
 Def tl(l) == Case of l; nil   nil ; h.t   t
 Thm*  A:Type, l:A*. tl(l)   A* 
 | 
| DA_act | 
 Def  a == 1of(a)
 Thm*  Alph,States:Type, a:Automata(Alph;States).  a   States  Alph  States 
 | 
| DA_init | 
 Def InitialState(a) == 1of(2of(a))
 
 Thm*  Alph,States:Type, a:Automata(Alph;States). InitialState(a)   States 
 | 
| null | 
 Def null(as) == Case of as; nil   true  ; a.as'   false 
 Thm*  T:Type, as:T*. null(as)    
 
 Thm* null(nil)     
 | 
| pi2 | 
 Def 2of(t) == t.2
 
 Thm*  A:Type, B:(A  Type), p:a:A B(a). 2of(p)   B(1of(p)) 
 | 
| pi1 | 
 Def 1of(t) == t.1
 Thm*  A:Type, B:(A  Type), p:a:A B(a). 1of(p)   A 
 |