Reasoning about Use Cases using Logic Grammars and Constraints