Using the available tool, one can transform some provided examples as follows.
main -> factorial({atom_s,{atom_s,{atom_s,atom_z}}}). factorial(X) -> case X of atom_z -> {atom_s,atom_z}; {atom_s,Y} -> mult(X,factorial(Y)) end. mult(X,Y) -> case X of atom_z -> atom_z; {atom_s,Z} -> sum(Y,mult(Z,Y)) end. sum(X,Y) -> case X of atom_z -> Y; {atom_s,Z} -> W=sum(Z,Y), {atom_s,W} end.
data State = State Int Exp [Exp] data Exp = I Int | SPAWN Int Exp [Exp] | SEND Int Exp Exp [Exp] | AREC Int [Exp] [Exp] | SELF Int [Exp] | S | Z | T2 Exp Exp reduce_global current visited = current send_msg _ _ [] = [] send_msg j e (State i b m : s) | i==j = State i b (m++[e]) : s | otherwise = State i b m : (send_msg j e s) member _ [] = False member x (y:ys) = if x==y then True else member x ys init = reduce_global [State 0 (I 2) [], State 1 main []] [] main = (factorial (T2 S (T2 S (T2 S Z)))) fun1 Z (x:[]) = (T2 S Z) fun1 (T2 S y) (x:[]) = (mult x (factorial y)) factorial x = (fun1 x (x:[])) fun2 Z (x:(y:[])) = Z fun2 (T2 S z) (x:(y:[])) = (sum y (mult z y)) mult x y = (fun2 x (x:(y:[]))) fun3 Z (x:(y:[])) = y fun3 (T2 S z) (x:(y:[])) = (fun4 (sum z y) (y:(z:[]))) fun4 w (y:(z:[])) = (T2 S w) sum x y = (fun3 x (x:(y:[])))
main -> Pid = spawn(foo), Pid ! atom_hello. foo -> receive atom_hello -> atom_yes; atom_world -> atom_no end.
data State = State Int Exp [Exp] data Exp = I Int | SPAWN Int Exp [Exp] | SEND Int Exp Exp [Exp] | AREC Int [Exp] [Exp] | SELF Int [Exp] | Hello | Yes | No | World reduce_global current visited | member current visited = current | isFinal current = current | otherwise = reduce current (current:visited) isFinal [] = True isFinal (State _ exp _:xs) | (isDef exp) = False | otherwise = isFinal xs isDef x = case x of SPAWN _ _ _ -> True SEND _ _ _ _ -> True AREC _ _ _ -> True SELF _ _ -> True _ -> False brec 3 fresh = case fresh of Hello -> True World -> True _ -> False reduce (s0 : (State i (I fresh1) m : ss)) visited = reduce_global (s0 : (ss ++ [State i (I fresh1) m])) visited reduce (s0 : (State i Hello m : ss)) visited = reduce_global (s0 : (ss ++ [State i Hello m])) visited reduce (s0 : (State i Yes m : ss)) visited = reduce_global (s0 : (ss ++ [State i Yes m])) visited reduce (s0 : (State i No m : ss)) visited = reduce_global (s0 : (ss ++ [State i No m])) visited reduce (s0 : (State i World m : ss)) visited = reduce_global (s0 : (ss ++ [State i World m])) visited reduce (s0 : (State i (AREC n ms2 args) (m:ms)) : s) visited = if (brec n m) then reduce_global (s0 : (s ++ [State i (rec n m args) (ms2++ms)])) visited else reduce (s0 : (State i (AREC n (ms2++[m]) args) ms) : s) visited reduce (s0 : (State i (AREC n ms2 args) []) : s) visited = reduce_global ((s0 : s) ++ [State i (AREC n ms2 args) []]) visited reduce (State o (I k) l2 : (State i (SPAWN n e args) m : s)) visited = reduce_global ((State o (I (k+1)) l2 : s) ++ [State i (spawn n (I k) args) m, State k e []]) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (send_msg j e (s ++ [State i (send n e args) m]))) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (s ++ [State i (SEND n (I j) e args) m])) visited send_msg _ _ [] = [] send_msg j e (State i b m : s) | i==j = State i b (m++[e]) : s | otherwise = State i b m : (send_msg j e s) member _ [] = False member x (y:ys) = if x==y then True else member x ys init = reduce_global [State 0 (I 2) [], State 1 main []] [] send 2 e fresh = e spawn 1 pid [] = (SEND 2 pid Hello []) main = (SPAWN 1 foo []) rec 3 Hello [] = Yes rec 3 World [] = No foo = (AREC 3 [] [])
main -> Ser = spawn(server), Cli = spawn(client(Ser)), Cli ! atom_start. server -> receive Pid -> atom_ok end, server. client(Ser) -> S = self, receive X -> Ser ! S end, client(Ser).
data State = State Int Exp [Exp] data Exp = I Int | SPAWN Int Exp [Exp] | SEND Int Exp Exp [Exp] | AREC Int [Exp] [Exp] | SELF Int [Exp] | Start reduce_global current visited | member current visited = current | isFinal current = current | otherwise = reduce current (current:visited) isFinal [] = True isFinal (State _ exp _:xs) | (isDef exp) = False | otherwise = isFinal xs isDef x = case x of SPAWN _ _ _ -> True SEND _ _ _ _ -> True AREC _ _ _ -> True SELF _ _ -> True _ -> False brec 4 fresh = case fresh of pid -> True _ -> False brec 6 fresh = case fresh of x -> True _ -> False reduce (s0 : (State i (I fresh1) m : ss)) visited = reduce_global (s0 : (ss ++ [State i (I fresh1) m])) visited reduce (s0 : (State i Start m : ss)) visited = reduce_global (s0 : (ss ++ [State i Start m])) visited reduce (s0 : (State i (AREC n ms2 args) (m:ms)) : s) visited = if (brec n m) then reduce_global (s0 : (s ++ [State i (rec n m args) (ms2++ms)])) visited else reduce (s0 : (State i (AREC n (ms2++[m]) args) ms) : s) visited reduce (s0 : (State i (AREC n ms2 args) []) : s) visited = reduce_global ((s0 : s) ++ [State i (AREC n ms2 args) []]) visited reduce (State o (I k) l2 : (State i (SPAWN n e args) m : s)) visited = reduce_global ((State o (I (k+1)) l2 : s) ++ [State i (spawn n (I k) args) m, State k e []]) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (send_msg j e (s ++ [State i (send n e args) m]))) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (s ++ [State i (SEND n (I j) e args) m])) visited reduce (s0 : (State i (SELF n args) m : s)) visited = reduce_global (s0 : (s ++ [State i (self n (I i) args) m])) visited send_msg _ _ [] = [] send_msg j e (State i b m : s) | i==j = State i b (m++[e]) : s | otherwise = State i b m : (send_msg j e s) member _ [] = False member x (y:ys) = if x==y then True else member x ys init = reduce_global [State 0 (I 2) [], State 1 main []] [] send 3 e fresh = e send 7 e (s:(ser:[])) = (client ser) spawn 2 cli (ser:[]) = (SEND 3 cli Start []) spawn 1 ser [] = (SPAWN 2 (client ser) (ser:[])) main = (SPAWN 1 server []) rec 4 pid [] = server rec 6 x (s:(ser:[])) = (SEND 7 ser s (s:(ser:[]))) server = (AREC 4 [] []) self 5 s (ser:[]) = (AREC 6 [] (s:(ser:[]))) client ser = (SELF 5 (ser:[]))
main -> Pid2 = spawn(proc2), Pid1 = spawn(proc1(Pid2)), Pid1 ! atom_hello, Pid2 ! atom_world. proc1(Pid) -> receive X -> Pid ! X end. proc2 -> receive X -> atom_ok end.
data State = State Int Exp [Exp] data Exp = I Int | SPAWN Int Exp [Exp] | SEND Int Exp Exp [Exp] | AREC Int [Exp] [Exp] | SELF Int [Exp] | World | Hello | Ok reduce_global current visited | member current visited = current | isFinal current = current | otherwise = reduce current (current:visited) isFinal [] = True isFinal (State _ exp _:xs) | (isDef exp) = False | otherwise = isFinal xs isDef x = case x of SPAWN _ _ _ -> True SEND _ _ _ _ -> True AREC _ _ _ -> True SELF _ _ -> True _ -> False brec 5 fresh = case fresh of x -> True _ -> False brec 7 fresh = case fresh of x -> True _ -> False reduce (s0 : (State i (I fresh1) m : ss)) visited = reduce_global (s0 : (ss ++ [State i (I fresh1) m])) visited reduce (s0 : (State i World m : ss)) visited = reduce_global (s0 : (ss ++ [State i World m])) visited reduce (s0 : (State i Hello m : ss)) visited = reduce_global (s0 : (ss ++ [State i Hello m])) visited reduce (s0 : (State i Ok m : ss)) visited = reduce_global (s0 : (ss ++ [State i Ok m])) visited reduce (s0 : (State i (AREC n ms2 args) (m:ms)) : s) visited = if (brec n m) then reduce_global (s0 : (s ++ [State i (rec n m args) (ms2++ms)])) visited else reduce (s0 : (State i (AREC n (ms2++[m]) args) ms) : s) visited reduce (s0 : (State i (AREC n ms2 args) []) : s) visited = reduce_global ((s0 : s) ++ [State i (AREC n ms2 args) []]) visited reduce (State o (I k) l2 : (State i (SPAWN n e args) m : s)) visited = reduce_global ((State o (I (k+1)) l2 : s) ++ [State i (spawn n (I k) args) m, State k e []]) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (send_msg j e (s ++ [State i (send n e args) m]))) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (s ++ [State i (SEND n (I j) e args) m])) visited send_msg _ _ [] = [] send_msg j e (State i b m : s) | i==j = State i b (m++[e]) : s | otherwise = State i b m : (send_msg j e s) member _ [] = False member x (y:ys) = if x==y then True else member x ys init = reduce_global [State 0 (I 2) [], State 1 main []] [] send 4 e fresh = e send 3 e (pid1:(pid2:[])) = (SEND 4 pid2 World []) send 6 e fresh = e spawn 2 pid1 (pid2:[]) = (SEND 3 pid1 Hello (pid1:(pid2:[]))) spawn 1 pid2 [] = (SPAWN 2 (proc1 pid2) (pid2:[])) main = (SPAWN 1 proc2 []) rec 5 x (pid:[]) = (SEND 6 pid x []) rec 7 x [] = Ok proc1 pid = (AREC 5 [] (pid:[])) proc2 = (AREC 7 [] [])
main -> Pid = spawn(proc2), Pid ! atom_a. proc2 -> Pid = spawn(proc3), receive X -> Pid ! X end. proc3 -> receive X -> atom_ok end.
data State = State Int Exp [Exp] data Exp = I Int | SPAWN Int Exp [Exp] | SEND Int Exp Exp [Exp] | AREC Int [Exp] [Exp] | SELF Int [Exp] | A | Ok reduce_global current visited | member current visited = current | isFinal current = current | otherwise = reduce current (current:visited) isFinal [] = True isFinal (State _ exp _:xs) | (isDef exp) = False | otherwise = isFinal xs isDef x = case x of SPAWN _ _ _ -> True SEND _ _ _ _ -> True AREC _ _ _ -> True SELF _ _ -> True _ -> False brec 4 fresh = case fresh of x -> True _ -> False brec 6 fresh = case fresh of x -> True _ -> False reduce (s0 : (State i (I fresh1) m : ss)) visited = reduce_global (s0 : (ss ++ [State i (I fresh1) m])) visited reduce (s0 : (State i A m : ss)) visited = reduce_global (s0 : (ss ++ [State i A m])) visited reduce (s0 : (State i Ok m : ss)) visited = reduce_global (s0 : (ss ++ [State i Ok m])) visited reduce (s0 : (State i (AREC n ms2 args) (m:ms)) : s) visited = if (brec n m) then reduce_global (s0 : (s ++ [State i (rec n m args) (ms2++ms)])) visited else reduce (s0 : (State i (AREC n (ms2++[m]) args) ms) : s) visited reduce (s0 : (State i (AREC n ms2 args) []) : s) visited = reduce_global ((s0 : s) ++ [State i (AREC n ms2 args) []]) visited reduce (State o (I k) l2 : (State i (SPAWN n e args) m : s)) visited = reduce_global ((State o (I (k+1)) l2 : s) ++ [State i (spawn n (I k) args) m, State k e []]) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (send_msg j e (s ++ [State i (send n e args) m]))) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (s ++ [State i (SEND n (I j) e args) m])) visited send_msg _ _ [] = [] send_msg j e (State i b m : s) | i==j = State i b (m++[e]) : s | otherwise = State i b m : (send_msg j e s) member _ [] = False member x (y:ys) = if x==y then True else member x ys init = reduce_global [State 0 (I 2) [], State 1 main []] [] send 2 e fresh = e send 5 e fresh = e spawn 1 pid [] = (SEND 2 pid A []) spawn 3 pid [] = (AREC 4 [] (pid:[])) main = (SPAWN 1 proc2 []) rec 4 x (pid:[]) = (SEND 5 pid x []) rec 6 x [] = Ok proc2 = (SPAWN 3 proc3 []) proc3 = (AREC 6 [] [])
main -> Res = spawn(res({atom_a,atom_a})), Left = spawn(left(Res)), Right = spawn(right(Res)). res(State) -> receive {atom_c,S} -> S ! State end, receive {atom_u,NewState} -> res(NewState) end. left(Res) -> S = self, Res ! {atom_c,S}, receive {atom_a,B} -> Res ! {atom_u,{atom_b,B}}, Res ! {atom_c,S}, left_aux(Res) end. left_aux(Res) -> receive {atom_b,atom_a} -> Res ! {atom_u,{atom_b,atom_b}} end. right(Res) -> S = self, Res ! {atom_c,S}, receive {A,atom_a} -> Res ! {atom_u,{A,atom_b}}, Res ! {atom_c,S}, right_aux(Res) end. right_aux(Res) -> receive {atom_a,atom_b} -> Res ! {atom_u,{atom_b,atom_b}} end.
data State = State Int Exp [Exp] data Exp = I Int | SPAWN Int Exp [Exp] | SEND Int Exp Exp [Exp] | AREC Int [Exp] [Exp] | SELF Int [Exp] | A | U | C | B | T2 Exp Exp reduce_global current visited | member current visited = current | isFinal current = current | otherwise = reduce current (current:visited) isFinal [] = True isFinal (State _ exp _:xs) | (isDef exp) = False | otherwise = isFinal xs isDef x = case x of SPAWN _ _ _ -> True SEND _ _ _ _ -> True AREC _ _ _ -> True SELF _ _ -> True _ -> False brec 4 fresh = case fresh of (T2 C s) -> True _ -> False brec 6 fresh = case fresh of (T2 U newstate) -> True _ -> False brec 9 fresh = case fresh of (T2 A b) -> True _ -> False brec 12 fresh = case fresh of (T2 B A) -> True _ -> False brec 16 fresh = case fresh of (T2 a A) -> True _ -> False brec 19 fresh = case fresh of (T2 A B) -> True _ -> False reduce (s0 : (State i (I fresh1) m : ss)) visited = reduce_global (s0 : (ss ++ [State i (I fresh1) m])) visited reduce (s0 : (State i (T2 fresh1 fresh2) m : ss)) visited = reduce_global (s0 : (ss ++ [State i (T2 fresh1 fresh2) m])) visited reduce (s0 : (State i A m : ss)) visited = reduce_global (s0 : (ss ++ [State i A m])) visited reduce (s0 : (State i U m : ss)) visited = reduce_global (s0 : (ss ++ [State i U m])) visited reduce (s0 : (State i C m : ss)) visited = reduce_global (s0 : (ss ++ [State i C m])) visited reduce (s0 : (State i B m : ss)) visited = reduce_global (s0 : (ss ++ [State i B m])) visited reduce (s0 : (State i (AREC n ms2 args) (m:ms)) : s) visited = if (brec n m) then reduce_global (s0 : (s ++ [State i (rec n m args) (ms2++ms)])) visited else reduce (s0 : (State i (AREC n (ms2++[m]) args) ms) : s) visited reduce (s0 : (State i (AREC n ms2 args) []) : s) visited = reduce_global ((s0 : s) ++ [State i (AREC n ms2 args) []]) visited reduce (State o (I k) l2 : (State i (SPAWN n e args) m : s)) visited = reduce_global ((State o (I (k+1)) l2 : s) ++ [State i (spawn n (I k) args) m, State k e []]) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (send_msg j e (s ++ [State i (send n e args) m]))) visited reduce (s0 : (State i (SEND n (I j) e args) m : s)) visited = reduce_global (s0 : (s ++ [State i (SEND n (I j) e args) m])) visited reduce (s0 : (State i (SELF n args) m : s)) visited = reduce_global (s0 : (s ++ [State i (self n (I i) args) m])) visited send_msg _ _ [] = [] send_msg j e (State i b m : s) | i==j = State i b (m++[e]) : s | otherwise = State i b m : (send_msg j e s) member _ [] = False member x (y:ys) = if x==y then True else member x ys init = reduce_global [State 0 (I 2) [], State 1 main []] [] spawn 3 right fresh = right spawn 2 left (res:[]) = (SPAWN 3 (right res) []) spawn 1 res [] = (SPAWN 2 (left res) (res:[])) main = (SPAWN 1 (res (T2 A A)) []) rec 6 (T2 U newstate) [] = (res newstate) rec 4 (T2 C s) (state:[]) = (SEND 5 s state (s:(state:[]))) rec 9 (T2 A b) (res:(s:[])) = (SEND 10 res (T2 U (T2 B b)) (b:(res:(s:[])))) rec 12 (T2 B A) (res:[]) = (SEND 13 res (T2 U (T2 B B)) []) rec 16 (T2 a A) (res:(s:[])) = (SEND 17 res (T2 U (T2 a B)) (a:(res:(s:[])))) rec 19 (T2 A B) (res:[]) = (SEND 20 res (T2 U (T2 B B)) []) send 5 e (s:(state:[])) = (AREC 6 [] []) send 11 e (res:(s:[])) = (left_aux res) send 10 e (b:(res:(s:[]))) = (SEND 11 res (T2 C s) (res:(s:[]))) send 8 e (res:(s:[])) = (AREC 9 [] (res:(s:[]))) send 13 e fresh = e send 18 e (res:(s:[])) = (right_aux res) send 17 e (a:(res:(s:[]))) = (SEND 18 res (T2 C s) (res:(s:[]))) send 15 e (res:(s:[])) = (AREC 16 [] (res:(s:[]))) send 20 e fresh = e res state = (AREC 4 [] (state:[])) self 7 s (res:[]) = (SEND 8 res (T2 C s) (res:(s:[]))) self 14 s (res:[]) = (SEND 15 res (T2 C s) (res:(s:[]))) left res = (SELF 7 (res:[])) left_aux res = (AREC 12 [] (res:[])) right res = (SELF 14 (res:[])) right_aux res = (AREC 19 [] (res:[]))