Now `TaggedOperation(op, "tag1", "tag2")!=TaggedOperation(op, "tag2", "tag1")` and `TaggedOperation(op, "tag1", "tag2")==TaggedOperation(op, "tag1", "tag2")` wonder why does the order of tags matter? if not, should serialization/deserialization take tag sorting into consideration?