At first, I laughed. But then I considered what it would feel like to bump a version. The axioms of ZFC only have two ways to build a new finite set, union and pairing, and the empty set is the only prebuilt set.

To bump any version, pair it with the empty set. If your version is a Von Neumann ordinal, then this is a plus-one operation; versions could be mapped to 0, 1, 2, etc. Given two versions (perhaps from two components), we can pair them; if one version is already a pair of versions and the other is a Von Neumann ordinal, then we might write these as pairs, triples, quadruples, etc.

Some operations don’t have semantic-versioning counterparts. We can think of the union of a set as the set of elements of elements. In the previous paragraph, every element of elements is either a Von Neumann ordinal or a tuple, so a union of one of those versions would also be a version. But each ordinal is stepped backwards and each tuple is shorter by one component. Maybe this is analogous to an octopus merge, but I think it’s different.

All natural numbers correspond to sets, but never fear; it makes up for this advantage by being incredibly inefficient. Most numbers are duplicates, and the encodings of interesting sets are generally much longer than their symbolic representations.

At first, I laughed. But then I considered what it would feel like to bump a version. The axioms of ZFC only have two ways to build a new finite set, union and pairing, and the empty set is the only prebuilt set.

To bump any version, pair it with the empty set. If your version is a Von Neumann ordinal, then this is a plus-one operation; versions could be mapped to 0, 1, 2, etc. Given two versions (perhaps from two components), we can pair them; if one version is already a pair of versions and the other is a Von Neumann ordinal, then we might write these as pairs, triples, quadruples, etc.

Some operations don’t have semantic-versioning counterparts. We can think of the union of a set as the set of elements of elements. In the previous paragraph, every element of elements is either a Von Neumann ordinal or a tuple, so a union of one of those versions would also be a version. But each ordinal is stepped backwards and each tuple is shorter by one component. Maybe this is analogous to an octopus merge, but I think it’s different.

oh gods.

This is pretty good, but I think it could be even better if it used a Gödel-like system to encode the sets.

All natural numbers correspond to sets, but never fear; it makes up for this advantage by being incredibly inefficient. Most numbers are duplicates, and the encodings of interesting sets are generally much longer than their symbolic representations.