Describir: An introduction to programming with specifications :