Programlamadaki herhangi bir özyineleme veya yineleme aslında sabit bir noktadır. Örneğin, bir while
dö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 done
bir çözümüW
W ≡ Φ(W)
nerede Φ(x) ≡ if b then (c ; x)
. Ama ne olursa Φ
gelmiştir birçok noktaları sabit? Hangisi while
dö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. f
Tarafı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 f
kimlik 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 f
her yerde tanımsız fonksiyon.
İstek üzerine eklendi: yorumlarda OP anlambilimsel while
dö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)