Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
regsy-examples [2010/05/28 19:23] jad.hamza created |
regsy-examples [2010/05/28 19:29] jad.hamza |
||
---|---|---|---|
Line 326: | Line 326: | ||
var2 a,b; | var2 a,b; | ||
smoothing(a,b); | smoothing(a,b); | ||
+ | </code> | ||
+ | ++++ | ||
+ | |||
+ | * Christmas | ||
+ | ++++unfold| | ||
+ | <code mona> | ||
+ | # MONA Presburger predicates | ||
+ | |||
+ | # auxiliary predicates | ||
+ | pred xor(var0 x,y) = x&~y | ~x&y; | ||
+ | pred at_least_two(var0 x,y,z) = x&y | x&z | y&z; | ||
+ | |||
+ | # addition relation (p "+" q = r) | ||
+ | pred plus(var2 p,q,r) = | ||
+ | ex2 c: # carry track | ||
+ | 0 notin c # no carry-in | ||
+ | & all1 t: | ||
+ | (t+1 in c <=> at_least_two(t in p, t in q, t in c)) # propagate carry | ||
+ | & (t in r <=> xor(xor(t in p, t in q), t in c)); # calculate result | ||
+ | |||
+ | # less-than relation (p "<" q) | ||
+ | pred less(var2 p,q) = | ||
+ | ex2 t: t ~= empty & plus(p,t,q); | ||
+ | pred leq(var2 p,q) = | ||
+ | ex2 t: plus(p,t,q); | ||
+ | |||
+ | |||
+ | pred plusar3(var2 x1,x2,x3,x4) = ex2 c: plus(x1,x2,c) & plus(c,x3,x4); | ||
+ | pred plusar4(var2 x1,x2,x3,x4,x5) = ex2 c: plusar3(x1,x2,x3,c) & plus(c,x4,x5); | ||
+ | |||
+ | macro shift(var2 p,q) = plus(p,p,q); | ||
+ | macro shift2(var2 p,q) = ex2 t: shift(p,t) & shift(t,q); | ||
+ | macro shift3(var2 p,q) = ex2 t: shift2(p,t) & shift(t,q); | ||
+ | |||
+ | macro time7(var2 p,q) = | ||
+ | ex2 t1,t2: shift(p,t1) & shift(t1,t2) & plusar3(p,t1,t2,q); | ||
+ | macro time8(var2 p,q) = shift3(p,q); | ||
+ | | ||
+ | macro christmas(var2 elines, ilines, isyls, nsyls, line7, line8, nslines, nlines, tlines) = | ||
+ | plus(elines,nlines,tlines) & | ||
+ | plus(ilines,nslines,nlines) & | ||
+ | plus(line7,line8,nlines) & | ||
+ | (ex2 t7,t8,s: time7(line7,t7) & time8(line8,t8) & plus(nsyls,isyls,s) & plus(t7,t8,s)) & | ||
+ | (ex2 tlinesfact: shift2(tlinesfact,tlines)) & | ||
+ | leq(pconst(0),line8) & | ||
+ | leq(pconst(0),line7) & | ||
+ | leq(pconst(0), tlines); | ||
+ | | ||
+ | var2 elines, ilines, isyls, nsyls, line7, line8; | ||
+ | ex2 nslines, nlines, tlines: | ||
+ | christmas(elines, ilines, isyls, nsyls, line7, line8, nslines, nlines, tlines); | ||
+ | </code> | ||
+ | ++++ | ||
+ | |||
+ | * Six-Modulo-Test | ||
+ | ++++unfold| | ||
+ | <code mona> | ||
+ | # auxiliary predicates | ||
+ | pred xor(var0 x,y) = x&~y | ~x&y; | ||
+ | pred at_least_two(var0 x,y,z) = x&y | x&z | y&z; | ||
+ | |||
+ | # addition relation (p "+" q = r) | ||
+ | pred plus(var2 p,q,r) = | ||
+ | ex2 c: # carry track | ||
+ | 0 notin c # no carry-in | ||
+ | & all1 t: | ||
+ | (t+1 in c <=> at_least_two(t in p, t in q, t in c)) # propagate carry | ||
+ | & (t in r <=> xor(xor(t in p, t in q), t in c)); # calculate result | ||
+ | |||
+ | # less-than relation (p "<" q) | ||
+ | pred less(var2 p,q) = | ||
+ | ex2 t: t ~= empty & plus(p,t,q); | ||
+ | pred leq(var2 p,q) = | ||
+ | ex2 t: plus(p,t,q); | ||
+ | |||
+ | |||
+ | pred plusar3(var2 x1,x2,x3,x4) = ex2 c: plus(x1,x2,c) & plus(c,x3,x4); | ||
+ | |||
+ | macro shift(var2 p,q) = plus(p,p,q); | ||
+ | macro time6(var2 p,q) = | ||
+ | ex2 t1,t2: shift(p,t1) & shift(t1,t2) & plus(t1,t2,q); | ||
+ | | ||
+ | macro decomp(var2 n,k) = | ||
+ | plus(k,k,n) | plusar3(k,k,k,n) | ex2 t: time6(k,t) & (plus(t,pconst(1),n) | plus(t,pconst(5),n)); | ||
+ | |||
+ | var2 n,k; | ||
+ | decomp(n,k); | ||
+ | </code> | ||
+ | ++++ | ||
+ | |||
+ | * Company production | ||
+ | ++++unfold| | ||
+ | <code mona> | ||
+ | # MONA Presburger predicates | ||
+ | |||
+ | # auxiliary predicates | ||
+ | pred xor(var0 x,y) = x&~y | ~x&y; | ||
+ | pred at_least_two(var0 x,y,z) = x&y | x&z | y&z; | ||
+ | |||
+ | # addition relation (p "+" q = r) | ||
+ | pred plus(var2 p,q,r) = | ||
+ | ex2 c: # carry track | ||
+ | 0 notin c # no carry-in | ||
+ | & all1 t: | ||
+ | (t+1 in c <=> at_least_two(t in p, t in q, t in c)) # propagate carry | ||
+ | & (t in r <=> xor(xor(t in p, t in q), t in c)); # calculate result | ||
+ | |||
+ | # less-than relation (p "<" q) | ||
+ | pred less(var2 p,q) = ex2 t: t ~= empty & plus(p,t,q); | ||
+ | pred leq(var2 p,q) = ex2 t: plus(p,t,q); | ||
+ | |||
+ | macro shift(var2 p,q) = plus(p,p,q); | ||
+ | macro shift2(var2 p,q) = ex2 t: shift(p,t) & shift(t,q); | ||
+ | macro shift3(var2 p,q) = ex2 t: shift2(p,t) & shift(t,q); | ||
+ | |||
+ | pred plusleq(var2 p,q,r) = ex2 t: plus(p,q,t) & leq(t,r); | ||
+ | |||
+ | pred times1(var2 p,q) = (p=q); | ||
+ | pred times2(var2 p,q) = shift(p,q); | ||
+ | pred times3(var2 p,q) = ex2 t: times2(p,t) & plus(p,t,q); | ||
+ | pred times4(var2 p,q) = ex2 t: times3(p,t) & plus(p,t,q); | ||
+ | pred times5(var2 p,q) = ex2 t: times4(p,t) & plus(p,t,q); | ||
+ | pred times6(var2 p,q) = ex2 t: times5(p,t) & plus(p,t,q); | ||
+ | pred times7(var2 p,q) = ex2 t: times6(p,t) & plus(p,t,q); | ||
+ | pred times8(var2 p,q) = ex2 t: times7(p,t) & plus(p,t,q); | ||
+ | pred times9(var2 p,q) = ex2 t: times8(p,t) & plus(p,t,q); | ||
+ | pred times10(var2 p,q) = ex2 t: times9(p,t) & plus(p,t,q); | ||
+ | |||
+ | #------------------------------------------- | ||
+ | # 5*x1 + 3*x2 <= food1 | ||
+ | # 2*x1 + 3*x2 <= food2 | ||
+ | # price x1 = 8 | ||
+ | # price x2 = 4 | ||
+ | #------------------------------------------- | ||
+ | macro constraints(var2 x1,x2,food1,food2) = | ||
+ | ex2 x1times2, x1times5, x2times3: | ||
+ | times2(x1,x1times2) & times3(x2,x2times3) & times5(x1, x1times5) & | ||
+ | plusleq(x1times5, x2times3, food1) & | ||
+ | plusleq(x1times2, x2times3, food2); | ||
+ | |||
+ | macro cost(var2 x1, x2, c) = | ||
+ | ex2 x1times8, x2times4: | ||
+ | times8(x1,x1times8) & times4(x2,x2times4) & plus(x1times8,x2times4,c); | ||
+ | |||
+ | macro maximize(var2 x1,x2,food1,food2) = | ||
+ | all2 y1, y2: | ||
+ | ~constraints(y1,y2,food1,food2) | | ||
+ | (ex2 cx,cy: cost(x1,x2,cx) & cost(y1,y2,cy) & leq(cy,cx)); | ||
+ | |||
+ | #var2 food1,food2,x1,x2; | ||
+ | #constraints(x1,x2,food1,food2) & maximize(x1,x2,food1,food2); | ||
+ | |||
+ | #------------------------------------------- | ||
+ | # 2*x1 + x2 <= food1 | ||
+ | # x1 + x2 <= food2 | ||
+ | # price x1 = 4 | ||
+ | # price x2 = 3 | ||
+ | #------------------------------------------- | ||
+ | macro constraints2(var2 x1,x2,food1,food2) = | ||
+ | ex2 x1times2: | ||
+ | times2(x1,x1times2) & | ||
+ | plusleq(x1times2,x2,food1) & | ||
+ | plusleq(x1,x2,food2); | ||
+ | |||
+ | macro cost2(var2 x1,x2,c) = | ||
+ | ex2 x1times4,x2times3: | ||
+ | times4(x1,x1times4) & | ||
+ | times3(x2,x2times3) & | ||
+ | plus(x1times4,x2times3,c); | ||
+ | |||
+ | macro maximize2(var2 x1,x2,food1,food2) = | ||
+ | all2 y1, y2: ~constraints2(y1,y2,food1,food2) | | ||
+ | (ex2 cx,cy: cost2(x1,x2,cx) & cost2(y1,y2,cy) & leq(cy,cx)); | ||
+ | |||
+ | #var2 food1,food2,x1,x2; | ||
+ | #constraints2(x1,x2,food1,food2) & maximize2(x1,x2,food1,food2); | ||
+ | |||
+ | #------------------------------------------- | ||
+ | # 4*x1 + 1*x2 <= food1 | ||
+ | # 2*x1 + 3*x2 <= food2 3*x1 + 3*x2 <= food2 | ||
+ | # price x1 = 8 or 6 or 9 | ||
+ | # price x2 = 6 or 4 or 6 | ||
+ | # out of memory on prime numbers, e.g, (5,3) | ||
+ | # (1000,9000,0,1000) | ||
+ | # (2000,8000,0,2000) | ||
+ | # (3000,7000,200,2200) | ||
+ | # (4000,6000,600,1600) | ||
+ | # (5000,5000,1000,1000) | ||
+ | # (6000,4000,1400,400) | ||
+ | # (7000,3000,1500,0) | ||
+ | # (8000,2000,1000,0) | ||
+ | # (9000,1000,500,0) | ||
+ | #------------------------------------------- | ||
+ | #------------------------------------------- | ||
+ | # 4*x1 + 1*x2 <= food1 | ||
+ | # 3*x1 + 3*x2 <= food2 | ||
+ | # price x1 = 9 | ||
+ | # price x2 = 6 | ||
+ | # (1000,9000,0,1000) | ||
+ | # (2000,8000,0,2000) | ||
+ | # (3000,7000,222,2111) | ||
+ | # (4000,6000,666,1334) | ||
+ | # (5000,5000,1111,555) | ||
+ | # (6000,4000,1333,0) | ||
+ | # (7000,3000,1000,0) | ||
+ | # (8000,2000,666,0) | ||
+ | # (9000,1000,333,0) | ||
+ | #------------------------------------------- | ||
+ | pred constraints3(var2 x1,x2,food1,food2) = | ||
+ | ex2 x1food1, x1food2, x2food2: | ||
+ | times4(x1,x1food1) & | ||
+ | times2(x1,x1food2) & | ||
+ | times3(x2,x2food2) & | ||
+ | plusleq(x1food1, x2, food1) & | ||
+ | plusleq(x1food2, x2food2, food2); | ||
+ | |||
+ | pred cost3(var2 x1, x2, c) = | ||
+ | ex2 x1price, x2price: | ||
+ | times9(x1,x1price) & | ||
+ | times6(x2,x2price) & plus(x1price,x2price,c); | ||
+ | |||
+ | macro maximize3(var2 x1,x2,food1,food2) = | ||
+ | all2 y1, y2: | ||
+ | ~constraints3(y1,y2,food1,food2) | | ||
+ | (ex2 cx,cy: cost3(x1,x2,cx) & cost3(y1,y2,cy) & leq(cy,cx)); | ||
+ | |||
+ | var2 food1,food2,x1,x2; | ||
+ | constraints3(x1,x2,food1,food2) & maximize3(x1,x2,food1,food2); | ||
</code> | </code> | ||
++++ | ++++ |