import Lean class P (n : Nat) theorem foo (n : Nat) [P n] : True := trivial -- This should fail, as by default `apply` does not allow synthesis failures. example : True := by apply foo 37 open Lean Meta Elab Tactic Term /-- In mathlib4 we add the syntax: `apply (config := cfg) e` is like `apply e` but allows you to provide a configuration `cfg : ApplyConfig` to pass to the underlying apply operation. For this test we just hard code the `allowSynthFailures` option into `apply'`. -/ elab "apply'" e:term : tactic => do evalApplyLikeTactic (·.apply · { allowSynthFailures := true }) e def instP (n : Nat) : P n := {} example : True := by apply' foo apply instP exact 37