3

我正在尝试理解“上下文”表达式(与context 模式相反)。在手册中是这样描述的:

上下文标识 [ expr ]

ident 必须表示由匹配表达式的上下文模式绑定的上下文变量。此表达式求值用 expr 的值替换 ident 值的空洞。

有人可以分享一个例子来说明这个结构的用法吗?我想它必须涉及match使用context模式,然后使用上述形式来使用匹配的上下文。

4

1 回答 1

1

这是一个替换fst (a, _)withasnd (_, b)with的示例b,但不涉及fstsnd应用于除了 pair 之外的任何东西:

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]是一种更简单的方法,也适用于活页夹。)

于 2017-11-19T06:10:42.583 回答