Program analizinde en az sabit nokta (lfp) neden önemlidir?


11

Program analizinde en az sabit nokta (lfp) 'nin önemi hakkında büyük bir resim elde etmeye çalışıyorum. Örneğin soyut yorum, lfp'nin varlığını kullanıyor gibi görünmektedir. Program analizi üzerine birçok araştırma makalesi de en az sabit noktayı bulmaya odaklanmaktadır.

Daha spesifik olarak, wikipedia'daki bu makale: Knaster-Tarski Teoremi lfp'nin program semantiğini tanımlamak için kullanıldığından bahseder.

Neden önemlidir? Herhangi bir basit örnek bana yardımcı olur. (Büyük bir resim çekmeye çalışıyorum).

DÜZENLE

Sanırım ifadelerim yanlış. Lfp'nin önemine meydan okumuyorum. Benim tam sorum (başlangıç): lfp hesaplaması program analizine nasıl yardımcı olur? Örneğin, soyut yorumlama neden lfp'yi kullanır? soyut etki alanında lfp yoksa ne olur?

Umarım sorum şimdi daha somut.


@DW Bu, program analizinde yeni başlayan bir sorudur. Çok belirsiz görünüyorsa soruyu göndermeden önce kendimi birkaç kez tartıştım. Aradığım şey: Program analizinde lfp'nin rolü nedir (Önemli, ama nasıl?). Çok fazla matematik detayına girmeyen bir cevap arıyorum. Bence sorumdaki ifade de net değil. Soruyu düzenleyeceğim.
Ram

@DW Bunun iyi araştırılmış bir soru olmayabileceğine katılıyorum. Ancak her ne zaman makale okumaya devam edersem, çok fazla matematik detayı ve büyük resmi çabucak kaybediyorum. Örneğin, daha somut olarak, bu kontrol [Akış için Genişletme] ( berkeleychurchill.com/research/papers/vmcai14.pdf ) bana çok soyut geliyor. Bilgisayarın en az düzeltme noktasına doğrudan hitap eder. Program analizindeki makalelerin çoğu benzer sorularda bu soru ile ilgili görünmektedir. Büyük resmi kaybettim. Lfp hesaplamasının neden önemli olduğunu bilmekten mutluluk duyacağım.
Ram

Yanıtlar:


13

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,,xnVVnVn{}(v1,...,vn)VnVnVnVn{}

  • Vn{}VnVnVn{}
  • 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)


1
While örneği için +1. Ancak, biraz kafam karıştı. But what if Φ has many fixed points?Sabit nokta denklemini anlasam da, bu bağlamda, L'de \ Burada kafesi nasıl tanımlarız? Bununla ilgili daha ayrıntılı çalıştığınız için teşekkür ederim.
Ram

Yukarıdaki yorumda, ben bir kafes (veya bir posta) için stand "L" kullanıyorum
Ram

Cevabı değiştirdim.
Andrej Bauer

Güncelleme için teşekkürler. Özellikle takdir ediyorum çünkü bana programlara bakmak için farklı bir bakış açısı verdi. Şimdi IMP dili için kısmi işlevlerden bir kafes oluşturma görüşünü tamamlayan Nielson'un "Uygulamalarla anlambilim: Resmi bir giriş" bölümünden "Sabit Nokta Teorisi" ni okuyorum.
Ram

6

İşte sezgi: en az sabit noktalar döngüleri analiz etmenize yardımcı olur.

Program analizi, programın yürütülmesini içerir - ancak verilerin bazı ayrıntılarını soyutlar. Hepsi iyi. Soyutlama, analizin programı çalıştırmaya göre daha hızlı gitmesine yardımcı olur, çünkü umursadığınız yönleri görmezden gelmenizi sağlar. Örneğin, soyut yorum şu şekilde çalışır: temel olarak programın yürütülmesini simüle eder, ancak programın durumu hakkında sadece kısmi bilgileri izler.

Zor bit, bir döngüye ulaştığınız zamandır. Döngü birçok kez çalıştırılabilir. Genellikle, program analizinizin döngünün tüm bu yinelemelerini yürütmesini istemezsiniz, çünkü o zaman program analizi uzun zaman alacaktır ... veya sonlandırılmayabilir. Böylece, en az sabit bir nokta kullanıyorsunuz. Döngünün kaç kez yineleneceğini bilmiyorsanız, en az sabit nokta temelde döngü bittikten sonra doğru olacağını söyleyebileceğiniz şeyleri karakterize eder.

En az sabit nokta bunun için kullanılır. Döngüler programlar boyunca mevcut olduğundan, program analizi boyunca en az sabit noktalar kullanılır. En küçük sabit noktalar önemlidir, çünkü döngüler her yerdedir ve döngüleri analiz edebilmek önemlidir.

Bu arada, özyineleme ve karşılıklı özyineleme sadece başka bir döngü biçimidir - bu nedenle de en az sabit bir nokta ile ele alınma eğilimindedirler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.