簡體   English   中英

Coq中的永遠平等

[英]forall equality in Coq

我試圖證明以下相等性:

Lemma Foo (A : Type) (n : nat) (gen : forall p : nat, p < S n -> A)
(ic0 : 0 < S n) (ic1 : 0 mod S n < S n):
  gen (n - n) ic1 = gen 0 ic0.

nn是0通過Nat.sub_diag0 mod S n也為0通過Nat.mod_0_l 但是,我不能輕易將這些引理應用於類型。 我嘗試了remember/rewrite/subst通常技巧,但是subst部分失敗了:

   remember (gen (n-n)) as Q.
   remember (n-n) as Q1.
   rewrite Nat.sub_diag in HeqQ1.
   subst.

PS此問題可能使用更好的標題。 請提出建議。

subst策略失敗了,因為remember是越野車。 在這里報告了這個錯誤。 Coq.Compat.AdmitAxiom理智,請使用abstract admit完成目標,其中admit來自Coq.Compat.AdmitAxiom ,絕不應該因類型錯誤而失敗。如果確實如此,則意味着Coq中存在錯誤(或您在使用的插件使用)。)

這是一個有效的證明(在8.6.1和8.7 + beta2中測試):

Require Import Coq.Arith.Arith.

Lemma Foo (A : Type) (n : nat) (gen : forall p : nat, p < S n -> A)
      (ic0 : 0 < S n) (ic1 : 0 mod S n < S n):
  gen (n - n) ic1 = gen 0 ic0.
Proof.
  revert ic0 ic1; simpl; rewrite Nat.sub_diag; intros ic0 ic1.
  apply f_equal, le_unique.
Qed.

請注意,從某種意義上來說,您很幸運, n - n0 mod S n在判斷上是相等的。 使用simpl揭示這一事實,並允許rewrite工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM