Isabelle函数用于查找关系中最长的成员序列

Isabelle函数用于查找关系中最长的成员序列,isabelle,Isabelle,我有一个关系R::w=>w=>bool,它既是传递的又是不可逆的 我有Ax1公理:“有限{x::w.True}”。因此,对于每个x,总是有一个最长的wn R序列。。。Rw2 Rw1 Rx 我需要一个函数F::w=>nat,对于给定的x,它返回这个序列的“lenght”(如果没有y,则返回0,从而返回xRy)。我该如何在伊莎贝尔建造一座 另外:Ax1是将“w类型的有限性”公理化的一个好方法还是有更好的方法?首先,编写{x::w.True}的一种更惯用的方法是UNIV::w set。我建议编写fin

我有一个关系R::w=>w=>bool,它既是传递的又是不可逆的

我有Ax1公理:“有限{x::w.True}”。因此,对于每个x,总是有一个最长的wn R序列。。。Rw2 Rw1 Rx

我需要一个函数F::w=>nat,对于给定的x,它返回这个序列的“lenght”(如果没有y,则返回0,从而返回xRy)。我该如何在伊莎贝尔建造一座


另外:Ax1是将“w类型的有限性”公理化的一个好方法还是有更好的方法?

首先,编写
{x::w.True}
的一种更惯用的方法是
UNIV::w set
。我建议编写
finite(UNIV::w set)
,或者可能使用
finite
type类,尽管这可能会使您的定理更难应用,因为您的类型需要
finite
实例。我认为这对您的用例来说并不是真的必要或有用

然后,我建议采取以下方法:

  • w list
    类型的列表上定义一个归纳谓词(使用
    inclusive
    ),说明第一个元素是
    x
    ,对于每两个连续的列表元素
    y
    z
    ryz
    保持不变,即列表是一个升序链w.R.t.
    R

  • 显示这样一个链的任何列表都必须有不同的元素(参见
    distinct::'列表⇒ bool

  • 显示在有限集合上有有限多个不同的
    列表

  • 使用
    Max
    运算符查找最大的
    n
    ,以便存在一个长度
    n
    列表,该列表是一个升序链w.r.t.
    r
    。这样做应该很容易,因为至少有一条这样的链,而且您已经证明了只有有限多条链


  • 感谢您在周日抽出时间回答。你对如何有效地证明3有什么建议吗。?我觉得这应该是相对容易的,但我不太明白如何最好地做到这一点。那么,你会如何非正式地在纸上做到这一点?