public boolean implies(Node a, Node b, ExampleCalculator example) throws TimeoutException {
    if (b == null) return true;

    if (!strategy.contains(Strategy.SingleTesting)) {
      Node node = new And(a.clone(), new Not(b.clone()));
      SatSolver solver = new SatSolver(node, timeout);
      return !solver.isSatisfiable();
    }

    example.setLeft(a);
    example.setRight(b);
    return !example.findSatisfiable(strategy.contains(Strategy.SingleTestingAborted));
  }
 public Configuration calculateExample(boolean added) throws TimeoutException {
   return added ? addedProducts.nextExample() : removedProducts.nextExample();
 }