let unify e1 e2 =
let r1 = repr e1 and r2 = repr e2 in
if Elem.equal r1 r2 then ()
else
let pref = Elem.prefer r1 r2 in
let k1 = rank r1 and k2 = rank r2 in
if pref < 0 then
begin
ElemTable.replace table r2 r1;
if k1 <= k2 then ElemTable.replace ranks r1 (k2 + 1)
end
else if pref > 0 then
begin
ElemTable.replace table r1 r2;
if k2 <= k1 then ElemTable.replace ranks r2 (k1 + 1)
end
else
if k1 < k2 then
ElemTable.replace table r1 r2
else if k2 < k1 then
ElemTable.replace table r2 r1
else
begin
ElemTable.replace table r1 r2;
ElemTable.replace ranks r2 (k2 + 1)
end