Coq中子列表的归纳命题

Coq中子列表的归纳命题,coq,coq-tactic,inductive-logic-programming,Coq,Coq Tactic,Inductive Logic Programming,我很难想出列表的子列表的概念,它是通过删除列表中的元素创建的(以便保留顺序)。我需要提出一个归纳命题来决定l1是否是l2的子列表 到目前为止: 我知道空列表是所有列表的子列表 所有列表都是其自身的子列表 如果已知l1是l2的子列表,那么在l1和l2的头部或尾部附加相同列表所产生的列表将导致前者成为后者的子列表 现在是最困难的部分。如何证明像[“x”;“y”]这样的列表是[“a”;“x”;“z”;“y”]的子列表 语法类似于 归纳子列表{X:Type}:list X->list X->Prop:=

我很难想出列表的子列表的概念,它是通过删除列表中的元素创建的(以便保留顺序)。我需要提出一个归纳命题来决定l1是否是l2的子列表

到目前为止:

  • 我知道空列表是所有列表的子列表
  • 所有列表都是其自身的子列表
  • 如果已知l1是l2的子列表,那么在l1和l2的头部或尾部附加相同列表所产生的列表将导致前者成为后者的子列表
  • 现在是最困难的部分。如何证明像[“x”;“y”]这样的列表是[“a”;“x”;“z”;“y”]的子列表
  • 语法类似于 归纳子列表{X:Type}:list X->list X->Prop:=


    有人能帮我一下吗?

    非正式的情况下你会怎么做?只使用你的三条规则。如果您无法管理,则意味着您的定义可能太复杂/不完整

    我认为你不必去想那些复杂的例子,你可以专注于你的例子,同时记住列表是如何构造的。 为什么
    [x;y]
    [a;x;y;z]
    的子列表?因为(没有第二个列表的头)
    [x;y]
    [x;y;z]
    的子列表,这是因为
    [y]
    [y;z]
    的子列表,这是因为
    []
    是始终保持不变的
    [z]
    的子列表


    你看到一个模式了吗?

    你会怎么做呢?只使用你的三条规则。如果您无法管理,则意味着您的定义可能太复杂/不完整

    我认为你不必去想那些复杂的例子,你可以专注于你的例子,同时记住列表是如何构造的。 为什么
    [x;y]
    [a;x;y;z]
    的子列表?因为(没有第二个列表的头)
    [x;y]
    [x;y;z]
    的子列表,这是因为
    [y]
    [y;z]
    的子列表,这是因为
    []
    是始终保持不变的
    [z]
    的子列表


    你看到图案了吗?

    我真的看到了。我只需要三条规则,就是上面提到的:)。也跳过尾巴部分,尽管我真的得到了。我只需要三条规则,就是上面提到的:)。也可以完全跳过尾部