{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
import Control.CP.FD.GecodeExample
model :: ExampleModel (ModelInt,ModelInt,ModelInt,ModelInt)
model (v,q,l,d) = do
let n = q*l
let nseqpair = (v*(v-1)) `div` 2
exists $ \c -> do
size c @= n*v
c `allin` (cte 1,q)
let el ro co = c ! (ro*n+co)
loopall (cte 0,v-1) $ \row -> do
loopall (1,q) $ \val -> do
xsum (xmap (\col -> channel (el row col @= val)) (0 @.. (n-1))) @= l
loopall (cte 0,v-1) $ \a -> do
loopall (a+1,v-1) $ \b -> do
xsum (xmap (\col -> channel (el a col @/= el b col)) (0 @.. (n-1))) @= d
return c
main = example_sat_main_void_gecode (\_ -> model (5,3,2,4))