Programlama dillerinde soyut yorumlamanın arkasındaki amaç nedir?


9

Şimdi programlama dillerinde "soyut yorum" un ne olduğunu daha iyi anlamaya çalışıyorum. Alanın en az sabit bir elemanla genişletilmesi fikrini, sürekli bir fonksiyon için sabit bir nokta veren dört aksiyomu vb. Açıklayan iyi bir kitap bölümü buldum. Bu teknik detayları anlıyorum (bu şemada “soyut yorum” un tam olarak neyi ifade ettiğini tam olarak bilmiyorum).

Emin olmadığım soyut yorum kullanımını motive eden şey nedir? Sadece hesaplanabilir fonksiyonlar için sabit noktaları mı belirlemektedir? Ana motivasyon çoğu programlama dilinde özyinelemeden mi geliyor?

Ayrıca, bilgisayar bilimleri diplomasına sahip biri için teknik olarak yeterince derin olan bazı üst düzey genel bakış elde etmekten mutluluk duyarız. Wikipedia sayfasını oldukça rahatsız edici buluyorum.


kitap alıntı plz. wikipedia soyut yorum
vzn

Hangi kitap bölümünü okuduğunuzdan bahseder misiniz?
Vijay D

Vikipedi her zaman daha teknik konularda bir eğitim için en iyi yer değildir.
Vijay D

@Vijay ve vzn Baktığım şeylerden biri: cs.berkeley.edu/~necula/cs263/handouts/AbramskiAI.pdf
newToPL

Yanıtlar:


16

Soyut yorumlama çok genel bir kavramdır ve kime sorduğunuza bağlı olarak farklı açıklamalar alacaksınız çünkü çok yönlü kavramlar çoklu bakış açılarını kabul etmektedir. Bu cevaptaki görüş benim ve genel olduğunu varsaymazdım.

Bir motivasyon olarak hesaplama sertliği

Çözümleri şöyle bir yapıya sahip olan karar problemleri ile başlayalım:

karar sorunu

Prosedürde genellikle NP-sert bir alt sınır vardır. Programların anlamsal özelliklerini kontrol etmek bile kararsızdır. Ne yapabiliriz?

İki gözlem yapalım. İlk olarak, genel sorunu çözemesek bile bazen belirli sorun örneklerini çözebiliriz. İkincisi, derleyici optimizasyonu gibi uygulamalar, verimsizliğin tüm kaynaklarını olmasa da bazılarını ortadan kaldıran bir derleyicinin yararlı olması açısından yaklaşımı tolere eder. Bu sezgiyi kesinleştirmek için cevap vermeliyiz:

  1. Tüm sorunlu örnekleri değil bazılarını çözmek resmi olarak ne anlama geliyor?
  2. Bir karar sorununa yaklaşık bir çözüm nedir?

Özet Yorumlama Fikri 1: Sorun İfadesini Değiştir

Bana göre, soyut yorumlamanın önemli bir kavrayışı, problem formülasyonunu Evet / Hayır cevabı istemek yerine Evet / Hayır / Belki cevabı istemektir .

Evet Hayır Belki

Sonuç olarak, her sorunun önemsiz, sabit bir zaman çözümü vardır ( Belki çıktı ). Şimdi dikkatimizi her zaman Belki üretmeyen bir prosedür türetebiliriz . Yukarıdaki sorulara geri dönmek için, bazı sorun örnekleri için çalışan bir çözüm, belki çözemediği sorunlara geri dönen çözümdür . Dahası, belki bir tahmindir Evet ve Hayır biz cevabın ne olduğunu belli değildir çünkü.

Bu fikir sadece karar problemleriyle sınırlı değildir. Programlarla ilgili bu sorunları düşünün.

  1. Programdaki hangi kod satırları öldü (asla yürütülmeyecek)?
  2. Programdaki hangi değişkenlerin sabit değerleri vardır?
  3. Programdaki hangi iddialar ihlal edildi?

Tüm bu durumlarda, belirsizliği olan çözümleri düşünerek kesin bir çözümden yaklaşık bir çözüme geçebiliriz.

  1. Set nedir ölü satır kod?
  2. Set nedirProgramdaki sabit değerlere sahip değişkenler ?
  3. Programda ihlal edilmeyen bir dizi iddia nedir ?

Üretilen setlerin en büyüğü olması gerekmez. Bu fikir son derece geneldir ve program analizi ile ilgisi olmayan problemler için geçerlidir.

  1. Eklemek yerine m ve n, bir aralık isteyebiliriz [a,b] toplamın yattığı yer.
  2. Çarpmak yerine m tarafından n isteyebiliriz k sonucun bitleri (özel, yaygın örnekler işaret veya eşlik bitidir).
  3. Bir formülün tatmin edici ödevlerini istemek yerine, tatmin edici ödevleri içeren bir dizi isteyebiliriz.

Sorunu sadece değiştirmedik, aynı zamanda kesinlikle genelleştirdiğimizi unutmayın, çünkü orijinal soruna bir çözüm hala değiştirilmiş soruna bir çözümdür. Şimdi cevaplanmamış büyük soru: Yaklaşık bir çözümü nasıl bulabiliriz?

Özet Yorumlama Fikri 2: Orijinal Çözümlerin Sabit Nokta Karakterizasyonu

İkinci büyük fikir, çözüm kümesinin pek çok sorunun aday çözümleri kafeste sabit nokta olarak bir karakterizasyonu sahiptir. Örnek olarak, bir grafiğiniz olduğunu ve bir tepe noktası olup olmadığını bilmek istediğinizi varsayalımt bir tepe noktasından ulaşılabilir s. Bunu seti bulmaya ayırabilirizReach(s) tüm köşe noktalarından s ve sonra tbu sette. Bunu daha da gözlemleyebilirizR,ebirch(s) denklemi için en az çözümdür:

X={s}{w | v içinde X ve (v,w) bir kenar}

Sabit nokta karakterizasyonunun değeri, kesin çözümün bir dizi yaklaşımın limiti olarak görülebilmesidir. Bu örnekte,n-serinin öğesinde ulaşılabilecek grafik köşeleri kümesi n adım s ve yaklaştırma bu köşelerin bir alt kümesidir.

Sabit nokta karakterizasyonu bir tasarım kararıdır. Bir dizi çözümün birçok farklı özelliği vardır. Her birinin farklı avantajları olabilir. Programlama dilleri söz konusu olduğunda, bir grafikle uğraşmaktan daha fazla yapıya sahibiz. Önem verdiğimiz sabit nokta denklemleri yapı üzerinde indüksiyon ile tanımlanabilir , giriş programının . Bu fikir programlara özgü değildir. Dilbilgisi, mantıksal formül, program, aritmetik ifade, vb.

Bu sabit nokta karakterizasyonunu vererek, belirli bir hesaplama çözümleri yolunu taahhüt ediyoruz. Aslında bu sabit noktayı hesaplamayacağız çünkü en azından orijinal problemi çözmek kadar zor, bu da bizi bir sonraki adıma getiriyor.

Özet Yorumlama Fikri 3: Sabit Nokta Yaklaşımı

Bir fonksiyonun sabit bir noktasını hesaplamak yerine F kafes içinde L, başka bir fonksiyonun sabit bir noktasını hesaplayabiliriz G, kafes içinde M. Şu koşulların karşılanması koşuluyla,M için L, hesaplanan bir çözüm M çözümün yaklaşık olarak L. Bu, genellikle sabit nokta aktarım teoremi olarak adlandırılan soyut yorumun temel sonuçlarından biridir . Sağlamlık durumu ya Galois bağlantıları ya da soyutlama ya da somutlaştırma işlevlerini ya da sağlamlık ilişkilerini içeren daha zayıf ayarlarla verilir.

Sabit nokta aktarım teoremi, yaklaşık bir analiz tasarladığınızda her zaman bir ses yaklaşımı hesapladığınızı kanıtlamanız gerekmediğini garanti eder. Sadece kafeslerinL (orijinal çözümler içerir) ve M (yaklaşık değerleri içeren) ve fonksiyonlar F ve G,belirli kısıtlamaları karşılamak. Bir analizin tasarımcısıysanız ve sağlamlığı önemsiyorsanız bu büyük bir kazançtır.

Sabit nokta aktarımının ardındaki sezgiyi anlaşılır bulabilirsiniz. Sabit bir noktayı (muhtemelen sonsuz) bir eleman zincirinin sınırı olarak düşünebiliriz. Yaklaşık çözümlerin hesaplanması, zincirin elemanlarına yaklaşarak yapabileceğimiz bu limite yaklaşmak demektir.

Yaklaşıklık kavramı uygulamaya bağlıdır. Bir seyahat planlamak için grafik erişilebilirlik kullanıyorsanız, aralarında yol olmadığını belirten bir yaklaşımı kabul edebilirsiniz.s ve t bir yol olsa bile, algoritma bir yol olduğunu söylüyorsa mutlu olmayacaksınız. s için t hiçbir yolun olmadığı yerde.

Özet Yorumlama Fikri 4: Sabit Nokta Yaklaşım Algoritmaları

Şimdiye kadar görülen her şey matematiksel bir varlık sonucu oldu. Son adım yaklaşımı hesaplamaktır. Yaklaştırma kafesi sonlu olduğunda (veya artan / azalan zincir koşulu karşılandığında), basit bir yinelemeli prosedür kullanabiliriz. Kafes sonsuz ise, tekrarlanan bir prosedür yeterli olmayabilir, ancak sabit bir noktanın hesaplanması hala karar verilebilir. Bu durumda, çözeltiyi daha fazla tahmin etmek veya saf bir yineleme algoritmasından daha hızlı bir şekilde tam bir çözeltiye atlamak için birçok teknik kullanılır. Bir çözümü hesaplama bağlamında, genişletme , daraltma , strateji yineleme , hızlanma vb.

özet

Bence soyut yorumlama, matematiksel mantığın muhakeme için matematiksel bir temel sağladığı gibi soyutlama kavramına da matematiksel bir temel sağlar. Önem verdiğimiz birçok sorunun çözümü sabit noktalar olarak nitelendiriliyor. Bu gözlem, dil problemlerini programlama ve hatta bilgisayar bilimi ile sınırlı değildir. Yaklaşık çözümler, sabit noktaların yaklaşıkları olarak karakterize edilebilir ve özel algoritmalar ile hesaplanır. Bu karakterizasyonlar ve algoritmalar problem örneğinin yapısından faydalanacaktır. Programlar söz konusu olduğunda, bu yapı dilin sözdizimi ile verilir.

Doğal bir metriğe sahip olmayan sorunlara yaklaşımları hesaplamak, uygulayıcılar tarafından sürekli olarak geliştirilmiş ve rafine edilmiş bir sanattır. Soyut yorum, bu sanatın arkasındaki bilim için bir matematik teorisidir.

Kaynaklar Özet yorumlama hakkında okuyabileceğiniz birkaç iyi öğretici vardır.

  1. Özet Yorum'a sıradan bir giriş , Patrick Cousot (Radhia Cousot ile ortak çalışma), Sistem Biyolojisi ve Formaller Yöntemleri Çalıştayı (SBFM'12)
  2. Soyut yorumlarla bilgisayar sistemlerinin resmi doğrulamasına nazik bir giriş , Patrick ve Radhia Cousot, Marktoberdorf Yaz Okulu 2010.
  3. Ders 13: Soyutlama Bölüm I , Patrick Cousot, Soyut yorumlama, MIT Kursu.
  4. Soyut Yorumlamaya Giriş , Samson Abramsky ve Chris Hankin, Deklaratif Dillerin Soyut Yorumlanması, 1987.
  5. Özet yorumlama ve mantık programlarına uygulama , Patrick ve Radhia Cousot, 1992. İlk iki bölüm birkaç örnekle genel, üst düzey bir genel bakışa sahiptir.

7

Tüm bu detaylardan ana noktayı çıkarmanın genellikle zor olduğunu kabul ediyorum. (Aslında, gördüğüm soyut yorumların her tedavisiyle ilgili büyük sorunum, onları motive etmeden çok fazla makine sunmalarıdır.)

İşte böyle düşünüyorum:

Özet yorumlama, yaklaşık olarak büyük girdilerdeki programları aynı anda çalıştırmaktadır.

Bu her şeyi kapsamıyor, ancak genel olarak iyi duruyor.

Kanonik örnek, sonucun işaretini belirlemek için aritmetik ifadeleri değerlendirmektir. Her pozitif girişte bir ifadeyi değerlendirebilen ve sonuç kümesini döndürebilen varsayımsal, sonsuz hızlı bir makine hayal edebilirsiniz. Bunlardan birine sahipseniz, prensip olarak "bu program pozitif sayılar verildiğinde pozitif sayılar döndürür" gibi şeyleri belirleyebilirsiniz.

Ama tabii ki o makineye sahip değilsiniz. Gerçek hayatta sıkışıp kaldınız, bu yüzden ya aynı şeyi sembolik olarak yapmanız gerekir , bu da bazen kesin cevaplar verebilir, ancak çoğu zaman başarısız olur ya da yaklaşık olarak , her zaman cevapları döndürecek, ancak tam olmayabilir. İkincisi, soyut yorumun yaptığı şeydir.

Tüm pozitif sayılar kümesini doğrudan temsil edemezsiniz. Bunun yerine, bu setin bir soyutlamasına ihtiyacınız var . Ayrıca negatif sayıları ve sıfırı soyutlamanız gerekir. Sonlu soyut kümeler ailesiyle sonuçlanırsın{neg,zerÖ,pÖs}Beton setlerini temsil eden{{...,-2,-1},{0},{1,2,...}}.

Artık "iki pozitif sayı sonucu pozitif bir sayıya eklemek" veya birdd:pÖsxpÖspÖs. Dil ilkellerinizin her biri için kurallar oluşturun ve büyük girdi kümelerindeki aritmetik ifadeleri aynı anda değerlendiriyormuş gibi davranabilirsiniz.

Tabii ki, "pozitif ve negatif bir sayı ekleme" kuralı size sorun çıkaracaktır, çünkü böyle eklemeler her şeyi döndürebilir. Soyut yorum çerçevesi size yardımcı oluyor, burada: mümkün olduğunca sıkı bir ses yaklaşımı döndürmeniz gerektiğini söylüyor . Kurallarınız sağlamsa ve toplama işleminin soyut kümede bir şey döndürdüğünü söylüyorlarsa, herhangi bir somut değerlendirme ilgili beton kümesinde bir sayı döndürmelidir. Örneğin,birdd:pÖsxpÖspÖs kural sağlıklıysa birdd(bir,b) her pozitif için pozitif bir ve b. Ayrıca,pÖsxneg(pÖszerÖneg) ses, nerede ""Soyut setlerinizin sendika operasyonu.

En genç PL araştırmacısının bile bir öğleden sonra böyle soyut bir yorumu kodlayabileceğine inanıyorum. Aslında o kadar da zor değil ve temelleri hissetmek için daha fazla okumadan önce denemelisiniz. Bunu yaparken, soyut kümelerinizin bir miktar kavşak kavramına ihtiyacı olduğunu keşfedeceksiniz ("") ve alt küme (belirtildi"Beton kesişimi ve alt kümesine karşılık gelmelidirler.

Soyut yorumunuzun mümkün olduğunca sıkı olduğunu kanıtlamak istediğinizde, bu yazışmayı resmileştirmek için bir Galois bağlantısının olmasını istersiniz . Sadece bir tanesine sahip olmak, herhangi bir beton seti için en sıkı bir soyut setin var olmasını sağlar.

Döngüler veya özyineleme olan bir dille çalışmak istediğinizde, programlarınız sonlanmayabilir, bu nedenle bir sonlandırmayı temsil eden değer. Somut fonksiyonları sabit noktalar olarak (matematiksel anlamda) "hesaplamanız" ve soyut fonksiyonları benzer şekilde hesaplamanız gerekir. Daha yüksek dereceli işlevleriniz varsa, tipik topolojik makinelerin bunları hiç ele almadığını (daha yüksek dereceli uygulama genellikle sürekli değildir) ve Scott alanlarına ihtiyacınız olduğunu göreceksiniz.

IOW, soyut yorumlamanın motivasyonu olarak tanımladığınız şey, Turing eşdeğeri diller üzerinde soyut yorum yapmak için gereken makinelerin motivasyonudur. Gerçek motivasyon, programların davranışlarını aynı anda birçok girdi üzerinde çalıştırarak yararlı bir şekilde özetlemektir.

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.