Coq / Agda'da sertifikalı derleyici ve optimizasyonlar


9

Martin-Löf tipi teoride, yani Coq / Agda'da resmileştirilmiş doğrulanmış derleyicilerle ilgileniyorum. Şu anda küçük bir oyuncak örneği yazdım. Böylece optimizasyonlarımın doğru olduğunu kanıtlayabilirim. Örneğin, sıfır ile yapılan ilaveler ortadan kaldırılabilir, yani "x + 0" gibi ifadeler.

Düzenli bir derleyici ile gerçekleştirilmesi zor, iyi bir örnek olacak optimizasyonlar var mı? Bir programın düzenli bir derleyici ile gerçekleştirilmesi mümkün olmayan optimizasyonlara izin veren bazı özelliklerini kanıtlamak mümkün müdür? (yani bir teorem kanıtlayıcıyla mümkün olan çıkarım olmadan)

Fikir ve örneklerle ve ayrıca konuyla ilgili referanslarla ilgilenirim.

İlgili bir soru: Derleyici doğruluk kanıtları

edit: Tsuyoshi güzel yorumlarda koymak gibi: Ben bir derleyici (demek) C yazılırsa uygulamak zor ama bir derleyici (demek) Coq yazılmış ise uygulamak daha kolay optimizasyon teknikleri arıyorum. Agda C'yi derlediğinden (haskell aracılığıyla) Agda'da C de mümkün olan her şeyi yapmak mümkündür. Muhtemelen Coq / Agda gibi teorem kanıtlayıcıların tek faydası derleyicinin ve optimizasyonların doğrulanabilmesidir.

edit2: Vijay DI tarafından önerildiği gibi şimdiye kadar okuduğum şeyi yaz. Ben esas olarak INRIA'daki Xavier Leroy ve CompCert projesine odaklandım (bence iyi okunan 80 sayfalık bir kağıt var). İkinci bir ilgi Anton Setzer'in interaktif programlarla ilgili çalışmasıydı. Belki de çalışmaları IO programları ve IO programlarının bisimülasyonu ile ilgili özellikleri kanıtlamak için kullanılabilir. Sewell'den bahsettiğiniz için teşekkürler. ICFP'de "Ormanda masallar" konuşmasını duydum ve belki de gazetelerinden 2-3 tanesini okudum. Ama ben onun çalışmalarına ve yazarlarına özel bakmadım.
Derleyicileri optimize etmeye ilişkin makaleleri nereden başlatacağımı veya arayacağımı henüz bulamadım; örneğin, hangi optimizasyonların doğrulanmış bir derleyici ayarında bakmak ilginç olurdu.


1
“Düzenli bir derleyici ile gerçekleştirilmesi zor optimizasyonlar var mı?”: Bu imkansız değil mi? Doğrulanmış bir derleyiciden doğruluk kanıtı çıkarırsam, düzenli bir derleyici alırım. Bu nedenle, doğrulanmış bir derleyicinin yapabileceği her şey normal bir derleyici tarafından da yapılabilir. Doğrulanmış bir derleyici noktası tam o olamaz yanlış bir optimizasyon gerçekleştirin. (Derleyiciler ve program doğrulaması hakkındaki bilgilerim asgari düzeydedir. Eğer noktayı
kaçırırsam

@Tsuyoshi yorumunuz için teşekkür ederiz. Demek istediğim: Genellikle mümkün olmayan optimizasyonların yapılmasına izin veren bir programın (örneğin bir altyordam girilemez ve hiçbir zaman kendisini çağıramaz) belirli özelliklerini (tutması garanti edilen) kanıtlayabilir miyim. Bazı değişmezlerin bir programı doğrulaması zor olabilir ve belki de bu optimizasyonlar yaygın olarak kullanılan derleyiciler tarafından gerçekleştirilmez. Ama belki de tamamen yanılıyorum.
mrsteve

1
Coq / Agda'da yazılmış bir derleyiciden mi yoksa Coq / Agda için bir derleyiciden mi bahsediyorsunuz ? Sorunuzun Coq / Agda'da yazılmış bir derleyici hakkında olduğunu düşündüm, ancak daha sonra Coq / Agda'da yazılmış bir derleyicinin C'de yazılmış bir derleyiciden daha fazla hedef program olduğunu ispatlayabileceğini düşünmüyorum
Tsuyoshi Ito

2
Okuduklarınızı soruya eklemek iyi olur. Örneğin, doğrulanmış derleme - Xavier Leroy'unki gibi çalışmalara aşina mısınız? Yoksa Peter Sewell ve işbirlikçileri mi?
Vijay D

1
Sorunuzu daha fazla kısıtlamadığınız sürece böyle bir optimizasyon yoktur. Aşırı durumda, C derleyicisi bağırsaklarında gizlice bir teorem kanıtlayıcı uygulayabilir (ve aslında bunu sınırlı bir şekilde yapabilir). Bence "düzenli derleyici" ile ne demek istediğiniz belirsiz.
Andrej Bauer

Yanıtlar:


5

Yves Bertot, Benjamin Gr´egoire ve Xavier Leroy'un bu makalesi, sadece Coq spesifikasyonuna dayanan C benzeri bir dil için optimize edici bir derleyici oluşturur. görünüşe göre bu teknolojinin bir kısmı CompCert C derleyicisinde kullanılıyor .

Veri akışı analizine dayalı derleyici optimizasyonlarını kanıtlamak için yapılandırılmış bir yaklaşım

iki optimizasyonun doğruluğunu, sabit yayılımı (CP) ve ortak alt ifade eliminasyonunu (CSE), bölüm 4'ü dikkate alır. Bu optimizasyonlar, aynı dil için Coq tabanlı olmayan derleyicilerle ilişkili olanlardan daha ileri düzeydedir. Bkz. örneğin gcc'ye kıyasla bu kıyaslama tablosu . ( nadiren bahsedilmesine rağmen , Coq tabanlı derleyicinin derlenmesi daha yavaştır !)

ConCert'in orijinal bir yönü, derleyicinin çoğunun doğrudan Coq belirtim dilinde, tamamen işlevsel bir tarzda yazılmasıdır. Yürütülebilir derleyici, bu spesifikasyondan Caml kodunun otomatik olarak çıkarılmasıyla elde edilir.

ancak makalenin sonunda, gerçek derleyicilerin kendi çerçevelerinde modellenemeyen bazı derleyici optimizasyonlarının olduğunu not ederler.

iyileştirilmiş optimizasyon burada dikkate alınan tek unsur değildir, başka bir yönü de derleyici optimizasyon mantığının karmaşık doğası nedeniyle ince kusurlara maruz kalabilmesidir. gcc'nin yıllar boyunca sayısız optimizasyon mantığı rutininde hatalar olduğu bulunmuştur. örneğin gcc hatası?


3

Genellikle mümkün olmayan optimizasyonların gerçekleştirilmesine izin veren bir program için (örneğin, bir alt program girilemez ve hiçbir zaman kendisini çağıramaz) belirli özellikleri (tutması garanti edilen) kanıtlayabilir miyim.

Bir programın bazı özelliklerini iyileştiriciye sağlamak için daktiloyu genişletmeye eşdeğerdir. Tsuyoshi Ito'nun haklı olduğuna inanıyorum ve Coq hakkında biraz yanlış yönlendirilmiş olabilirsiniz. Hatasız bir derleyici sağlamak için harika bir araçtır, ancak açıklamanız durumunda statik analizlere daha fazla güç sağlamaz.

Coq ile statik analizlerin güçlendirilmesi hakkında düşünebileceğim tek şey, dilinizi kullanıcı tarafından yazılmış bazı kanıtlar içeren iddialarla donatmaktır. - Derleyicinin kendisi dinamik yazım denetimi için geçiş yumuşatma içeren bir dile çevrilecekse ve kullanıcı tarafından yazılan provalar işlevlere dönüştürülebilirse, bu işlevleri bazı alt türler veya optimizasyonlar için önkoşul özellikler olarak uygulamak mümkün olacaktır. - Bu gerçekten, derleyiciye daha fazla güç sağlayacaktır.

Bununla birlikte, görebildiğim kadarıyla, alt tipi güçlendirmek için oldukça yararlı olacaktır. - Bir programcıyı, hangi yerde hangi mülkün optimize edici için yararlı olacağını bilmek zor.

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.