假設我有一組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