假设我有一组A ⊆ nat
。我想在伊莎贝尔建立一个功能f : A ⇒ Y
。我可以使用任一:部分功能与不足指定的总功能
- 部分功能,即
nat ⇒ Y option
类型的一个,或 - 总功能,即
nat ⇒ Y
类型是未指定为不A
输入之一。
我想知道哪个是'更好'的选择。我看到了几个因素:
“部分函数”方法更好,因为它比较容易比较部分函数的相等性。也就是说,如果我想看看
f
是否等于另一个函数g : A ⇒ Y
,那么我只是说f = g
。要比较不足指定的总功能f
和g
,我不得不说∀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
之外未指定的总函数吗?
谢谢布莱恩。然后,我将捍卫“部分函数”的方法......如果'标签'是部分的,那么图G'和H'的等价就是普通的等式'G = H'。但是,如果“标签”是全部的,那么等价性就更加复杂,因此很难推理。 – 2013-03-14 15:58:44
这引出了一个问题:“图的术语平等有多重要?”。也许两张同构的图更有趣。 – chris 2013-03-15 02:19:39
事实上,无论如何我们都需要复杂的等价。我想这是使用图表作为我的示例的缺点。 – 2013-03-15 07:30:59