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