POP_ASSUM : thm_tactic -> tactic
POP_ASSUM f ({A1,...,An} ?- t) = f (A1 |- A1) ({A2,...,An} ?- t)
There are admittedly times when POP_ASSUM is convenient, but it is most unwise to use it if there is more than one assumption in the assumption list, since this introduces a dependency on the ordering, which is vulnerable to changes in the HOL system.
Another point to consider is that if the relevant assumption has been obtained by DISCH_TAC, it is often cleaner to use DISCH_THEN with a theorem-tactic. For example, instead of:
DISCH_TAC THEN POP_ASSUM (fn th => SUBST1_TAC (SYM th))
DISCH_THEN (SUBST1_TAC o SYM)
{4 = SUC x} ?- x = 3
POP_ASSUM (fn th => REWRITE_TAC[REWRITE_RULE[num_CONV (Term`4`), INV_SUC_EQ] th])