Concurrent and distributed Prolog via join patterns (join calculus)