A Theoretical Perspective of Coinductive Logic Programming