Hypothetical Reasoning in Logic Programming: A Semantic Approach.