DISCH_THEN : (thm_tactic -> tactic)
DISCH_THEN f (asl, t1 ==> t2) = f(ASSUME t1) (asl,t2)
A ?- t
======== f (ASSUME u)
B ?- v
A ?- u ==> t
============== DISCH_THEN f
B ?- v
A ?- (x = y) ==> t
==================== DISCH_THEN (ASSUME_TAC o SYM)
A u {y = x} ?- t
A ?- (x = y) ==> t x
====================== DISCH_THEN (\th. PURE_REWRITE_TAC [th])
A ?- t y