首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对Coq中的列表长度进行案例分析?

如何对Coq中的列表长度进行案例分析?
EN

Stack Overflow用户
提问于 2015-12-01 07:55:34
回答 2查看 104关注 0票数 0

在证明过程中,我需要对列表l的长度进行案例分析。

  1. 当使用length l < 2时,只有一种情况(在这种情况下,像+这样的二进制操作不适用)
  2. 如果是length l >= 2,则是另一种情况(在这种情况下,应用二进制操作)

我如何使用destruct或其他一些策略来做到这一点,并获得两个情况,即真假?

我试过:

代码语言:javascript
复制
destruct (length l < 2).

destruct (lt (length l) 2).

remember (length l < 2).
destruct HeqP.

但都没起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 10:39:32

您需要一个“建设性”版本的<,因为标准版本在Prop中,所以不能对其执行案例分析。您可以使用comparele_lt_dec或布尔版本的< (在文档中搜索所有选项,最简单的选项应该是这一个)。

如果您真的需要针对2测试长度,您还可以销毁length n 3次,并手动处理前3种情况。

票数 2
EN

Stack Overflow用户

发布于 2015-12-01 19:58:35

文兹的答案是对的。当您需要考虑两个“知道不同”的情况时,通常是因为它们是可判定的,所以寻找以_dec结尾的引理。在本例中,lt_dec是在Compare_dec中定义的,您在导入Arith时会得到它。所以:

代码语言:javascript
复制
Require Import Arith.

Goal forall (l:list nat), True.

intro. destruct (lt_dec (length l) 2).

现在第一个目标是

代码语言:javascript
复制
l : list nat
l0 : length l < 2
============================
 True

第二个目标是

代码语言:javascript
复制
l : list nat
n : ~ length l < 2
============================
 True
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34015280

复制
相关文章

相似问题

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