Distributed constraint reasoning