I think they're completely different!
In the first case, you're eliminating 5 from r56c5, which would have forced r6c4=4 and r6c6=8, which would have formed the UR {59} in r37c46.
Here you're eliminating candidates from cells
NOT ON the UR!
In the 2nd case, you're eliminating 7 from r1c19, which would have forced r1c3=1 and r1c7=5, which would have formed the UR {27} in r13c19.
Here you're eliminating candidates from cells
ON the UR!
Although the mechanism works the same, the effects of the 2 cases are totally different - in case 1 after the eliminations the UR
could still be useful for other eliminations, while in case 2 the eliminations
completely destroy the UR... If implemented in a solver, type 4 should always be performed ahead of type 4b, otherwise it could miss some useful moves...
BTW not sure what do you mean by
roof...