プログラミングにおける再帰または反復の形式は、実際には固定小数点です。たとえば、while
ループは次の方程式で特徴付けられます
while b do c done ≡ if b then (c ; while b do c done)
つまりどのwhile b do c done
ソリューションであるW
式の
W ≡ Φ(W)
どこΦ(x) ≡ if b then (c ; x)
。しかし、多くの固定小数点Φ
がある場合はどうなりますか?どちらがループに対応していますか?プログラミングのセマンティクスの基本的な洞察の1つは、それが最小の不動点であるということです。while
簡単な例を挙げましょう、今回は再帰です。Haskellを使用します。f
によって定義される再帰関数
f :: a -> a
f x = f x
それは永遠に実行されるだけなので、どこでも未定義の関数です。この定義をより珍しい方法で書き直すことができます(ただし、Haskellでは引き続き機能します)。
f :: a -> a
f = f
これf
が恒等関数の固定点です。
f ≡ id f
しかし、すべての関数はの固定小数点ですid
。通常のドメイン理論の順序では、「未定義」が最小の要素です。そして確かに、私たちの関数f
はどこでも未定義の関数です。
while
んバツ1、… 、xんVVん→ Vん∪ { ⊥ }(v1、… 、vん)∈ Vん⊥VんVん→ Vん∪ { ⊥ }
- Vん∪ { ⊥ }⊥VんVん→ Vん∪ { ⊥ }
- ⊥
while true do skip done
- 増加するすべてのシーケンスには上限があります
これがどのように機能するかを理解するために、プログラムのセマンティクス
x_1 := e
(v1、…、vん)∈Vんvee
(v1、… 、vん)(ve、v2、… 、vん)