Foundations Software Construction