【问题标题】:equality on inductive types归纳类型的相等
【发布时间】:2014-10-07 22:38:07
【问题描述】:

我如何证明以下微不足道的引理:

Require Import Vector.

Lemma t0_nil: forall A (x:t A 0), x = nil A.
Proof.
Qed.

FAQ 推荐 decide equalitydiscriminate 策略,但我找不到应用其中任何一个的方法。作为参考,这里是归纳定义:

Inductive t A : nat -> Type :=
  |nil : t A 0
  |cons : forall (h:A) (n:nat), t A n -> t A (S n).

【问题讨论】:

    标签: coq induction


    【解决方案1】:

    您要做的是反转x。不幸的是,事实证明依赖类型假设的一般反转是不可判定的,请参阅 Adam Chlipala 的 CPDT。您可以手动在结构上进行模式匹配,例如与:

    Lemma t0_nil: forall A (x:t A 0), x = nil A.
      intros.
      refine (match x with 
      | nil => _
      | cons _ _ _ => _
      end).
      - reflexivity.
      - exact @id.
    Qed.
    

    在许多情况下,您还可以使用 the tactic dep_destruct provided by CPDT 。在这种情况下,您的证明就变成了:

    Require Import CpdtTactics.
    
    Lemma t0_nil: forall A (x:t A 0), x = nil A.
      intros.
      dep_destruct x.
      reflexivity.
    Qed.
    

    【讨论】:

    • Pierre Boutillier 的优雅解决方案,取自 Coq-club post: Definition t0_nil A (x:t A 0) : x = nil A := match x with nil _ => eq_refl end.
    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2022-05-10
    相关资源
    最近更新 更多