Concurrent constraint logic programming