import data.set #check ({} : set nat) open tactic expr meta def is_assoc_bin_app : expr → tactic (expr × expr) | (app (app op a1) a2) := do h ← to_expr `(is_associative.assoc %%op), return (op, h) | _ := failed run_cmd to_expr `(({} : set nat) ∪ {}) >>= is_assoc_bin_app >>= λ p, trace p.2