Logic-based programming languages