部分功能与未指定的总功能

时间:2013-03-14 11:05:15

标签: isabelle

假设我有一组A ⊆ nat。我想在Isabelle中建模一个函数f : A ⇒ Y。我可以使用:

  1. 部分功能,即类型nat ⇒ Y option
  2. 之一
  3. 一个总函数,即nat ⇒ Y类型之一,未指定A以外的输入。
  4. 我想知道哪个是“更好”的选择。我看到了几个因素:

    • “部分功能”方法更好,因为更容易比较部分功能是否相等。也就是说,如果我想看看f是否等于另一个函数g : A ⇒ Y,那么我只想说f = g。要比较未指定的总函数fg,我不得不说∀x ∈ A. f x = g x

    • “未指定的总函数”方法更好,因为我不必总是使用构造/解构option类型。例如,如果f是一个指定不足的总函数,x ∈ A,那么我可以说f x,但如果f是部分函数,​​我将不得不说(the ∘ f) x。另一个例子,在部分函数上进行函数组合比在总函数上进行函数组合更为棘手。

    对于与此问题相关的具体实例,请考虑以下尝试形式化简单图。

    type_synonym node = nat
    record 'a graph = 
      V :: "node set"
      E :: "(node × node) set"
      label :: "node ⇒ 'a"
    

    图表包含一组节点,它们之间的边缘关系以及每个节点的label。我们只关心V中节点的标签。那么,label应该是node ⇒ 'a option的部分函数dom label = V,还是应该只是V之外未指定的总函数?

1 个答案:

答案 0 :(得分:1)

这可能是一个品味的问题,也可能取决于你的用途,所以我只会给你我的个人品味,这将是选项2.总功能。原因是我认为两种方法中的有限量化无论如何都是不可避免的。我认为使用方法1.您会发现处理Option的最简单方法是限制您推理的域(有限量化)。至于图形示例,图形定理总是说类似于V中的所有节点。但正如我所说,这可能是一个品味问题。