Concurrent logic programming