Programlama dili anlambilim prototipleme aracı


11

Bir programlama dili anlambilimi ve tür sistemini prototiplemek için herhangi bir araç var mı ve bu da tür sağlamlığı gibi standart özelliklerin bir çeşit model kontrolüne izin veriyor mu?

Bunu soruyorum, çünkü Alloy hakkında bir kitap okuyorum ve tam olarak istediğim işlevselliği sağlıyor, ancak ilişkisel mantık kullanarak ifade edilen modeller için.

Ott'ın farkındayım , ancak kanıt asistan sistemleri için kod üretmeye odaklandığından, bu tür bir "model kontrolü" yeteneğine sahip değil.

Bu tür araçların varlığına ilişkin herhangi bir referans iyi olurdu.


1
Ott birinci adımdır, o zaman en sevdiğiniz kanıt asistanınızda model kontrolü yaparsınız.
Gilles 'SO- kötü

@Gilles: Tamam, ancak bir model kontrol aracının bir noktası, özelliğin gerçekten onlar için geçerli olup olmadığını kontrol etmek için belirli bir boyutta bir dizi öğe oluşturmasıdır. Bu şekilde, bu nesil parçayı tanımlanan her dil için kodlamam gerekecek. Bu nesil adımı otomatikleştirmenin bir yolu olup olmadığını biliyor muydunuz?
Rodrigo Ribeiro

Teknik olarak, bunu bir kanıt asistanında (en azından Coq gibi birinde) yapabilirsiniz, ancak muhtemelen çok yavaş olacaktır. İspat asistanları, sorunu otomatik olarak ortadan kaldırmak için milyonlarca yolu denemek yerine insan destekli ispatlara yöneliktir. Ott'u tekrar kullanmak isterseniz, favori model denetleyiciniz için bir arka uç ekleyebilirsiniz.
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


8

Programlama dillerinin prototiplenmesi (semantikleri, tip sistemleri, değerlendirme ve bunlarla ilgili özelliklerin kontrol edilmesi dahil) için özel olarak oluşturulmuş çerçeveler olmasına rağmen, en iyi seçim sizin özel durumunuza ve özel ihtiyaçlarınıza bağlıdır.

Bunu söyledikten sonra, (daha önce bahsettiğinizler dahil) alabileceğiniz birden fazla (belki de çok farklı değil) alternatifler vardır:

  • yeni diller oluşturmak ve prototip oluşturmak için tasarlanmış belirli bir dil / çerçeve kullanmak: örnek olarak, programlama dillerinin (işletimsel) anlamını belirlemek ve kontrol etmek için Racket'e yerleştirilmiş alana özgü bir dil olan Redex [1]; Dil, dizgi (Lateks içinde), azaltma izlerini, birim testlerini ve rastgele testleri (örn. yazmayı kontrol etmek için) denetleme gibi görevlerin kolay işlenmesini sağlar
  • belirli bir dili gerekli ölçüde yakalayabildikleri sürece, belirli analizleri kolayca tanımlamayı ve gerçekleştirmeyi sağlayan genel modelleme dillerini kullanmak; Alaşım [2] böyle bir yaklaşımın bir örneğidir: oldukça genel ve esnek olsa da, diller devletler arasındaki ilişkiler olarak modellenebilirken, model kontrolü desteği (örneğin, bu dilde değerlendirme) anlambilim bir İlişki modeli (örneğin, bir dilin anlambilimini modellemek için bazı fikirler [3] 'te bulunabilir)
  • bir teorem kanıtlayıcı kullanarak özelliklerini kontrol etmek için dili yerleştirmek; bir örnek, Coq [4] gibi bir kanıt sistemine yerleştirerek dili ve anlambilimini tanımlayacaktır (bu yaklaşım hakkında daha fazla ayrıntı, ayrıca Coq'da derin ve sığ gömme arasındaki farkın tartışılması ve gösterilmesi [ 5])
  • Ott kullanmak (daha önce de belirtildiği gibi, Redex'e benzer bir ruhla, ancak gömülmek yerine yeni bir tanım dili sağlamak); Ott, programlama dilini uygun bir gösterimde tanımlamanıza ve kontrolün çoğunun (yani kanıtın) manuel olarak yapılması gereken bir prova sisteminde (genellikle derin gömme ile) dizgi ve tanımlar üretmenize izin verir.
  • dili ve anlambiliminin yanı sıra genel amaçlı bir programlama dilinde "sıfırdan" uygun kontrolleri (örneğin testler gibi) geliştirmek ve gerekirse kontrol amacıyla (Leon [6] gibi bazı dillere çevirmek) belirli özellikleri otomatik olarak kanıtlamaya olanak tanıyan ve bu yaklaşımı bir prova sistemine yerleştirmeye benzer hale getiren yerleşik doğrulayıcıları içerir)

Çerçeveyi / aracı kullanmanın ne kadar kolay olduğu (örneğin, tanımı kağıda veya Lateks'e yerleştirmek kadar kolay) ve dil ile ilgili özellikleri kontrol etme mekanizmalarının ne kadar güçlü olduğu (ör. bir teorem kanıtlayıcısındaki dil çok ayrıntılı özelliklerin kontrol edilmesine izin verebilir).

[1] Casey Klein, John Clements, Christos Dimoulas, Carl Eastlund, Matthias Felleisen, Matthew Flatt, Jay A. McCarthy, Jon Rafkind, Sam Tobin-Hochstadt ve Robert Bruce Findler. Araştırmanızı Yapın: Hafif Mekanizasyonun Etkinliği Üzerine. POPL, 2012.

[2] Daniel Jackson. Alaşım: hafif bir nesne modelleme notasyonu. TOSEM, 2002.

[3] Greg Dennis, Felix Chang, Daniel Jackson. SAT ile Kod Modüler Doğrulaması. ISSTA, 2006

[4] Coq resmi kanıt yönetim sistemi

[5] Programlar Hakkında Resmi Akıl Yürütme. Adam Chlipala, 2016

[6] Leon, fonksiyonel Scala programlarını doğrulama, onarma ve sentezleme sistemi

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.