Constraint-Based Abstract Semantics for Temporal Logic: A Direct Approach to Design and Implementation