,......................, ,......................, :Tru *================*: :Fal *================*: ---->!send [(Inl(),E)]!- ---->!send [(Inr(),E)]!- : *================*: : *================*: ,......................, ,......................, ,................................................................., :addtbl : : *============================================================* : : !send[((Inr Inr Inl(),(Inr Inr Inl(),(Inr Inr Inl(),()))),S)]! : : *============================================================* : : |*========================================================* : : |!send[((Inr Inl(),(Inr Inr Inl(),(Inr Inr Inl(),()))),S)]! : : |*========================================================* : :+--#-+ : :| v : :| *=============================================================*: :+>!send[(((Inl(),(Inr Inl(),(Inr Inr Inl(),()))),(W,(N,()))),E)]!- : *=============================================================*: ,................................................................., ,....................................................., :multbl : : *================================================* : : !send[((Inl(),(Inr Inl(),(Inr Inr Inl(),()))),S)]! : : *================================================* : : |*============================================* : : |!send[((Inl(),(Inr Inl(),(Inr Inl(),()))),S)]! : : |*============================================* : :+--#-+ : :| v : :| *=================================================*: :+>!send[(((Inl(),(Inl(),(Inl(),()))),(W,(N,()))),E)]!- : *=================================================*: ,....................................................., ,....................................................., :eqtabl : : *====================================* : : !send[((Inr(),(Inr(),(Inl(),()))),S)]! : : *====================================* : : |*====================================* : : |!send[((Inr(),(Inl(),(Inr(),()))),S)]! : : |*====================================* : :+--#-+ : :| v : :| *=================================================*: :+>!send[(((Inl(),(Inr(),(Inr(),()))),(W,(N,()))),E)]!- : *=================================================*: ,....................................................., ,.......................|..........., :lookup v : : *=============* *=======* : -->!case W of S,E!-+ !split N!-+ : : *=============* | *=======* | : : | +-#--+ | : : | v +-+ v : : | *===========* | *==========* : : +>!send[(N,E)]!+ +>!use lookup!-- : *===========*| *==========* : : +----------------- ,..................................., ,...............|, ,...............|, ,...............|, :add |: :mul |: :eq |: :*==========* |: :*==========* |: :*==========* |: :!use addtbl!+ |: :!use multbl!+ |: :!use eqtabl!+ |: :*==========*v |: :*==========*v |: :*==========*v |: : *==========* |: : *==========* |: : *==========* |: -->!use lookup!+|: -->!use lookup!+|: -->!use lookup!+|: : *==========*||: : *==========*||: : *==========*||: : +-----------#+: : +-----------#+: : +-----------#+: : | v : : | v : : | v : : | *==========*: : | *==========*: : | *==========*: : +>!use lookup!- : +>!use lookup!- : +>!use lookup!- : *==========*: : *==========*: : *==========*: ,................, ,................, ,................, ,........................|....................., :r v : : *=============* *=============* *=======* : ->!case W of S,E!+ !case N of S,E!->!use Tru!--- : *=============*| *=============* *=======* : : | | | : : v v v : : *=======* *=======* *=======* : : !split N!+ !send []! !split N!-----+ : : *=======*| *=======* *=======* | : :+-----#----+ | | : :| v v | : :| *=======* *=======* | : :| !split N!---------+ !split N!+ | : :| *=======* | *=======*| | : :| | +--------#-----+ | | : :| | v | v | : :| | *======* | *======* | : :| +>!use eq!+ +------>!use eq!+ | : :| *======*| *======*| | : :| v +-------------------+ | : :|*=============*| *=======* | : :|!case N of S,E!#-->!use Fal!----------#------- :|*=============*| *=======* +---+ : :| | v | : :| | *============* *=============*| *=======*: :| +>!send [(N,E)]!->!case W of S,E!#>!use Fal!- :| *============* *=============*| *=======*: :| | | : :| v v : :| *============* *=====* : :+-------->!send [(W,E)]!-------->!use r!------- : *============* *=====* : ,.............................................., ,................|..................., :replicate | : : *=============*| *================*: ->!case W of S,E!#>!send [(Inr(),E)]!- : *=============*| *================*: : | v : : v *=================* : : *=======* !send[(N,S),(N,E)]!-+ : : !split N!+ *=================* | : : *=======*|+-------#------------+ : : | || v : : v || *=============* : :*=======* +#->!use replicate!-+ : :!send []! | *=============* v : :*=======* | *===================*: : +-->!send [(Inl(W,N),E)]!- : *===================*: ,...................................., ,......|........................................, :init | +-------------------------+ : : | v | : : | *=============* | : : +->!use replicate!--------------------#+ : : *=============* || : :*==========================================*|| : :!send [((Inl(),Inl()),S),((Inl(),Inl()),E)]!+| : :*==========================================* v : : | *===================*: : +----------->!send [(Inl(W,N),E)]!- : *===================*: ,..............................................., ,........|..................................., :main | +----+ +----+ : : v | v | | : :*=================*| *========*| v : :!send[(N,S),(N,E)]!+ !use init!+ *========*: :*=================* *========* +>!use iter!- : +------------------------+ *========*: ,............................................, ,.......|.........................................................., :iter | : : v : :*=================* *=================* *=============* : :!send[(N,S),(N,E)]!->!send[(W,S),(W,E)]!+ +>!case W of S,E!+: :*=================* *=================*| +-+ | *=============*|: : | | +#-+ v ++ | |: : +------------+ | ++| *=====*| | |: : | v | +>!use r!+ v ++: : *=================* | *==========* | *=====* *===========*| : ->!send[(W,S),(W,E)]!-#-+ !use finish!-#----------->!send[(W,E)]!#-- : *=================* | | *==========* | *===========*| : : | | | | +-------------------+ : : | +-----------+ +-------------+| | +-----+: : | v +-#+ v v |: : | *========* *=================*| | *===========* *========*|: : +>!use step!->!send[(W,S),(W,E)]!+ +->!send[(W,E)]!->!use iter!#- : *========* *=================* *===========* *========*|: : +---------------------------------------+: ,.................................................................., ,........|............,,............................|.............., :finish v ::step v : :*=============* :: *==================* *=================* : :!case N of S,E!+ :->!send [(W,S),(W,E)]!+ !send[(N,S),(N,E)]!+: :*=============*| :: *==================*| *=================*|: : | | :: | | | |: : v v :: v | v +--+: :*=======* *======* ::*=============* | *===========* | : :!split N!->!send[]! ::!case N of S,E!------#>!send[(N,E)]!---#---- :*=======* *======* ::*=============* | *===========* | : :++*=======* *======*:: | v v : :+>!split W!->!send[]!:: | *============* *=========*: : *=======* *======*:: +----->!send [(N,E)]!------->!use step2!- : +---------------: *============* *=========*: ,.....................,,..........................................., ,...............................|................................., :step2 v : : *=================* *=================* : -->!send[(W,S),(W,E)]!--+ !send[(N,S),(N,E)]!------------------+: : *=================* | *=================* |: : | +-------#-------------------------------+|: : v v ||: :*=============* *======**=============* *======* ||: :!case N of S,E!->!send[]!!case N of S,E!->!send[]! ||: :*=============* *======**=============* *======* ||: : | +----------------+ ||: : v | *=======* *=============* *======*||: : *=======* +----->!split W!----->!case W of S,E!->!send[]!||: : !split N!--+ *=======* *=============* *======*||: : *=======* | +------+ | ||: : | +------+ | | ||: : v +-------------+ v v ||: :*=======* *=======* *=======* |*=======* *=======* ||: :!split N!->!split W!->!split W!+ |!split N!+ !split N!-------+||: :*=======* *=======* *=======*| |*=======*| *=======* |||: : | | | | | | | | |||: : v v v v | | | v |||: : *======**======* *======**======*| | | *=======* |||: : !send[]!!send[]! !send[]!!send[]!| | | !split N!+ |||: : *======**======* *======**======*| | | *=======*| |||: : +--------------------------------+ | | | | |||: : |+-----------------------------------+ | | | |||: : ||+----------------------------------------+ | | |||: : |||+------------------------------------------------+ | |||: : ||||+------------------------------------------------------+ |||: : ||||| +--------------------------------------------------+||: : ||||| | +------------------------------------+|: : ||||| | | +------------+: : ||||| | v v : : ||||| | *=================* *=================* : : ||||| | !send[(N,S),(N,E)]!+ !send[(N,S),(N,E)]!+ : : ||||| | *=================*| *=================*| : : ||||| | | | | | : : ||||| | | +------------#--------------+ | : : ||||| | | v | v : : ||||| | | *=========* | *=========* : : ||||| | +>!use stepl!--+ +----------------->!use stepr!+ : : ||||| | *=========* | *=========*| : : ||||| | | | : : ||||| | +-------#--------------------------------+ : : ||||| +----------#-------#-------------------+ +--------+ : : ||||| v | v | | : : ||||| *===============*| *==================*| | : : |||+#------>!send[((W,N),E)]!#->!send[(Inl(W,N),E)]!+ v : : ||| | *===============*| *==================* *========* : : +##-#------------------------#---------------------->!use step!+: : || | +---------------+ *========*|: : |+-#--------#----------+ +---------------+: : | v | v v : : | *======* | *===============* *==================* : : +>!send[]! +->!send[((W,N),E)]!---->!send[(Inl(W,N),E)]!------- : *======* *===============* *==================* : ,................................................................., ,.............................|...................................., :stepl v : : *=================* *=================* : -->!send[(W,S),(W,E)]!--+ !send[(N,S),(N,E)]!---------------------+: : *=================* | *=================* |: : | +-----#----------------------------------+|: : v v ||: :*=============* *======**=============* *======* ||: :!case N of S,E!->!send[]!!case N of S,E!->!send[]! ||: :*=============* *======**=============* *======* ||: : | | ||: : v | *=======* *=============* *======*||: : *=======* +>!split W!->!case W of S,E!->!send[]!||: : !split N!---+ *=======* *=============* *======*||: : *=======* | | | ||: : | +-----------+ | v +------+|: : v | v *=======* | +--+: :*=======* *=======* |*=======* !split N!---+ | | : :!split N!+ +>!split W!---+|!split N!+ *=======* v | | : :*=======*| | *=======* ||*=======*| | *======*| | : : | | | | || | | v +>!send[]!| | : : | +--+ +-----+ | || v | *=======*| *======*| | : : | | | | || *======*| !split N!+ | | : : | | *=======*| | |+>!send[]!| *=======* +---+ v : : | +>!split W!+ +--+ | *======*| | | *======*: : | *=======* | | +-----+ +--+ +--->!send[]!: : | +-------+ | | +-------+| v *======*: : | | +---+ | | v |+-+*=================* : : | | v | | | *=======* | |!send[(N,S),(N,E)]!+ : : | | *=======* | +-#>!use mul!-+ | |*=================*| : : | +->!use mul!+ | | *=======* | +--#--+ v : : v *=======*| +----#-----------#------+ *============*: : *=============* | | v +>!send [(N,S)]!: : !case N of S,E!+ | | *=======* +---+ | *============*: : *=============*| +------#--->!use add!-+ v | +-- : | | | *=======* *=======*| : : | | +-------------->!use add!#---+ : : | | *=======*| v : : | +---------------------------------+ *============*: : +---------------------------------------------->!send [(N,E)]!- : *============*: ,.................................................................., ,.............................|...................................., :stepr v : : *=================* *=================* : -->!send[(W,S),(W,E)]!--+ !send[(N,S),(N,E)]!---------------------+: : *=================* | *=================* |: : | +-----#----------------------------------+|: : v v ||: :*=============* *======**=============* *======* ||: :!case N of S,E!->!send[]!!case N of S,E!->!send[]! ||: :*=============* *======**=============* *======* ||: : | | ||: : v | *=======* *=============* *======*||: : *=======* +>!split W!->!case W of S,E!->!send[]!||: : !split N!---+ *=======* *=============* *======*||: : *=======* | | | ||: : | +-----------+ | v +------+|: : v | v *=======* | +--+: :*=======* *=======* |*=======* !split N!---+ | | : :!split N!+ +>!split W!---+|!split N!+ *=======* v | | : :*=======*| | *=======* ||*=======*| | *======*| | : : | | | | || | | v +>!send[]!| | : : | +--+ +-----+ | || v | *=======*| *======*| | : : | | | | || *======*| !split N!+ | | : : | | *=======*| | |+>!send[]!| *=======* +---+ v : : | +>!split W!+ +--+ | *======*| | | *======*: : | *=======* | | +-------#--+ +--->!send[]!: : | +-------+ | | +-------+ | v *======*: : | | +---+ | | v | |*=================* : : | | v | | | *=======* | |!send[(N,S),(N,E)]!+ : : | | *=======* | +-#>!use mul!-+ | |*=================*| : : | +->!use mul!+ | | *=======* | +--#--+ v : : v *=======*| +----#-----------#------+ *============*: : *=============* | | v +>!send [(N,S)]!: : !case N of E,S!+ | | *=======* +---+ | *============*: : *=============*| +------#--->!use add!-+ v | +-- : | | | *=======* *=======*| : : | | +-------------->!use add!#---+ : : | | *=======*| v : : | +---------------------------------+ *============*: : +---------------------------------------------->!send [(N,E)]!- : *============*: ,..................................................................,