private static Evaluator<FunctionalHypothesis<Integer, Boolean>> getEvaluator(
     Constraints<Integer, Boolean> constraints) {
   return func ->
       constraints.size()
           - constraints
               .stream()
               .mapToDouble(c -> func.getRepresentation().apply(c.left).equals(c.right) ? 1 : 0)
               .sum();
 }
 private Constraints<Integer, Boolean> shouldEqual4() {
   return Constraints.<Integer, Boolean>builder()
       .add(1, false)
       .add(2, false)
       .add(3, false)
       .add(4, true)
       .add(5, false)
       .add(6, false)
       .add(7, false)
       .add(8, false)
       .add(9, false)
       .add(10, false)
       .add(20, false)
       .add(100, false)
       .add(10000, false)
       .add(1000000, false)
       .add(100421, false)
       .add(100012, false)
       .build();
 }
 private Constraints<Integer, Boolean> shouldBeDivisableBy2() {
   return Constraints.<Integer, Boolean>builder()
       .add(1, false)
       .add(2, true)
       .add(3, false)
       .add(4, true)
       .add(5, false)
       .add(6, true)
       .add(7, false)
       .add(8, true)
       .add(9, false)
       .add(10, true)
       .add(20, true)
       .add(100, true)
       .add(10000, true)
       .add(1000000, true)
       .add(100421, false)
       .add(100012, true)
       .add(100013, false)
       .build();
 }