Concurrent semantics for concurrent constraint programming