code: function(and, or) {
  			var aIntersection = set.intersection(and, or.values[0]);
  			var bIntersection = set.intersection(and, or.values[1]);
  			if (!isOr(aIntersection) && !isOr(bIntersection)) {
  				return set.union(aIntersection, bIntersection);
  			}
  			return new is.And([and, or]);
  		}
docs: (a ∩ b) ∩ (c u d) where Z = (a ∩ b) -> Z ∩ (c u d) -> (Z ∩ c) u (Z ∩ d) -> (a ∩ b ∩ c) u (a ∩ b ∩ d)