ONCE_REWRITE_TAC : (thm list -> tactic)
th1 = [ |- a = b; |- b = c; |- c = a]the tactic ONCE_REWRITE_TAC thl can be iterated as required without diverging:
#ONCE_REWRITE_TAC thl ([], "P a");; ([([], "P b")], -) : subgoals
#(ONCE_REWRITE_TAC thl THEN ONCE_REWRITE_TAC thl) ([], "P a");; ([([], "P c")], -) : subgoals
#(ONCE_REWRITE_TAC thl THEN ONCE_REWRITE_TAC thl THEN ONCE_REWRITE_TAC thl) #([], "P a");; ([([], "P a")], -) : subgoals