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

如何对Coq中的列表长度进行案例分析?,coq,coq-tactic,Coq,Coq Tactic,在证明过程中,我需要对列表长度进行案例分析l 当长度l=2时,则是另一种情况(二进制操作适用) 如何使用destruct或其他策略来执行此操作,并获得两个案例,即True和False 我试过: destruct (length l < 2). destruct (lt (length l) 2). remember (length l < 2). destruct HeqP. destruct(长度l DEC < /代码>结束的引理。在这种情况下,lt_dec是在Compare

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

  • 长度l<2
    时,这是一种情况(类似
    +
    的二进制操作不适用)
  • 长度l>=2时,则是另一种情况(二进制操作适用)
  • 如何使用
    destruct
    或其他策略来执行此操作,并获得两个案例,即True和False

    我试过:

    destruct (length l < 2).
    
    destruct (lt (length l) 2).
    
    remember (length l < 2).
    destruct HeqP.
    
    destruct(长度l<2)。
    自毁(lt(长度l)2)。
    记住(长度l<2)。
    破坏HeqP。
    

    但是没有一个有效。

    你需要一个“建设性”版本的
    你需要一个“建设性”版本的
    Vinz答案是正确的。当你需要考虑两个你知道“不同”的情况时,通常是因为它们是可判定的,所以寻找用“代码> > DEC < /代码>结束的引理。在这种情况下,
    lt_dec
    是在
    Compare_dec
    中定义的,您在导入算术时会得到它。因此:

    Require Import Arith.
    
    Goal forall (l:list nat), True.
    
    intro. destruct (lt_dec (length l) 2).
    
    现在第一个目标是

    l : list nat
    l0 : length l < 2
    ============================
     True
    
    l:列出nat
    l0:长度l<2
    ============================
    真的
    
    第二个目标是

    l : list nat
    n : ~ length l < 2
    ============================
     True
    
    l:列出nat
    n:~长度l<2
    ============================
    真的
    
    Vinz的答案是正确的。当你需要考虑两个你知道“不同”的情况时,通常是因为它们是可判定的,所以寻找用“代码> > DEC < /代码>结束的引理。在这种情况下,
    lt_dec
    是在
    Compare_dec
    中定义的,您在导入算术时会得到它。因此:

    Require Import Arith.
    
    Goal forall (l:list nat), True.
    
    intro. destruct (lt_dec (length l) 2).
    
    现在第一个目标是

    l : list nat
    l0 : length l < 2
    ============================
     True
    
    l:列出nat
    l0:长度l<2
    ============================
    真的
    
    第二个目标是

    l : list nat
    n : ~ length l < 2
    ============================
     True
    
    l:列出nat
    n:~长度l<2
    ============================
    真的
    
    谢谢您提供更多详细信息。谢谢您提供更多详细信息。