`Coq中的上下文表达

`Coq中的上下文表达,coq,ltac,Coq,Ltac,我试图理解“上下文”表达式(与上下文模式相反)。本手册中描述如下: 上下文标识符[expr] ident必须表示由的上下文模式绑定的上下文变量 匹配表达式。此表达式的计算结果将替换 ident的值乘以expr的值 有人能分享一个例子来说明这个结构的用法吗?我想这一定涉及到使用上下文模式进行匹配,然后使用上面提到的形式来使用匹配的上下文。这里有一个例子,它用a替换fst(a,),用b替换snd(uu,b),但不接触应用于配对以外的任何对象的fst和snd: Ltac unfold_proj_pai

我试图理解“上下文”表达式(与
上下文
模式相反)。本手册中描述如下:

上下文标识符[expr]

ident必须表示由的上下文模式绑定的上下文变量 匹配表达式。此表达式的计算结果将替换 ident的值乘以expr的值


有人能分享一个例子来说明这个结构的用法吗?我想这一定涉及到使用
上下文模式进行
匹配,然后使用上面提到的形式来使用匹配的上下文。

这里有一个例子,它用
a
替换
fst(a,)
,用
b
替换
snd(uu,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]
是一种更简单的方法,在活页夹下也可以使用。)

我认为这是一个“洞”。不管怎么说,这就是手册上说的嘿,好吧!听起来不错……谢谢!我认为在手册中包含这个或类似的例子会很好。