SETS:  

team/a b c d e f /; 

slot/1..6/; 
nodes(team,slot):x; 

edges1(nodes,nodes)|(&1#EQ#&3)#AND#(&4#GT#1)#AND#(&2#EQ#&4-1):y1;

edges2(nodes,nodes)/ 
a 1 b 1 c 1 e 1 d 1 f 1
a 2 c 2 b 2 f 2 d 2 e 2 
a 3 d 3 b 3 c 3 e 3 f 3
a 4 e 4 b 4 d 4 c 4 f 4 
a 5 f 5 b 5 e 5 c 5 d 5
a 6 b 6 c 6 e 6 d 6 f 6
a 1 a 6 c 1 c 6 d 1 d 6 !slot 6 e` il primo del girone di ritorno; 
/;

ENDSETS 

max=@SUM(edges1:y1);

@FOR(edges1(i,j,h,k): x(i,j)+x(h,k) > y1(i,j,h,k);(1- x(i,j))+(1-x(h,k)) > y1(i,j,h,k));

@FOR(edges2(i,j,h,k):  x(i,j)+x(h,k) =1 ); 

@FOR(edges1(i,j,h,k)|j#GT#1:y1(i,j,h,k)+y1(i,j-1,h,k-1) > 1 ); !impedisce breaks di tre turni;
@FOR(team(i):y1(i,1,i,2)+y1(i,5,i,6) > 1 );                    ! tenendo conto del girone di ritorno;

@FOR(team(i):@SUM(slot(t)|t#LT#6: x(i,t)) > 2 );

@FOR(team(i):@SUM(edges1(i,j,i,h): 1-y1(i,j,i,h) ) < 2 );  !impedisce piu` di due breaks per squadra;

@FOR(nodes:@BIN(x)); 
@FOR(edges1:@BND(0,y,1));

! da aggiungere a edges2 se le squadre a e b giocano nello stesso stadio; 
!a 2 b 2 a 3 b 3 a 4 b 4 a 5 b 5 a 6 b 6 a 7 b 7;