Coq简单隐含证明

时间:2019-01-16 06:02:58

标签: coq coq-tactic

我正在尝试证明以下自然数的平凡抵消定理:

// Before do this, check navigator.userAgent 
// and execute below logic if it is desktop Safari.

// Add Z is the convention, but you won't get any error even if do not add.
var c = new Date('2019-01-19 23:59:59Z'.replace(/\s+/g, 'T')) 

// It will returns in minute
var timeOffset = new Date().getTimezoneOffset();

// Do not forget getTime, if not, you will get Invalid date         
var d = new Date(c.getTime() + (timeOffset*60*1000))    

这是我在forall i, j, k in nat . ((i+j) = (i+k)) -> (j = k) 中写的内容:

Coq

之后Theorem cancel : forall (i j k : nat), ((add i j) = (add i k)) -> (j = k). Proof. intros i j k. induction i. simpl. 试图证明归纳法的基础是微不足道的:

Coq

几乎所有j = k -> j = k 教程都以证明Coq开始,但是当我尝试使用此类证明时,我陷入了困境。例如,我正在使用:

A -> A

然后,当我尝试:

Theorem my_first_proof : (forall A : Prop, A -> A).
Proof.
  intros A.
  intros proof_of_A.
  exact proof_of_A.
Qed.

我收到以下错误:

rewrite -> my_first_proof

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

在这种情况下,正确的策略是apply

apply my_first_proof.

rewrite用于将目标的一个子项替换为另一个子项,通常用引理表示这些子项在某种意义上是相等或相等的。 my_first_proof不是平等证明。