edge :: Int -> Int -> ROBDDState Int
edge state1 state2 = (state1Color1 .=>. notState2Color1)
                     .&. (state1Color2 .=>. notState2Color2)
                     .&. (state1Color3 .=>. notState2Color3)
                     .&. (state1Color4 .=>. notState2Color4)
                     where
                     state1Color1 = singletonC $ state1 + 0 -- r
                     state1Color2 = singletonC $ state1 + 1 -- g
                     state1Color3 = singletonC $ state1 + 2 -- b
                     state1Color4 = singletonC $ state1 + 3 -- y
                     notState2Color1 = singletonNotC $ state2 + 0 -- r
                     notState2Color2 = singletonNotC $ state2 + 1 -- g
                     notState2Color3 = singletonNotC $ state2 + 2 -- b
                     notState2Color4 = singletonNotC $ state2 + 3 -- y

-- | Restrictions saying that a state has only one color
edge :: Int -> Int -> ROBDDState Int
edge state1 state2 = (state1Color1 .=>. notState2Color1)
                     .&. (state1Color2 .=>. notState2Color2)
                     .&. (state1Color3 .=>. notState2Color3)
                     .&. (state1Color4 .=>. notState2Color4)
                     where
                     state1Color1 = singletonC $ state1 + 0 -- r
                     state1Color2 = singletonC $ state1 + 1 -- g
                     state1Color3 = singletonC $ state1 + 2 -- b
                     state1Color4 = singletonC $ state1 + 3 -- y
                     notState2Color1 = singletonNotC $ state2 + 0 -- r
                     notState2Color2 = singletonNotC $ state2 + 1 -- g
                     notState2Color3 = singletonNotC $ state2 + 2 -- b
                     notState2Color4 = singletonNotC $ state2 + 3 -- y

-- | Restrictions saying that a state has only one color
edge state1 state2 = (state1Color1 .=>. notState2Color1)
                     .&. (state1Color2 .=>. notState2Color2)
                     .&. (state1Color3 .=>. notState2Color3)
                     .&. (state1Color4 .=>. notState2Color4)
                     where
                     state1Color1 = singletonC $ state1 + 0 -- r
                     state1Color2 = singletonC $ state1 + 1 -- g
                     state1Color3 = singletonC $ state1 + 2 -- b
                     state1Color4 = singletonC $ state1 + 3 -- y
                     notState2Color1 = singletonNotC $ state2 + 0 -- r
                     notState2Color2 = singletonNotC $ state2 + 1 -- g
                     notState2Color3 = singletonNotC $ state2 + 2 -- b
                     notState2Color4 = singletonNotC $ state2 + 3 -- y

-- | Restrictions saying that a state has only one color