Composition needs full canonical decomposition, decomposition must be a many-to-many pipe to handle canonical reordering