A more mechanical approach to program verification