Specificational functions (ACM transactions on programming languages and systems, 1999)