The logical structure of concurrent constraint programming languages