首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Coq中证明` `forall x xs ys,subseq (x ::xs) ys -> subseq xs‘

在Coq中证明` `forall x xs ys,subseq (x ::xs) ys -> subseq xs‘
EN

Stack Overflow用户
提问于 2019-01-26 12:11:56
回答 2查看 127关注 0票数 4

我有以下定义

代码语言:javascript
复制
Inductive subseq : list nat -> list nat -> Prop :=
| empty_subseq : subseq [] []
| add_right : forall y xs ys, subseq xs ys -> subseq xs (y::ys)
| add_both : forall x y xs ys, subseq xs ys -> subseq (x::xs) (y::ys)
.

利用这个,我想证明下面的引理

代码语言:javascript
复制
Lemma del_l_preserves_subseq : forall x xs ys, subseq (x :: xs) ys -> subseq xs ys.

所以,我试着通过做subseq (x :: xs) ys来查看destruct H的证据。

代码语言:javascript
复制
Proof.
  intros. induction H.
代码语言:javascript
复制
3 subgoals (ID 209)

  x : nat
  xs : list nat
  ============================
  subseq xs [ ]

subgoal 2 (ID 216) is:
 subseq xs (y :: ys)
subgoal 3 (ID 222) is:
 subseq xs (y :: ys)

为什么第一个子目标要求我证明subseq xs []destruct的策略难道不应该知道证明不能是形式empty_subseq,因为类型包含x :: xs而不是[]

一般来说,我如何证明我试图证明的引理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-26 12:55:58

难道毁灭策略不应该知道证明不能是形式empty_subseq,因为类型包含x ::xs而不是[]?

事实上,destruct并不知道那么多。它只是在x :: xs[]的情况下用[][]替换了empty_subseq[]。特别是,这常常导致上下文中的信息丢失。更好的替代办法:

  • 使用inversion而不是destruct
  • 使用remember确保subseq的两种类型索引都是destruct之前的变量。(remember (x :: xs) as xxs in H.)这种更明确的目标管理在induction中也能很好地工作。
票数 5
EN

Stack Overflow用户

发布于 2019-01-27 06:45:08

李姚的回答其实很有用。这是引理的证明。

代码语言:javascript
复制
Lemma del_l_preserves_subseq : forall x xs ys, subseq (x :: xs) ys -> subseq xs ys.
Proof.
  intros x xs ys.
  induction ys as [|y ys'].
  - intros. inversion H. (* Inversion will detect that no constructor matches the type of H *)
  - intros. inversion H. (* Inversion will automatically discharge the first case *)
    + (* When [subseq (x :: xs) ys'] holds *)
      apply IHys' in H2. now apply add_right.
    + (* When [subseq xs ys'] holds *)
      now apply add_right.
Qed
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54378236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档