Coq:当我们有很多同等性时控制`subst`

时间:2018-02-17 10:43:21

标签: coq coq-tactic

如果有一个许多形式a = b的假设(我发现这种情况经常在我们使用inversion时发生),是否有某种方法可以阻止< / em>从事发生的替代?

我经常有假设看起来像

H0: rec = someLargeRecord { field := val1; ...; fieldn := valn }
rel1: some_relation rec rec'
rel2: some_relation rec rec''
equal1: a = b
equal2: b = c
...
equal3: y = z

此时正在运行substrel1rel2等爆炸,会变成某种形式

rel1: some_relation someLargeRecord { field := val1; ...; fieldn := valn } rel'
rel2: some_relation someLargeRecord { field := val1; ...; fieldn := valn }
 rel''

与此合作非常糟糕。

我希望以某种方式控制subst,最好是让它不要考虑H0。这有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以告诉subst要替换哪些变量。例如,电话

subst a b y.

会替换abc,而不是rec。如果您尝试替换多个变量,这可能不方便;在这种情况下,您可以在调用subst之前将要保留的等式放回目标中。例如,以下代码段将替换上下文中的每个变量,但rec除外。

revert H0.
subst.
intros H0.