Isabelle的功能是找到关系成员的最长序列

时间:2017-02-26 13:43:47

标签: isabelle

我有一个关系R :: w => w => bool既是传递的又是反身的。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

然后我建议采用以下方法:

  1. 在类型inductive的列表上定义归纳谓词(使用w list),表明第一个元素是x,并且每两个连续的列表元素y并且zR y z成立,即列表是升序链R

  2. 显示任何此类链的列表必须具有不同的元素(参见distinct :: 'a list ⇒ bool)。

  3. 显示有限集上有多少distinct个列表。

  4. 使用Max运算符查找最大的n,以便存在一个长度为n的列表,该列表是w.r.t的升序链。 R。这项工作应该很容易,因为至少有一条这样的链条,你已经证明只有有限的链条。