#DEFINE N 3 #DEFINE K 3 server: buf(agents Aprodcons[N];servers Sprodcons[N]), services {put, get}, states {elem0,elem[K]}, actions{{Aprodcons[i].buf.put, buf.elem0} -> {Aprodcons[i].Sprodcons[i].ok_put, buf.elem[1]}, {Aprodcons[i].buf.put, buf.elem[j]} -> {Aprodcons[i].Sprodcons[i].ok_put, buf.elem[j+1]}, {Aprodcons[i].buf.get, buf.elem[j]} -> {Aprodcons[i].Sprodcons[i].ok_get, buf.elem[j-1]}, {Aprodcons[i].buf.get, buf.elem[1]} -> {Aprodcons[i].Sprodcons[i].ok_get, buf.elem0} } server: Sprodcons(agents Aprodcons;servers buf), services {doSth,ok_put,ok_get} states {neutral,prod,cons} actions { {Aprodcons.Sprodcons.doSth, Sprodcons.neutral} -> {Aprodcons.buf.put, Sprodcons.prod} {Aprodcons.Sprodcons.doSth, Sprodcons.neutral} -> {Aprodcons.buf.get, Sprodcons.cons} {Aprodcons.Sprodcons.ok_put, Sprodcons.prod} -> {Aprodcons.Sprodcons.doSth, Sprodcons.neutral} {Aprodcons.Sprodcons.ok_get, Sprodcons.cons} -> {Aprodcons.Sprodcons.doSth, Sprodcons.neutral} } servers buf,Sprodcons[N]; agents Aprodcons[N]; init -> { Sprodcons[j](Aprodcons[j],buf).neutral, buf(Aprodcons[1..N],Sprodcons[1..N]).elem0, Aprodcons[j].Sprodcons[j].doSth, }.