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