open tactic

#check
λ (A : Type) (a b c d : A) (H1 : a = b) (H2 : c = b) (H3 : d = c),
have Hac : a = c, by do {
 h  ← get_local `H2,
 hs ← mk_app `eq.symm [h],
 x  ← to_expr `(eq.trans H1 %%hs),
 exact x },
show a = d, by do {
  x ← to_expr `(
    have aux : a = c, from Hac,
    have c = d, by do { symmetry, assumption },
    show a = d, by do {
      get_local `Hac >>= clear,
      get_local `H1 >>= clear,
      trace "NESTED CALL:",
      trace_state,
      transitivity,
      get_local `aux >>= exact,
      assumption }),
  trace "-----------",
  trace_state,
  exact x }
