Coq

时间:2017-11-18 01:36:38

标签: coq ltac

我正在尝试理解'上下文'表达式(与context 模式相对)。在手册中,它被描述为:

  

context ident [expr]

     

ident必须表示由a的上下文模式绑定的上下文变量   匹配表达。这个表达式评估替换了洞   ident的值由expr的值。

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

1 个答案:

答案 0 :(得分:1)

以下示例将fst (a, _)替换为a,将snd (_, b)替换为b,但未触及fstsnd已应用除了对之外的任何事情:

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