referential abstraction