Also, this returns the _smallest_ common version, doesn't it? As far as I can see, the version lists are kept sorted from low to high (as demonstrated by the use of `lists:umerge`), so when we drop out as soon as we find a common element, that might be a lower one.

As the number of different versions will probably remain small, I'd be tempted to use a quadratic but more obviously correct expression: `lists:max([CV || CV <- CVs, lists:member(CV, SVs)])`.