我正在尝试理解'上下文'表达式(与context
模式相对)。在手册中,它被描述为:
context ident [expr]
ident必须表示由a的上下文模式绑定的上下文变量 匹配表达。这个表达式评估替换了洞 ident的值由expr的值。
有人可以分享一个例子来说明这个构造的用法吗?我想它必须使用match
使用context
模式,然后使用上述表单来使用匹配的上下文。
答案 0 :(得分:1)
以下示例将fst (a, _)
替换为a
,将snd (_, b)
替换为b
,但未触及fst
和snd
已应用除了对之外的任何事情:
Ltac unfold_proj_pair :=
repeat match goal with
| [ |- context G[fst (?a, _)] ]
=> let G' := context G[a] in change G'
| [ |- context G[snd (_, ?b)] ]
=> let G' := context G[b] in change G'
end.
(请注意cbn [fst snd]
是一种更简单的方法,它也适用于活页夹。)