Programlamadaki herhangi bir özyineleme veya yineleme aslında sabit bir noktadır. Örneğin, bir whiledöngü denklem ile karakterize edilir
while b do c done ≡ if b then (c ; while b do c done)
yani bu denklemin while b do c donebir çözümüW
W ≡ Φ(W)
nerede Φ(x) ≡ if b then (c ; x). Ama ne olursa Φgelmiştir birçok noktaları sabit? Hangisi whiledöngüye karşılık gelir ? Programlama semantiğinin temel kavrayışlarından biri, en az sabit nokta olmasıdır.
Basit bir örnek verelim, bu sefer özyineleme. Haskell kullanacağım. fTarafından tanımlanan özyinelemeli işlev
f :: a -> a
f x = f x
her yerde tanımsız işlevdir, çünkü sadece sonsuza kadar çalışır. Bu tanımı daha alışılmadık bir şekilde yeniden yazabiliriz (ancak yine de Haskell'de çalışır)
f :: a -> a
f = f
Yani fkimlik fonksiyonunun sabit noktasıdır:
f ≡ id f
Ancak her işlev sabit bir noktadır id. Her zamanki alan-teorik sıralaması altında "tanımsız" en az unsurdur. Ve aslında, bizim fonksiyonumuz fher yerde tanımsız fonksiyon.
İstek üzerine eklendi: yorumlarda OP anlambilimsel whiledöngüler için kısmi sipariş sordu (bunun bir kafes olduğunu varsaydınız, ancak olması gerekmez). Daha genel bir soru, değişkenleri manipüle edebilen ve temel kontrol yapılarına (koşul ve döngüler) sahip olan bir prosedürel dilin alan-teorik yorumunun ne olduğudur. Tam olarak neyi yakalamak istediğinize bağlı olarak bunu yapmanın birkaç yolu vardır, ancak işleri basit tutmak için, sabit değişkenlerinin sayısının olduğunu varsayalım.nx1, … , XnVVn→ Vn∪ { ⊥ }( v1, … , Vn) ∈ Vn⊥VnVn→ Vn∪ { ⊥ }
- Vn∪ { ⊥ }⊥VnVn→ Vn∪ { ⊥ }
- ⊥
while true do skip done
- her artan dizinin bir üstünlüğü var
Sadece bunun nasıl çalıştığı hakkında bir fikir vermek için, programın anlambilimi
x_1 := e
( v1, … , Vn) ∈ Vnvee( v1, … , Vn)( ve, v2, … , Vn)