`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]
是一种更简单的方法,在活页夹下也可以使用。)我认为这是一个“洞”。不管怎么说,这就是手册上说的嘿,好吧!听起来不错……谢谢!我认为在手册中包含这个或类似的例子会很好。