Soru oldukça geniştir. Bunu makul bir alanda cevaplamak için çok fazla basitleştirme yapacağım.
Terminoloji üzerinde anlaşalım. Bir program belirtimini ima ettiğinde doğrudur . Bu belirsiz ifade, bir programın tam olarak ne olduğunu ve bir spesifikasyonun tam olarak ne olduğunu tespit ederek birçok yönden kesinleşir. Örneğin, model kontrolünde program bir Kripke yapısıdır ve spesifikasyon genellikle bir LTL formülüdür. Veya program PowerPC talimatlarının bir listesi olabilir ve şartname , birinci dereceden mantıkla yazılmış bir dizi Hoare-Floyd iddiası olabilir. Çok fazla olası varyasyon var. Bir durumda (Kripke yapısı) gerçek bir programı doğrulamadığımızı, ikinci durumda da (PowerPC talimatları listesi) yaptığımızı sonuçlandırmak caziptir. Ancak, her iki durumda da matematiksel modellere gerçekten baktığımızı fark etmek önemlidir ve bu gayet iyi. (Durum, örneğin klasik mekaniğin gerçekliğin matematiksel bir modeli olduğu fiziğe oldukça benzer.)
Çoğu formalizasyon bir programın sözdizimi ve anlambilimi arasında ayrım yapar; yani, nasıl temsil edildiği ve ne anlama geldiği. Bir programın anlambilimi, program doğrulaması açısından önemli olan şeydir. Ancak, elbette programlara (sözdizimsel temsiller) anlamlar atamak için açık bir yol olması önemlidir. İki popüler yol şunlardır:
- (küçük adım) operasyonel semantik : Bu, bir programlama dili yazarak bir tercüman yazarak tanımlamaya benzer. Bunun için ne söylemek gerekir devlet ve dildeki her ifade etkilenir. (Tercümanı hangi dilde yazdığınızı merak edebilirsiniz, ama sanki değilmişim gibi davranacağım.)
- aksiyomatik semantik : Burada her ifade tipi bir aksiyom şeması ile birlikte gelir. Yani, kabaca, bu türden belirli bir ifade her kullanıldığında, belirli aksiyomları kullanabilme anlamına gelir. Örneğin, ataması şema ile birlikte gelirx:=e ; belirli atama x : = x +{P[x/e]}x:=e{P}{ x + 1 = 1 } aksiyomuyla birlikte gelirx:=x+1Şemayı P ile başlatırsak { x = 1 }{x+1=1}x:=x+1{x=1}.P=(x=1)
(Başkaları da var. Anlamsal anlambilimi atladığım için özellikle kötü hissediyorum, ancak bu cevap zaten uzun.) Makine kodu artı operasyonel anlambilim çoğu insanın 'gerçek program' olarak adlandırdığı şeye oldukça yakın. DEC Alpha makine kodunun bir alt kümesi için operasyonel semantik kullanan bir seminal makale:
Neden hiç aksiyomatik olanlar gibi daha üst düzey anlambilim kullanırsınız? Doğruluk kanıtınızın çalıştığınız donanıma bağlı olmasını istemediğinizde. Bu durumda yaklaşım, bir algoritmanın bazı uygun yüksek seviyeli semantiğe göre doğruluğunu kanıtlamak ve daha sonra semantiğin gerçek makinelere daha yakın olan daha düşük seviyeli semantiğe göre geldiğini kanıtlamaktır.
Özetle, sorunuza yol açan üç nedeni düşünebilirim:
- Yalnızca bir programı çağırmak için kullandığınız şeye benzemeyen yüksek seviyeli semantikleri gördünüz ve düşük seviyeli olanlar olup olmadığını merak ediyorsunuz. Cevap Evet.
- Bir modelin gerçeğe karşılık geldiğini nasıl kanıtladığınızı merak ediyorsunuz. Fizikte olduğu gibi, yapmazsınız. Sadece daha iyi modeller bulup bunları gerçekliğe karşı kontrol ediyorsunuz.
- Sözdizimi ve anlambilim arasındaki farkı ve programlara anlam atamanın çeşitli yollarını görmediniz. İkiÖnceki soruda bazı kitaplar listelenmiştir.
Bu cevap sadece soruyu anladığım üç farklı yolu tanımlamaya çalışıyor. Herhangi bir derine inmekBu noktaların birinde çok fazla alan gerektirir.