code: @Override
      public Poset<C> intersect(final Poset<C> that) {
          if(this == MAGIC || that == NULL) {
              return that;
          }
          if(this == NULL) {
              return NULL;
          }
          if(that == MAGIC) {
              return new Poset(collection);
          }
          List<C> intersection = new ArrayList<>(collection);
          intersection.retainAll(that.collection);
          return new Poset(intersection);
      }
docs: /*
  public Poset<C> multiply(final Poset<C> right) {
  List<Poset<C>> singletons = Poset.singletons(this.collection);
  List<List<C>> result = new ArrayList<List<C>>();
  for(Poset<C> i : singletons) {
  System.out.println("singleton = " + i);
  
  List<C> list = new ArrayList(i.collection);
  
  
  for(Poset<C> j : Poset.singletons(right.collection)) {
  List<C> product = new ArrayList(i.collection);
  product.addAll(j.collection);
  System.out.println("product = " + product);
  result.add(product);
  }
  
  
  
  }
  
  return new Poset(result);
  }