opaque f : Nat → Nat
opaque q : Nat → (Nat → Prop) → Nat

@[simp]
theorem ex {x : Nat} {p : Nat → Prop} (h₁ : p x) (h₂ : q x p = x) : f x = x :=
  sorry

set_option trace.Meta.Tactic.simp.discharge true
theorem foo : f (f x) = x := by
  simp
  sorry
