如何在Coq中有选择地重写?

时间:2017-12-22 11:35:07

标签: coq

a : nat
fvs : list nat
H : a = max (maxNum fvs) a + 1
H1 : max (maxNum fvs) a >= a

执行rewrite H in H1.,替换a,而我只想重写RHS上的a。可以吗?我想从上述两个假设中证明是假的。

1 个答案:

答案 0 :(得分:1)

一种选择是使用rewrite ... at <position>.,如下所示:

rewrite H in H1 at 2.

您想要的也可以稍微不同的方式完成。注意max (maxNum fvs) a在这里是无关紧要的 - 你可以使用任何自然数而不是那个表达式,你的定理仍然可以。这意味着您可以使用generalize策略。

Require Import Coq.Arith.Arith.

Section foo.

  Variable a : nat.
  Variable fvs : list nat.
  Variable maxNum : list nat -> nat.
  Hypothesis H : a = max (maxNum fvs) a + 1.
  Hypothesis H1 : max (maxNum fvs) a >= a.

  Goal False.
    revert H H1; generalize (max (maxNum fvs) a) as n.
    intros n ->; rewrite Nat.add_1_r.
    apply Nat.nle_succ_diag_l.
  Qed.

End foo.