 mtype = { a, b, c, d, e, i, l, m, n, q, r, u, v };
                                     /* file ex.3 */
   chan dce = [0] of { mtype };
   chan dte = [0] of { mtype };
   
   active [999] proctype dte_proc(la li = lu;)
   {
   state01:
   	do
  	:: dce!b -> /* state21 */ dce!a
  	:: dce!i -> /* state14 */
  			if
  			:: dte?m -> goto state19
  			:: dce!a
  			fi
  	:: dte?m -> goto state18
  	:: dte?u -> goto state08
  	:: dce!d -> break
  	od;
  
  	/* state02: */
  	if
  	:: dte?v
  	:: dte?u -> goto state15
  	:: dte?m -> goto state19
  	fi;
  state03:
  	dce!e;
  	/* state04: */
  	if
  	:: dte?m -> goto state19
  	:: dce!c
  	fi;
  	/* state05: */
  	if
  	:: dte?m -> goto state19
  	:: dte?r
  	fi;
  	/* state6A: */
  	if
  	:: dte?m -> goto state19
  	:: dte?q
  	fi;
  state07:
  	if
 	:: dte?m -> goto state19
  	:: dte?r
  	fi;
  	/* state6B: */
  	if		/* non-deterministic select */
  	:: dte?q -> goto state07
  	:: dte?q
  	:: dte?m -> goto state19
  	fi;
 	/* state10: */
  	if
  	:: dte?m -> goto state19
  	:: dte?r
  	fi;
  state6C:
  	if
  	:: dte?m -> goto state19
  	:: dte?l
  	fi;
  	/* state11: */
  	if
  	:: dte?m -> goto state19
 	:: dte?n
  	fi;
  	/* state12: */
  	if
  	:: dte?m -> goto state19
  	:: dce!b -> goto state16
  	fi;
  state15:
  	if
  	:: dte?v -> goto state03
  	:: dte?m -> goto state19
  	fi;
 state08:
  	if
  	:: dce!c
  	:: dce!d -> goto state15
  	:: dte?m -> goto state19
  	fi;
  	/* state09: */
  	if
  	:: dte?m -> goto state19
  	:: dte?q
  	fi;
  	/* state10B: */
  	if
  	:: dte?r -> goto state6C
  	:: dte?m -> goto state19
  	fi;
  state18:
  	if
  	:: dte?l -> goto state01
  	:: dte?m -> goto state19
 	fi;
 state16:
 	dte?m;
 	/* state17: */
 	dte?l;
 	/* state21: */
 	dce!a; goto state01;
 state19:
 	dce!b;
 	/* state20: */
 	dte?l;
 	/* state21: */
 	dce!a; goto state01
 }
 active proctype dce_proc()
 {
 state01:
 	do
 	:: dce?b -> /* state21 */ dce?a
 	:: dce?i -> /* state14 */
 			if
 			:: dce?b -> goto state16
 			:: dce?a
 			fi
 	:: dte!m -> goto state18
 	:: dte!u -> goto state08
 	:: dce?d -> break
	od;

/* state02: */
 	if
 	:: dte!v
 	:: dte!u -> goto state15
 	:: dce?b -> goto state16
 	fi;
 state03:
 	dce?e;
 	/* state04: */
 	if
	:: dce?b -> goto state16
	:: dce?c
	fi;
	/* state05: */
	if
	:: dce?b -> goto state16
	:: dte!r
	fi;
	/* state6A: */
 	if
 	:: dce?b -> goto state16
 	:: dte!q
 	fi;
 state07:
 	if
	:: dce?b -> goto state16
 	:: dte!r
 	fi;
	/* state6B: */
 	if		/* non-deterministic select */
 	:: dte!q -> goto state07
 	:: dte!q
 	:: dce?b -> goto state16
 	fi;
 	/* state10: */
 	if
 	:: dce?b -> goto state16
 	:: dte!r
 	fi;
 state6C:
 	if
 	:: dce?b -> goto state16
 	:: dte!l
 	fi;
 	/* state11: */
 	if
 	:: dce?b -> goto state16
 	:: dte!n
 	fi;
 	/* state12: */
 	if
 	:: dce?b -> goto state16
 	:: dte!m -> goto state19
 	fi;
 state15:
 	if
	:: dte!v -> goto state03
	:: dce?b -> goto state16
 	fi;
 state08:
 	if
 	:: dce?c
 	:: dce?d -> goto state15
 	:: dce?b -> goto state16
 	fi;
	/* state09: */
 	if
 	:: dce?b -> goto state16
 	:: dte!q
 	fi;
 	/* state10B: */
 	if
 	:: dte!r -> goto state6C
 	:: dce?b -> goto state16
 	fi;
 state18:
 	if
 	:: dte!l -> goto state01
 	:: dce?b -> goto state16
 	fi;
 state16:
 	dte!m;
 	/* state17: */
 	dte!l;
 	/* state21: */
 	dce?a; goto state01;
 state19:
 	dce?b;
 	/* state20: */
 	dte!l;
 	/* state21: */
 	dce?a; goto state01
 }