Bağımlı tip kontrolünün karar verilebilir olduğunu gösteren kanıtlama teknikleri


10

Üzerinde çalıştığım bağımlı tipte bir hesap için daktilo denetiminin karar verilebilir olduğunu göstermem gereken bir durumdayım. Şimdiye kadar, sistemin güçlü bir şekilde normalleştiğini ve böylece tanımsal eşitliğin karar verilebilir olduğunu kanıtlayabildim.

Okuduğum birçok referansta, daktilo denetiminin karar verilebilirliği güçlü normalleşmenin bir sonucu olarak listeleniyor ve bu durumlarda buna inanıyorum, ancak bunun gerçekten nasıl gösterildiğini merak ediyorum.

Özellikle, aşağıdakilere takılı kaldım:

  • İyi yazılan terimlerin güçlü bir şekilde normalleştirilmesi, algoritmanın iyi yazılmamış girişlerde sonsuza kadar döngü yapmayacağı anlamına gelmez.
  • Mantıksal ilişkiler genellikle güçlü normalleşme göstermek için kullanıldığından, yazım denetimi koşullarını ilerletirken uygun bir azalan metrik yoktur. Dolayısıyla, yazım kurallarım sözdizimine yönelik olsa bile, kuralların uygulanmasının sonunda sona ereceğine dair bir garanti yoktur.

Merak ediyorum, herkes bağımlı bir şekilde yazılan bir dil için daktilo denetiminin kanıtlanabilirliğine dair iyi bir referansı var mı? Eğer küçük bir çekirdek hesabı ise, sorun değil. Karar verilebilirliği göstermek için ispat tekniklerini tartışan her şey harika olurdu.


7
Her zamanki çift yönlü tip kontrol algoritmaları, bir terimi (veya bir türü), önce iyi yazıldığını (veya iyi biçimlendirildiğini) kontrol etmeden asla normalleştirmeye çalışmaz. Türlenmemiş terimleri normalleştirme konusunda endişelenmenize gerek yoktur.
Andrej Bauer

7
Kuralların uygulanmasına ilişkin olarak: tür dönüşümü hariç tüm terim ve tür kuralları hedefi azaltır. Bu nedenle, iki yönlü bir yaklaşım kullanarak yaptığımız tip dönüşümünü kontrol etmemiz gerekir.
Andrej Bauer

Yanıtlar:


9

Burada gerçekten bir incelik var, ancak tip kontrolü durumunda işler iyi çalışıyor. Konuyu burada yazacağım, çünkü birçok ilgili iş parçacığında ortaya çıkıyor ve "standart" bağımlı bir tür teorisinde tip kontrolü yaparken neden her şeyin yolunda gittiğini açıklamaya çalışıyorum (kasten belirsiz olacağım, çünkü bu konular ne olursa olsun ortaya çıkma eğilimindedir):

Aslında 1: Eğer olan bir türevidir , daha sonra bir derivasyon vardır arasında tür için , her subterm ve, , bir tür olduğu , bir bağlam ve türev ve .DΓt:ADΓA:ssutBΔDΔu:B

Bu güzel gerçeği kanıtlamak biraz zor ve oldukça kötü bir karşı gerçekle dengeleniyor:

Gerçek 2: Genel olarak ve ! türevleri değildir .DD D

Bu biraz tip sisteminizin kesin formülasyonuna bağlıdır, ancak pratikte uygulanan çoğu "operasyonel" sistem Gerçek 2'yi karşılar.

Bu, türevler üzerinde tümevarım yaparak akıl yürütürken "alt terimlere geçemeyeceğiniz" veya tümevarım ifadesinin, bir şeyleri kanıtlamaya çalıştığınız terimin türü hakkında doğru olduğu sonucuna varamayacağınız anlamına gelir.

Bu gerçek, masum ifadeleri kanıtlamaya çalışırken sizi oldukça sert bir şekilde ısırır; örneğin, dönüştürülmüş dönüşümlü sistemler, dönüştürülmemiş dönüşümlü olanlara eşdeğerdir.

Bununla birlikte , tür çıkarımı durumunda, Andrej'nin önerdiği gibi, terimin yapısında indüksiyonla eşzamanlı bir tür ve sıralama (türün türü) çıkarsama algoritması verebilirsiniz. Belirli bir (ve bağlam terimi için , ve olacak şekilde başarısız olur veya bulursunuz. ve özellikle yukarıda açıklanan problemden kaçınırsınız.tΓA,sΓt:AΓA:s

Önemli olan (ve gerçekten dönüşüm gerektiren tek durum) uygulama:

infer(t u):
   type_t, sort_t <- infer(t)
   type_t' <- normalize(type_t)
   type_u, sort_u <- infer(u)
   type_u' <- normalize(type_u)
   if (type_t' = Pi(A, B) and type_u' = A' and alpha_equal(A, A') then
      return B, sort_t (or the appropriate sort)
   else fail

Her normalleştirme çağrısı, iyi yazılmış terimlerle yapıldı, çünkü bu, inferbaşarısının değişmezidir .


Bu arada, uygulandığı gibi, Coq, tür denetimi kontrol fixetmeye başlamadan önce ifadelerin gövdesini normalleştirdiği için kararlı tür kontrolüne sahip değildir .

Her halükarda, iyi yazılmış terimlerin normal formları üzerindeki sınırlar o kadar astronomiktir ki, karar verilebilirlik teoremi bu noktada çoğunlukla akademiktir. Pratikte, tür kontrol algoritmasını sabrınız olduğu sürece çalıştırırsınız ve o zamana kadar tamamlanmadıysa farklı bir rota deneyin.


Cevabınızı çok faydalı buldum, teşekkür ederim. İki sorum var: 1. "İşletim sistemleri" ne anlama geliyor? Alternatif nedir? 2. Örnekle daha açık olabilir misiniz: ne anlama geliyor (kanıtlamaya çalışıyoruz?) "Yazılan dönüştürmeye sahip sistemler, dönüştürülmemiş dönüştürmeye sahip sistemlerle eşdeğerdir". Teşekkürler!
asukasz Lew

1
@ ŁukaszLew Operasyonel bir sisteme alternatif olarak (örn., Coq veya Agda yazılımında uygulamada uygulanan), meta-teorik özellikleri kanıtlamak için yararlı olan ancak uygulamada kullanımı yetersiz veya uygunsuz olan teorik bir sistem olacaktır. Operasyonel ve teorik bir sistemin denkliğini kanıtlamak genellikle sistem tasarımının önemli bir parçasıdır. Burada daha fazla konuşuyorum: cstheory.stackexchange.com/a/41457/3984
cody

Bence Lennart Augustsson'un Daha Basit, Daha Kolay! . Bu, tip kontrolünün minimal bir Haskell uygulamasıdır ve bağımlı tipte lambda hesabı için bazı çıkarımlardır. Kodenin kodlarına yakın bir kod var infer(t u):; bulmak için " tCheck r (App f a) =" araması yapın . Daha eksiksiz ama yine de basit bir uygulama için Morte'nintypeWith kontrol edebilirsiniz .
asukasz Lew

1
@ AsukaszLew Yazılan ve türlenmemiş dönüştürme sorunu, 2 tip teori formülasyonunu ilişkilendiren iyi bilinen açık bir sorudur ve oldukça yakın zamanda çözülmüştür: pauillac.inria.fr/~herbelin/articles/…
cody

Bu demek yapar ? ut
jonaprieto
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.