Applying Mathematical Logic to Create Zero-Defect Software