在Isabelle / HOLCF中列出部分订单

时间:2014-08-30 07:14:41

标签: isabelle

我想在HOLCF中创建一个列表数据类型来自Porder.thy的poset实例。我的尝试如下:

theory Scratch
imports Porder Representable
begin

datatype 'a myList = 
  Nil |
  Cons 'a "'a myList"

instantiation myList :: (below) below
begin
  definition below_list_def:
    "(x ⊑ y) = (case x of Nil ⇒ True | 
    Cons a xs ⇒ (case y of Nil ⇒ False |
    Cons b ys ⇒ a ⊑ b ∧ xs ⊑ ys))"
  instance ..
end

我意识到"定义"不支持我正在使用的递归定义,我应该使用" fun"或" fixrec"。但是,我不知道如何在这种情况下使用这些命令。我在网上找到的用于创建po实例的每个示例都使用非递归数据类型。将递归数据类型作为下面的实例和po?

的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以在此本地上下文中使用fun,您只需为其指定正确的名称,即以“_”为后缀的函数名称和实例化的类型名称,在本例中为{{1} }。

然后您的示例将重写为:

below_myList