//Semaphore Specification SEMAPHORE(N=4) = SEMA[0], SEMA[0] = (up -> SEMA[1]), SEMA[i:1..N-1] = (up -> SEMA[i+1] | down -> SEMA[i-1]), SEMA[N] = (down -> SEMA[N-1]). // Producer Specification PROD = (produce -> up -> PROD). //Consumer Specification CONS = (down ->consume -> CONS). // Golfball Allocator Specification (N=8) GOLFBALL(N=8)= BALL[N], BALL[b:0..N] = (get[i:1..b] -> BALL[b-i] |put[j:1..N-b] -> BALL[b+j] ).