如何在 coq 中对内部子表达式使用 rewrite 命令?
How to use the rewrite command in coq for inner subexpressions?
我有一个引理告诉加法通勤:
Lemma commute: for all x y, add x y = add y x.
现在我的目标是要证明:
add (add x (S y)) z = add x (S (add y z))
我想用我的引理重写左边的内加法
add x (S y)
到 add (S y) x
.
但是,命令 rewrite commute
反而重写了外部添加:
add (add x (S y)) z
到 add z (add x (S y))
.
问题:如何使用commute重写内部子表达式?
您可以通过以下方式精确确定您想要的引理参数:
rewrite commute with (x := x)(y :=(S y)).
但更常见的是像函数一样应用它:
rewrite (commute x (S y)).
如果指定参数中的一个很明显,您可以避免在第一种情况下提及它,或者在第二种情况下加下划线,这将在此处给出:
rewrite commute with (y :=(S y)).
和
rewrite (commute _ (S y)).
我有一个引理告诉加法通勤:
Lemma commute: for all x y, add x y = add y x.
现在我的目标是要证明:
add (add x (S y)) z = add x (S (add y z))
我想用我的引理重写左边的内加法
add x (S y)
到 add (S y) x
.
但是,命令 rewrite commute
反而重写了外部添加:
add (add x (S y)) z
到 add z (add x (S y))
.
问题:如何使用commute重写内部子表达式?
您可以通过以下方式精确确定您想要的引理参数:
rewrite commute with (x := x)(y :=(S y)).
但更常见的是像函数一样应用它:
rewrite (commute x (S y)).
如果指定参数中的一个很明显,您可以避免在第一种情况下提及它,或者在第二种情况下加下划线,这将在此处给出:
rewrite commute with (y :=(S y)).
和
rewrite (commute _ (S y)).