Mathematics of Program Construction