open tactic lemma ex1 : let x := 1 in ∀ y, x = y → y = 1 := by using_smt $ smt_tactic.intros >> get_local `x >>= (fun a, trace a) open tactic_result meta def fail_if_success {α : Type} (t : smt_tactic α) : smt_tactic unit := λ ss ts, match t ss ts with | success _ _ := failed ts | exception _ _ _ := success ((), ss) ts end def my_smt_config : smt_config := { pre_cfg := { zeta := tt } } lemma ex2 : let x := 1 in ∀ y, x = y → y = 1 := by using_smt_with my_smt_config $ smt_tactic.intros >> fail_if_success (get_local `x) >> return ()