proc
#x:makreel:model-name reorder
 = sum i : #x:makreel:model-name events. #x:makreel:model-name in(i) . (sum r : #x:makreel:model-name replies. #x:makreel:model-name reply(r) . #x:makreel:model-name reorder_replied(r)
                                                                       +#x:makreel:model-name reorder_end . missing_reply . delta)
 + sum m : #x:makreel:model-name modeling. #x:makreel:model-name internal (m) . #x:makreel:model-name end .  #x:makreel:model-name reorder
 + sum m : #x:makreel:model-name silent. #x:makreel:model-name silent (m) . #x:makreel:model-name silent_end . #x:makreel:model-name reorder
 + #x:state-sum #x:makreel:model-name state #x:members-name  . #x:makreel:model-name reorder
 ;

#x:makreel:model-name reorder_replied(r : #x:makreel:model-name replies)
 = #x:makreel:model-name reorder_end . #x:makreel:model-name reply'reordered (r) . #x:makreel:model-name reorder
 + sum r : #x:makreel:model-name replies. #x:makreel:model-name reply(r) . second_reply .delta
 ;

#x:makreel:model-name reordered_parallel = (#x:type-check #x:makreel:model-name behavior #x:member-init) || #x:makreel:model-name reorder;

#x:makreel:model-name reordered_comm = comm({
   #x:makreel:model-name in | #x:makreel:model-name in -> #x:makreel:model-name in'
 , #x:makreel:model-name reply | #x:makreel:model-name reply -> #x:makreel:model-name reply'
 , #x:makreel:model-name internal | #x:makreel:model-name internal -> #x:makreel:model-name internal'
 , #x:makreel:model-name end | #x:makreel:model-name end -> #x:makreel:model-name end'
 , #x:makreel:model-name silent | #x:makreel:model-name silent -> #x:makreel:model-name silent'
 , #x:makreel:model-name silent_end | #x:makreel:model-name silent_end -> #x:makreel:model-name silent_end'
 , #x:makreel:model-name reorder_end | #x:makreel:model-name reorder_end -> #x:makreel:model-name reorder_end'
 , #x:makreel:model-name state | #x:makreel:model-name state -> #x:makreel:model-name state'
 }, #x:makreel:model-name reordered_parallel);

#x:makreel:model-name reordered_allow = allow({
   tau_void
 , #x:makreel:model-name tau_reply
 , #x:makreel:model-name reorder_end'
 , #x:makreel:model-name flush
 , #x:makreel:model-name in'
 , #x:makreel:model-name internal'
 , #x:makreel:model-name end'
 , #x:makreel:model-name silent'
 , #x:makreel:model-name silent_end'
 , #x:makreel:model-name out
 , #x:makreel:model-name reply'
 , #x:makreel:model-name reply'reordered
 , #x:makreel:model-name state'
 , declarative_illegal
 , missing_reply
 , range_error
 , recurse
 , return
 , second_reply
}, #x:makreel:model-name reordered_comm);

#x:makreel:model-name reordered = rename({
   #x:makreel:model-name in' -> #x:makreel:model-name in
 , #x:makreel:model-name reply' -> #x:makreel:model-name tau_reply
 , #x:makreel:model-name reply'reordered -> #x:makreel:model-name reply
 , #x:makreel:model-name internal' -> #x:makreel:model-name internal
 , #x:makreel:model-name end' -> #x:makreel:model-name end
 , #x:makreel:model-name silent' -> #x:makreel:model-name silent
 , #x:makreel:model-name silent_end' -> #x:makreel:model-name silent_end
 , #x:makreel:model-name state' -> #x:makreel:model-name state
 , #x:makreel:model-name reorder_end' -> tau_void
 }, #x:makreel:model-name reordered_allow);

#x:makreel:model-name semantics
 = sum i : #x:makreel:model-name events. #x:makreel:model-name in(i) . (#x:makreel:model-name semantics_sync + #x:makreel:model-name semantics)
 + sum m : #x:makreel:model-name modeling. #x:makreel:model-name internal(m) . (#x:makreel:model-name end . #x:makreel:model-name end'reordered . #x:makreel:model-name semantics + #x:makreel:model-name semantics_flush)
 ;

#x:makreel:model-name semantics_sync
 = sum r : #x:makreel:model-name replies. #x:makreel:model-name reply(r) . #x:makreel:model-name semantics
 + sum i : #x:makreel:model-name events. #x:makreel:model-name out(i) . #x:makreel:model-name semantics_sync
 ;

#x:makreel:model-name semantics_flush
 = sum i : #x:makreel:model-name events. #x:makreel:model-name out(i) . (#x:makreel:model-name end . #x:makreel:model-name flush . #x:makreel:model-name end'reordered . #x:makreel:model-name semantics + #x:makreel:model-name semantics_flush)
 ;

#x:makreel:model-name parallel = #x:makreel:model-name semantics || #x:makreel:model-name reordered;

#x:makreel:model-name comm = comm({
    #x:makreel:model-name in | #x:makreel:model-name in -> #x:makreel:model-name in'
  , #x:makreel:model-name out | #x:makreel:model-name out -> #x:makreel:model-name out'
  , #x:makreel:model-name reply | #x:makreel:model-name reply -> #x:makreel:model-name reply'
  , #x:makreel:model-name internal | #x:makreel:model-name internal -> #x:makreel:model-name internal'
  , #x:makreel:model-name end | #x:makreel:model-name end -> #x:makreel:model-name end'
  }, #x:makreel:model-name parallel);

#x:makreel:model-name allow = allow({
   tau_void
  , #x:makreel:model-name tau_reply
  , #x:makreel:model-name in'
  , #x:makreel:model-name reply'
  , #x:makreel:model-name internal'
  , #x:makreel:model-name end'
  , #x:makreel:model-name end'reordered
  , #x:makreel:model-name silent
  , #x:makreel:model-name silent_end
  , #x:makreel:model-name out'
  , #x:makreel:model-name flush
  , #x:makreel:model-name state
  , declarative_illegal
  , missing_reply
  , range_error
  , recurse
  , return
  , second_reply
  }, #x:makreel:model-name comm);

#x:makreel:model-name interface_internal = rename({
    recurse -> tau_void
  , return -> tau_void
  , #x:makreel:model-name in' -> #x:makreel:model-name in
  , #x:makreel:model-name out' -> #x:makreel:model-name out
  , #x:makreel:model-name reply' -> #x:makreel:model-name reply
  , #x:makreel:model-name internal' -> #x:makreel:model-name internal
  , #x:makreel:model-name end'reordered -> #x:makreel:model-name end
  , #x:makreel:model-name state' -> #x:makreel:model-name state
  , #x:makreel:model-name end' -> tau_void
  , #x:makreel:model-name silent_end -> tau_void
  }, #x:makreel:model-name allow);

#x:makreel:model-name interface = hide({
   tau_void
 , #x:makreel:model-name end
 , #x:makreel:model-name tau_reply}, #x:makreel:model-name interface_internal);

#x:makreel:model-name behavior #x:process-parameters
 = #x:makreel:model-name state #x:members-name  . #x:makreel:model-name behavior ()
 + #x:behavior-proc

%%%%%%%%%%%%%%%%%%%%%%%%% FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%
#x:function

#x:function-return-proc

#x:return-type-sort

#x:call-continuation-sort
