遞歸函數(九):最小不動點定理
回顧
上文我們討論了集合上的偏序結構,之所以談論它們是因為,
完全偏序集上的連續函數具有最小不動點,這稱之為最小不動點定理,除了集合論的一些知識之外,我們還要討論到底什麼是連續函數,以及什麼是完全偏序集。有向子集與完全偏序
偏序集 的非空子集 叫做有向子集(directed subset),
當且僅當,對於 中的任意元素 ,
存在 中的一個元素 ,有 且 。如果一個偏序集 的每個有向子集 都有上確界(記為 ),
就稱它是一個有向完全偏序集,此外,如果它還有最小元,就稱它是一個完全偏序集。注意,完全偏序集並不是每一個子集都有上確界,
而是它的每一個有向子集都有上確界。連續函數
假設 與 是完全偏序集, 是集合上定義的一個函數,
如果 ,則 為 的子集,其中 。對於任意的 ,如果 就有 ,我們就說 是單調的。
可以看出,如果 是單調的,且 是 的有向子集,那麼 也是 的有向子集。如果 是單調的,且對於任意有向子集 ,有 ,
就稱 是連續的。連續函數集上的偏序結構
完全偏序集 到 的連續函數,也可以定義出一個偏序結構,
我們稱 ,當且僅當對於每一個 ,我們有 。這樣我們就得到了一個元素為連續函數的偏序集, 。可以證明, 也是一個完全偏序集。(證略
最小不動點定理
如果 是一個完全偏序集,且 是連續的,
則 有最小不動點, 。因為 是 中的最小元,且 ,所以, ,
因為 是連續的,所以 也一定是單調的,所以, ,繼而, ,對於任意的 都成立。構成了一個全序集,
所以,它是完全偏序集 的一個有向子集,必有上確界。設 是上確界, ,則 是 的不動點。
因為由 的連續性, ,而 與 有同樣的上確界,所以 ,即 是 的不動點。其次, 是 的最小不動點,
假設 是 的任意不動點,因為 ,所以 ,類似的,對於任意的 , 。而 是 的不動點,所以 ,因此 是集合 的上界。
由於集合的最小上界是 ,所以有 。後繼函數的不動點
succ :: Int -> Intsucc n = n+1
在第七篇中,我們說fix
可以得到任意函數的不動點,
succ
函數呢?它有沒有不動點?fix succ
是什麼?現在我們有了最小不動點定理,
就得驗證succ
所指稱的數學函數,是不是一個完全偏序集上的連續函數,
如果是的話,它就有不動點。
在第四篇為了表示計算的不可終止性,我們對自然數集進行了擴充, ,
然後用這個集合作為程序中Int
類型的值的解釋。然而, 不是一個完全偏序集,原因是它沒有上界,
如果我們額外加入一個比其他的自然都大的元素 ,則我們就得到了一個完全偏序集, 。然後,我們看succ
連續嗎?
succ
是一個連續函數。根據最小不動點定理,succ
的最小不動點是, 。
由於 ,即對於非終止的輸入succ
的計算也不會終止,所以 ,
succ
的最小不動點是 ,fix succ
的計算不會終止。
求解階乘函數
上一篇中,我們證明了階乘函數fact
是以下函數的不動點,fact = fix g
,
g :: (Int -> Int) -> Int -> Intg f n = case n of 1 -> 1 _ -> n * f (n-1)
現在我們來看一下,如何運用最小不動點定理來得到這個答案。
為了避免篇幅過長,關於g
函數的連續性證明暫略,我們直接使用公式, ,即,g
函數的最小不動點,就是集合 的上確界。我們先來看一下這個集合 中有哪些元素,
其中, ,我們將 傳入 中,看看會得到什麼,f1 = n -> case n of 1 -> 1 _ -> ...
這個函數能計算f1 1
,但是不能計算f1 2
,恰好是fact
函數有限展開的一階項。
我們再來看 ,它等於 ,
f2 = n -> case n of 1 -> 1 _ -> n * f1 (n-1)
這個函數能計算f2 1
以及f2 2
,但是不能計算f2 3
,
fact
函數展開的二階項。由此,我們看出了規律, 就是fact
函數有限展開的第 階項。
fact
函數,考慮到 這些函數的序關係,因此,我們有 。即,fact
函數就是g
函數的最小不動點。
總結
到此為止,我想這個系列的文章已經討論完了,
本系列文章一直圍繞著遞歸函數和不動點進行分析,在內容上可以分為兩個部分,前半部分主要與可計算性理論有關,
後半部分與不動點定理有關,希望對大家有所幫助。參考
有向集合
完全偏序Kleene fixed-point theoremFoundations for Programming Languages推薦閱讀:
TAG:連續函數 |