| Some definitions of interest. |
|
paren | Def paren(T;s) == s = nil (T+T) List ( t:T, s':(T+T) List. s = ([inl(t)] @ s' @ [inr(t)]) & paren(T;s')) ( s',s'':(T+T) List. ||s'|| < ||s|| & ||s''|| < ||s|| & s = (s' @ s'') & paren(T;s') & paren(T;s'')) (recursive) |
| | Thm* T:Type, s:(T+T) List. paren(T;s) Prop |
|
append | Def as @ bs == Case of as; nil bs ; a.as' [a / (as' @ bs)] (recursive) |
| | Thm* T:Type, as,bs:T List. (as @ bs) T List |
|
iff | Def P  Q == (P  Q) & (P  Q) |
| | Thm* A,B:Prop. (A  B) Prop |
|
l_disjoint | Def l_disjoint(T;l1;l2) == x:T. ((x l1) & (x l2)) |
| | Thm* T:Type, l,l':T List. l_disjoint(T;l;l') Prop |
|
no_repeats | Def no_repeats(T;l) == i,j: . i < ||l||  j < ||l||  i = j  l[i] = l[j] T |
| | Thm* T:Type, l:T List. no_repeats(T;l) Prop |