code: function(and, or) {
  			var aUnion = set.union(and.values[0], or);
  			var bUnion = set.union(and.values[1], or);
  
  			if (!isAndOrOr(aUnion) || !isAndOrOr(bUnion)) {
  				return set.intersection(aUnion, bUnion);
  			}
  
  			return new is.Or([and, or]);
  		}
docs: (a ∩ b) ∪ (c u d) where Z = (c u d) -> Z u (a ∩ b) -> (Z u a) ∩ (Z u b) -> ((c u d) u a) ∩ ((c u d) u b)