Coq:当我们有很多等式时控制 `subst`
Coq: controlling `subst` when we have many equalities
如果一个人有许多形式的假设a = b
(我发现当我们使用inversion
时经常发生这种情况),有没有办法防止替换发生?
我经常有这样的假设
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
在运行subst
此时,rel1
、rel2
之类的东西炸开,变成了
的形式
rel1: some_relation someLargeRecord { field := val1; ...; fieldn := valn } rel'
rel2: some_relation someLargeRecord { field := val1; ...; fieldn := valn }
rel''
这太难用了。
我想以某种方式控制subst
,最好不要考虑H0
。这可能吗?
谢谢!
您可以告诉 subst
要替换的变量。例如,调用
subst a b y.
会替代 a
、b
和 c
,但不会替代 rec
。如果您尝试替换多个变量,这可能不方便;在这种情况下,您可以在调用 subst
之前将要保留的方程式放回目标中。例如,以下代码段将替换上下文中的每个变量,但 rec
.
除外
revert H0.
subst.
intros H0.
如果一个人有许多形式的假设a = b
(我发现当我们使用inversion
时经常发生这种情况),有没有办法防止替换发生?
我经常有这样的假设
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
在运行subst
此时,rel1
、rel2
之类的东西炸开,变成了
rel1: some_relation someLargeRecord { field := val1; ...; fieldn := valn } rel'
rel2: some_relation someLargeRecord { field := val1; ...; fieldn := valn }
rel''
这太难用了。
我想以某种方式控制subst
,最好不要考虑H0
。这可能吗?
谢谢!
您可以告诉 subst
要替换的变量。例如,调用
subst a b y.
会替代 a
、b
和 c
,但不会替代 rec
。如果您尝试替换多个变量,这可能不方便;在这种情况下,您可以在调用 subst
之前将要保留的方程式放回目标中。例如,以下代码段将替换上下文中的每个变量,但 rec
.
revert H0.
subst.
intros H0.