|   | Who Cites R  async? | 
 | 
| R_async | Def asyncR(E)
 == swap adjacent[ loc(E)(x) = loc(E)(y)
  &    (is-send(E)(x))  &    (is-send(E)(y))    (is-send(E)(x))  &   (is-send(E)(y))] | 
 | |   | Thm*  E:EventStruct. asyncR(E)   (|E| List)  (|E| List)  Prop | 
 | 
| event_is_snd | 
 Def is-send(E) == 1of(2of(2of(2of(2of(E))))) | 
 | |   | 
 Thm*  E:EventStruct. is-send(E)   |E|    | 
 | 
| lbl | 
 Def Label == {p:Pattern|  ground_ptn(p) } | 
 | |   | Thm* Label   Type | 
 | 
| assert | 
 Def  b == if b  True else False fi | 
 | |   | Thm*  b: . b   Prop | 
 | 
| swap_adjacent | 
 Def swap adjacent[P(x;y)](L1,L2)
==  i: (||L1||-1). P(L1[i];L1[(i+1)])  &  L2 = swap(L1;i;i+1)   A List | 
 | |   | Thm*  A:Type, P:(A  A  Prop). swap adjacent[P(x,y)]   (A List)  (A List)  Prop | 
 | 
| int_seg | 
 Def {i..j } == {k: | i   k  <  j } | 
 | |   | Thm*  m,n: . {m..n }   Type | 
 | 
| lelt | 
 Def i   j  <  k == i j  &  j < k | 
 | 
| le | 
 Def A B ==  B < A | 
 | |   | Thm*  i,j: . (i j)   Prop | 
 | 
| not | 
 Def  A == A    False | 
 | |   | Thm*  A:Prop. ( A)   Prop | 
 | 
| event_loc | 
 Def loc(E) == 1of(2of(2of(2of(E)))) | 
 | |   | 
 Thm*  E:EventStruct. loc(E)   |E|  Label | 
 | 
| carrier | 
 Def |S| == 1of(S) | 
 | |   | Thm*  S:Structure. |S|   Type | 
 | 
| 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 | 
 | 
| ground_ptn | 
 Def ground_ptn(p)
 == Case(p)
 Case ptn_var(v) = > 
 false 
 Case ptn_pr( < x, y > ) = > 
 ground_ptn(x)  ground_ptn(y)
 Default = >  true 
 (recursive) | 
 | |   | 
 Thm*  p:Pattern. ground_ptn(p)     | 
 | 
| ptn | 
 Def Pattern == rec(T.ptn_con(T)) | 
 | |   | 
 Thm* Pattern   Type | 
 | 
| swap | 
 Def swap(L;i;j) == (L o (i, j)) | 
 | |   | Thm*  T:Type, L:T List, i,j: ||L||. swap(L;i;j)   T List | 
 | 
| permute_list | 
 Def (L o f) == mklist(||L||; i.L[(f(i))]) | 
 | |   | Thm*  T:Type, L:T List, f:( ||L||   ||L||). (L o f)   T List | 
 | 
| select | 
 Def l[i] == hd(nth_tl(i;l)) | 
 | |   | 
 Thm*  A:Type, l:A List, n: . 0 n    n < ||l||    l[n]   A | 
 | 
| length | 
 Def ||as|| == Case of as; nil   0 ; a.as'   ||as'||+1  (recursive) | 
 | |   | 
 Thm*  A:Type, l:A List. ||l||     | 
 | |   | 
 Thm* ||nil||     | 
 | 
| case_default | 
 Def Default = >  body(value,value) == body | 
 | 
| band | 
 Def p  q == if p  q else false  fi | 
 | |   | Thm*  p,q: . (p  q)     | 
 | 
| case_lbl_pair | 
 Def Case ptn_pr( < x, y > ) = >  body(x;y) cont(x1,z)
== InjCase(x1; _. cont(z,z); x2.
 InjCase(x2; _. cont(z,z); x2@0. InjCase(x2@0; _. cont(z,z); x2@1. x2@1/x3,x2@2. body(x3;x2@2)))) | 
 | 
| case_ptn_var | 
 Def Case ptn_var(x) = >  body(x) cont(x1,z)
== ( x1.inr(x2) = > 
 ( x1.inr(x2) = > 
 ( x1.inl(x2) = >  body(hd([x2 / tl(x1)])) cont(hd(x1),z))([x2 / tl(x1)])
 cont
 (hd(x1)
 ,z))
 ([x2 / tl(x1)])
 cont
 (hd(x1)
 ,z))
 ([x1]) | 
 | 
| case | 
 Def Case(value) body == body(value,value) | 
 | 
| ptn_con | 
 Def ptn_con(T) == Atom+ +Atom+(T T) | 
 | |   | Thm*  T:Type. ptn_con(T)   Type | 
 | 
| flip | 
 Def (i, j)(x) == if x= i j ;x= j i else x fi | 
 | |   | Thm*  k: , i,j: k. (i, j)    k   k | 
 | 
| 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 List, i: . nth_tl(i;as)   A List | 
 | 
| hd | 
 Def hd(l) == Case of l; nil   "?" ; h.t   h | 
 | |   | 
 Thm*  A:Type, l:A List. ||l|| 1    hd(l)   A | 
 | |   | 
 Thm*  A:Type, l:A List . hd(l)   A | 
 | 
| tl | 
 Def tl(l) == Case of l; nil   nil ; h.t   t | 
 | |   | 
 Thm*  A:Type, l:A List. tl(l)   A List | 
 | 
| case_inl | 
 Def inl(x) = >  body(x) cont(value,contvalue)
== InjCase(value; x. body(x); _. cont(contvalue,contvalue)) | 
 | 
| case_inr | 
 Def inr(x) = >  body(x) cont(value,contvalue)
== InjCase(value; _. cont(contvalue,contvalue); x. body(x)) | 
 | 
| mklist | 
 Def mklist(n;f) == primrec(n;nil; i,l. l @ [(f(i))]) | 
 | |   | Thm*  T:Type, n: , f:( n  T). mklist(n;f)   T List | 
 | 
| primrec | 
 Def primrec(n;b;c) == if n= 0  b else c(n-1,primrec(n-1;b;c)) fi  (recursive) | 
 | |   | 
 Thm*  T:Type, n: , b:T, c:( n  T  T). primrec(n;b;c)   T | 
 | 
| eq_int | 
 Def i= j == if i=j  true  ; false  fi | 
 | |   | Thm*  i,j: . (i= j)     | 
 | 
| le_int | 
 Def i  j ==   j <  i | 
 | |   | Thm*  i,j: . (i  j)     | 
 | 
| 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 | 
 | 
| 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     |