Derin Gömülere Karşı Sığ


47

Bir mantığı Coq veya Isabelle gibi bir ispat asistanına kodlarken, sığ ve derin bir gömme kullanmak arasında bir seçim yapılması gerekir . Sığ bir gömme mantıksal formülleri doğrudan teorem prover mantığına yazılır, oysa derin bir gömme mantıksal formülleri bir veri türü olarak temsil edilir.

  • Çeşitli yaklaşımların avantajları ve kısıtlamaları nelerdir?
  • Hangisinin kullanılacağına karar vermek için bir kılavuz var mı?
  • İki temsil arasında herhangi bir sistematik biçimde geçiş yapmak mümkün mü?

Motivasyon olarak, güvenlikle ilgili çeşitli mantıkları Coq'a kodlamak istiyorum ve farklı yaklaşımların artı ve eksilerinin ne olduğunu merak ediyorum.

Yanıtlar:


28

Çeşitli yaklaşımların avantajları ve kısıtlamaları nelerdir?

  • Derin gömülmelerin artıları: Formülün yapısını indükleyerek olayları kanıtlayabilir ve tanımlayabilirsiniz. İlgi örnekleri, bir formülün boyutu.

  • Derin gömülmelerin eksileri: Açıkça değişkenlerin bağlanması ile başa çıktınız. Bu genellikle çok zahmetlidir.

Hangisinin kullanılacağına karar vermek için bir kılavuz var mı?

Sığ gömüler nesne mantığında kanıtlanmış sonuçları almak için çok kullanışlıdır. Örneğin, küçük bir mantıkta (örneğin ayırma mantığı) bir şeyi ispatladıysanız, sığ gömme sonuçlarınızı Coq'a aktarmak için tercih edilen bir araç olabilir.

Diğer taraftan, nesne mantığı hakkında meta teoremleri ispatlamak istediğinizde, derin gömme işlemi neredeyse zorunludur (örneğin, kesme gibi).

İki temsil arasında herhangi bir sistematik biçimde geçiş yapmak mümkün mü?

Sığ gömülmenin arkasındaki fikir, gerçekten doğrudan nesne formüllerinin bir modelinde çalışmaktır. Genellikle insanlar doğrudan bir nesne formülü P'yi (notasyonları kullanarak veya elle çevirerek) Prop nüfusuna eşler. Tabii ki, nesne mantığı formülü gömülerek elde edilemeyen Prop sakinleri vardır. Dolayısıyla bir çeşit bütünlük kaybedersiniz.

Böylece derin bir gömme ortamında elde edilen her sonucu yorumlama fonksiyonu aracılığıyla göndermek mümkündür.

İşte küçük bir coq örneği:

Endüktif formül: Set: =
    Ftrue: formül
  | Ffalse: formül
  | Fand: formül -> formül -> formül
  | İçin: formül -> formül -> formül.

Düzeltme noktası yorumlaması (F: formula): Prop: = F ile eşleş 
    Ftrue => Doğru
  | Ffalse => Yanlış
  | Fand ab => (yorum a) / \ (yorum b)
  | Ab => (a yorumlamak) \ / (yorum b)
 son.

Endüktif türev: formül -> Prop: = 
    deep_axiom: türetilebilir Ftrue
  | deep_and: forall ab, türetilebilir a -> türetilebilir b -> türevlenebilir (Fand ab)
  | deep_or1: forall ab, türetilebilir a -> türevlenebilir (ab için)
  | deep_or2: forall ab, türetilebilir b -> türevlenebilir (ab için).

Endüktif tanımlanabilir: Prop -> Prop: = 
    shallow_axiom: sderivable True 
  | sığ_ve: forall ab, devredilebilir a -> devredilebilir b -> devredilebilir (a / \ b)
  | sığ_ör1: forall ab, silinebilir a -> silinebilir (a \ / b)
  | sığ_or2: forall ab, silinebilir b -> silinebilir (a \ / b).

(* Aşağıdaki lemayı kanıtlayabilirsiniz: *)
Lemma Instagram Hesabındaki Resim ve Videoları shallow_deep 
   forall F, türetilebilir F -> tanımlanabilinir (F)

(* Aşağıdaki lemmayı kanıtlayamazsınız: *)
Lemma t: 
   forall P, ölçülebilir P -> F var, yorumlamak F = P

22

Kabaca, bir mantığın derin bir gömülmesiyle, (1) mantığınız için sözdizimini temsil eden bir veri türü tanımlar ve (2) sözdiziminin bir modelini verir ve (3) sözdiziminizle ilgili aksiyomların sesle ilgili olduğunu kanıtlarsınız. modele. Sığ bir katıştırma ile, (1) ve (2) adımlarını atlayın ve yalnızca bir modelle başlayın ve formüller arasındaki gereksinimleri kanıtlayın. Bu, sığ gömme işlemlerinin genellikle yerden uzaklaşmak için daha az iş olduğu anlamına gelir, çünkü genellikle yine de derin bir gömme ile bitirdiğiniz işi temsil eder.

Bununla birlikte, derin bir gömme işlemine sahipseniz, yansıtıcı karar prosedürleri yazmak genellikle daha kolaydır, çünkü aslında yineleyebileceğiniz sözdizimine sahip formüllerle çalışıyorsunuz. Ayrıca, modeliniz garip veya karmaşıksa, genellikle doğrudan anlambilim ile çalışmak istemezsiniz. (Örneğin, kabuledilebilir kapanmaya zorlamak için biortogonalite kullanıyorsanız veya ayırma mantıklarında veya benzer oyunlarda kare özelliklerini zorlamak için Kripke stili modeller kullanıyorsanız.) Ancak, derin gömme neredeyse sizi değişken bağlanma ve sübstitüsyonlar hakkında çok fazla düşünmeye zorlar. bu, kalbinizi öfkeyle dolduracak, çünkü bu (a) önemsiz ve (b) hiç bitmeyen bir sıkıntı kaynağı.

Yapmanız gereken doğru sıra: (1) sığ bir gömülmeyle geçmeye çalışın. (2) Bu buhar bittiğinde, çalıştırmak istediğiniz karar prosedürlerini uygulamak için taktikleri ve teklifi kullanmayı deneyin. (3) Bu da buhar biterse, vazgeçmek ve derin gömme için bağımlı olarak yazılmış bir sözdizimi kullanın.

  • İlk kez dışarıda kalırsanız (3) 'te birkaç ay ayırmayı planlayın. Sen olacak fantezi kalmak aklı başında için kanıt asistanının özellikleri tanımak gerekir. (Ancak bu, genel olarak ödeyecek bir yatırımdır.)
  • Kanıt asistanınız bağımlı türlere sahip değilse, 2. seviyede kalın.
  • Nesne dilinizin kendisi bağımsız bir şekilde yazılmışsa, 2. seviyede kalın.

Ayrıca, yavaş yavaş merdivene çıkmaya çalışmayın. Karmaşıklık merdivenine çıkmaya karar verdiğinizde, her seferinde tam bir adım atın. Eğer bit bit işler yaparsanız, o zaman garip ve kullanılamaz olan birçok teorem elde edersiniz (örneğin, birden çok yarı-sözlü sözdizimi ve sözdizimi ile anlambilimi garip şekillerde karıştıran teoremler elde edersiniz), sonunda atmak zorunda.

EDIT: Merdivenden neden kademeli olarak çıkmanın bu kadar cazip olduğunu ve neden (genellikle) acı çektiğini açıklayan bir yorum.

ABIABBA(AB)CA(BC)(IA)(BC)A(B(CI))

Bu doğru ve işe yarıyor! Bununla birlikte, birleşik bağlantının ayrıca ACUI olduğunu ve bu yüzden ayrılmanın da olduğunu unutmayın. Böylece, aynı süreç, farklı liste veri tipleriyle diğer ispatlarda da devam edecek ve daha sonra farklı ayırma mantığı parçaları için üç sözdizimine sahip olacaksınız ve her biri için kaçınılmaz olarak farklı olacak metametremler olacak, ve kendinizi, ayrılma konjonktürünü ayırdığınız için kanıtladığınız bir metatheorem bulmakta bulacaksınız, ve sonra sözdizimlerini karıştırmak isteyeceksiniz ve sonra delireceksiniz.

Makul bir çabayla başa çıkabileceğiniz en büyük parçayı hedeflemek ve bunu yapmak daha iyidir.


Bu harika cevap için teşekkürler, Neel. Keşke iki cevabı kabul edebilseydim (başkalarının oylarına dayanarak karar verdim).
Dave Clarke

Sorun değil. Bu cevaba ekleyebileceğim bir şey hatırladım, neden giderek artışın çok cazip olduğu hakkında.
Neel Krishnaswami

ACUI özellikleri ile başa çıkmak her zaman sıkıntılıdır. Coq neden Maude'un kitabından bir yaprak çıkaramıyor?
Dave Clarke

14

Derinden sığ bölgeye bir spektrum olduğunu anlamak önemlidir. Dilinizin bölümlerini derinlemesine modelliyorsunuz, bir şekilde, onun inşasıyla ilgili bazı endüktif tartışmalara katılmalı, geri kalanı, mantığın alt anlamının doğrudan anlamını görmek için daha basit kalmalıdır.

Örneğin, Hoare Logic hakkında düşünmek istediğinizde, ifade dilini sığ bir şekilde modelleyebilirsiniz, ancak bir süre-öbe dilinin ana hatları somut bir veri türü olmalıdır. X + y veya a <b yapısına girmenize gerek yoktur, ancak birlikte çalışmanız gerekir while.

Diğer cevaplarda bağımlı türlere imalar vardı. Bu, eski sorunun , bağlayıcıları olan dilleri aklı başında bir şekilde temsil etmelerini, mümkün olduğunca sığ olmalarını, ancak yine de bazı endüktif tartışmaları kabul etmelerini hatırlatır . Benim izlenimim, jürinin son 10-20 yılda bu konuda ortaya çıkan tüm farklı yaklaşım ve makaleleri yargıladığı yönünde. Farklı kanıt yardımcısı toplulukları için "POPLmark mücadelesi" de bir ölçüde bununla ilgiliydi.

İşin garibi, bağımlı tipler içermeyen klasik HOL'de , C. Urban'ın HOL-Nominal yaklaşımı, sığ programlama için oldukça iyi çalıştı, ancak programlama dili biçimlendirmesinin bu topluluklarındaki kültürel değişimlerle yetinmedi.

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.