Functional Error Diagnosis and Correction