while (there exists a node u ∈ V_self with premv(u) != ∅) do
for (each (u′, u) ∈ E_self and each z ∈ premv(u) ∩ sim(u′)) do
sim(u′) := sim(u′) \ {z};
if (sim(u′) = ∅) then return ∅;
for each u′′ with (u′′, u′) ∈ Ep do
for (z′ ∈ anc(get_bound(u′′, u′), u′′, z) ∧ z′ ∈/ premv(u′)) do
if (dec(get_bound(u′′, u′), u′, z′) ∩ sim(u′) = ∅)
then premv(u′) := premv(u′) ∪ {z′};
premv(u) := ∅;