public BoundSet reduce ( TypeSolver typeSolver ) { List < ConstraintFormula > constraints = new LinkedList <> ( constraintFormulas ) ; BoundSet boundSet = BoundSet . empty ( ) ; while ( constraints . size ( ) > 0 ) { ConstraintFormula constraintFormula = constraints . remove ( 0 ) ; ConstraintFormula . ReductionResult reductionResult = constraintFormula . reduce ( boundSet ) ; constraints . addAll ( reductionResult . getConstraintFormulas ( ) ) ; boundSet . incorporate ( reductionResult . getBoundSet ( ) , typeSolver ) ; } return boundSet ; }
Takes a compatibility assertion about an expression or type called a constraint formula and reduces it to a set of bounds on inference variables . Often a constraint formula reduces to other constraint formulas which must be recursively reduced . A procedure is followed to identify these additional constraint formulas and ultimately to express via a bound set the conditions under which the choices for inferred types would render each constraint formula true .