You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When you use refine in place of constructor, then the metavariables you get are all synthetic opaque. If you focus on a later goal, then you cannot use assumption to assign both the goal and a preceding metavariable since this causes it to fail the isDefEq check.
import Lean
example {α : Type} {P : α → Prop} (a : α) (h : P a) : ∃ x, P x := by
constructor
assumption -- succeedsexample {α : Type} {P : α → Prop} (a : α) (h : P a) : ∃ x, P x := by
refine ⟨?m, ?c⟩
case c =>
/- α : Type P : α → Prop a : α h : P a ⊢ P ?m -/
assumption -- failsopen Lean Elab Tactic Meta in
elab "assumption'" : tactic => do
liftMetaTactic fun mvarId => withAssignableSyntheticOpaque do mvarId.assumption; pure []
example {α : Type} {P : α → Prop} (a : α) (h : P a) : ∃ x, P x := by
refine ⟨?m, ?c⟩
case c => assumption' -- succeeds
The text was updated successfully, but these errors were encountered:
When you use
refine
in place ofconstructor
, then the metavariables you get are all synthetic opaque. If you focus on a later goal, then you cannot useassumption
to assign both the goal and a preceding metavariable since this causes it to fail theisDefEq
check.The text was updated successfully, but these errors were encountered: