blob: f3a4a4573ce62e60a5d711ab3b1b1ec32d719977 [file] [edit]
import Lean.Meta.Tactic.Grind
import Lean.Elab.Tactic
structure A (α : Type u) where
x : α
y : α
f : α → α
structure B (α : Type u) extends A α where
z : α
b : Bool
open Lean Meta Elab Tactic
elab "fold_projs" : tactic => liftMetaTactic1 fun mvarId => do
mvarId.replaceTargetDefEq (← Grind.foldProjs (← mvarId.getType))
example (a : Nat × Bool) : a.fst = 10 := by
unfold Prod.fst
fail_if_success guard_target =ₛ a.fst = 10
fold_projs
guard_target =ₛ a.fst = 10
sorry
example (b : B (List Nat)) : b.y = [] := by
unfold B.toA
unfold A.y
fail_if_success unfold A.y
fail_if_success guard_target =ₛ b.y = []
fold_projs
guard_target =ₛ b.y = []
sorry