Practical Learning Logic For Programming