Reverse Differentiation Via Predictive Programming