Russelli tip teorisi ve tip sistemleri arasındaki ilişki


12

Kısa süre önce Russelli tür teorisi ile tür sistemleri arasında, örneğin Haskell'de bulunan bir tür ilişki olduğunu fark ettim. Aslında, Haskell'deki türler için bazı gösterimlerin tür teorisinde öncüleri olduğu görülmektedir. Ancak, IMHO, 1908'deki Russell motivasyonu Russell'ın paradoksundan kaçınmaktı ve bunun bilgisayar bilimindeki tip sistemleri ile nasıl ilişkili olduğundan emin değilim.

Russell'ın paradoksu, örneğin, belirli bir dilde iyi bir tip sistemimiz olmasaydı, endişelenmemiz gereken bir biçimde mi yoksa başka bir şey mi?

Yanıtlar:


8

Programlama dilleri anlamında ve Russell anlamında `` tip teorisi '' birbiriyle yakından ilişkilidir .. Aslında, bağımlı tip teorisinin modern alanı matematik için yapıcı bir temel sağlamayı amaçlamaktadır. matematik Coq, NuPRL veya Agda gibi ispat asistanlarında yapılır, bu sistemlerde yapılan ispatlar sadece "resmileştirilebilir" değil, aslında tamamen resmi ve makine tarafından kontrol edilir. Taktik ve diğer ispat otomasyon tekniklerini kullanarak bunları ispat etmeye çalışırız sistemleri "yüksek seviye" ve böylece gayri resmi matematiğe benzer, ancak her şey kontrol edildiğinden, doğruluk konusunda çok daha iyi garantilerimiz var.

Buraya bakın

Sıradan programlama dillerindeki türler daha sınırlı olma eğilimindedir, ancak meta teori aynıdır.

Russell'ın paradoksuna benzer bir şey, bağımlı tip teorisinde önemli bir konudur. Özellikle,

Type : Type

genellikle çelişkiye yol açar. Evrenleri yuvalayarak Coq ve benzeri işler

Type_0 : Type_1

ancak Coq'da varsayılan olarak bu sayılar normalde programcı için önemli olmadıklarından örtüktür.

Bazı sistemlerde (Agda, Idris), type in type kuralı derleme bayrağıyla etkinleştirilir. Mantıkların tutarsız olmasını sağlar, ancak genellikle keşif programlamayı / kanıtlamayı kolaylaştırır.

Daha anaakım dillerde bile, Russell'ın paradoksu zaman zaman ortaya çıkar. Örneğin, Haskell'de, Russell'ın emsalsizliği ve açık tip vakayı birleştiren paradoksunun kodlanması mümkündür, bu da tip seviyesinde bile özyineleme ile farklı terimler oluşturmanıza izin verir . Haskell `` tutarsız '' (her zamanki gibi bir mantık olarak yorumlandığında), istisnalardan bahsetmeden, hem tip hem de değer seviyesi yinelemesini desteklediğinden, daha azı, bu sonuç oldukça ilginçtir.


Ayrıntılı cevabınız için teşekkürler - kanıtlar geldiği sürece, C ++ veya Java gibi zorunlu dillerde programların doğruluğunu kanıtlamak için hala bir araç yoktur, değil mi? Ellerimi bunlardan birine koymak isterdim ... Bunun tam bir teğet olduğunu anlıyorum. Coq ve Agda'yı biliyorum, ancak C ++ veya Java ile yazılmış programların doğruluğunu kanıtlamak için doğru araçlar değildi.
Frank

3
bazı araçlar var. C için birkaç, Java için birçok ve Ada için ton. Örneğin, bakınız: Neden (Java, C, Ada), Krakatoa (Java) veya SPARK (çok iyi takımlara sahip Ada altkümesi). C ++ için olsa da, çok fazla değil. Ayrıca ilginizi çekebilir YNot (Coq DSL).
Philip JF

3

Russell'ın motivasyonu konusunda haklısın. Onun paradoksu, sınırsız anlama aksiyomlarını kabul eden tüm kümeler teorilerini şu etkiye boğar: herhangi bir öneri işlevi bir seti, yani işlevi yerine getiren tüm varlıkların setini belirler. Bu kusura sahip olan kümelerin teorileri veya bu kümelere dayanan Cantor'un naif küme teorisi ve Frege'nin Grundgesetze sistemi (özellikle: aksiyom 5) idi.

Türler özel tür kümeler olarak kabul edildiğinden, eğer dikkat edilmezse, benzer bir paradoks bir tür sisteme girebilir.Bununla birlikte, böyle bir kaderi olan herhangi bir tür sisteminin farkında değilim. Kilise'nin 30'lu yıllarda lambda hesabı formüle etme konusundaki ilk girişimlerini hatırlayabiliyorum, ki bu tutarsız (Kleene-Rosser Paradox) olduğu ortaya çıktı, ancak bu ne türlere bağlıydı, ne de Russell'ın paradoksuyla ilgili değildi.

Güncelleme : Sorunuza gerçek bir cevap için Philip'in yanıtına bakın.


1
Cevabınız için teşekkürler. Russell paradoksundan kaçınmak için muhtemelen a-la-Russell türlerine alternatifler vardır. Bu alternatif çözümlerden herhangi birinin bilgisayar dillerine katkıda bulunmak için ilginç bir şeyi var mı? Sıradan tipler, kodun bölümleri arasındaki sözleşmeleri açıkça belirtmek ve hatta bundan önce programlara anlambilim kazandırmak için çok yararlıdır. Türlerden başka bir şeyle elde edilebilecek başka anlambilim var mı? (Bunun ne olacağı hakkında hiçbir fikrim yok :-)
Frank

1
Evet, birçok alternatif (Quine'nin NF, ZFC, vb.), Ancak temel kriz ve programlama dilleri arasında doğrudan bir bağlantı göremiyorum. Martin Lof'un tür teorisini bir programlama dili olarak görürseniz, orada sezgeciliğe uzanan bir bağlantı olabilir. Programlama dillerinin anlambilimi ile ilgili olarak, Kripke (veya olası dünyalar) semantiğine sahip PDL (Önerme Dinamik Mantık) gibi bazı temel diller vardır. Ama tipler bana öyle basit geliyor ki, sadece perde arkasında olabilirler :)
Hunan Rostomyan

1
Ancak türler bir tür serseri: onları istiyor ve ihtiyacınız var, ancak bunları belirtmek istemezsiniz (bu nedenle, IMHO, Haskell veya Ocaml gibi dillerde neden tür çıkarım sistemlerine sahibiz (bu dilleri seviyorum)). Spektrumun diğer ucunda, Python çok sezgisel hissediyor ve o dildeki türler hakkında çok fazla endişelenmemek hoş (ve kodlama süresi açısından verimli). Belki tür çıkarımı her iki dünyanın da en iyisidir - ama bu mühendis konuşuyor. Ben sadece matematik başka bir önemli kavram (türleri gibi) bilgisayar bilimi katkıda bulunabilir hayal ediyordum :-)
Frank

1
@Frank her zaman ben statik türleri (çoğunlukla Ruby) olmadan bir dil kullanmak nefret çünkü, deneyim nefret önlenebilir çalışma zamanı hataları. Yani, bu çoğunlukla bir tat meselesi gibi görünüyor. Güçlü tür çıkarımın size her iki dünyanın en iyisini verebileceğini kabul ediyorum. Muhtemelen Scala'yı bu kadar çok seviyorum.
Raphael

Ben ima gibi görünüyor gibi türleri "otomatik" olmaması, çalışma zamanı hatalarına yol açar ikna değil :-) Python hiç bir sorun vardı.
Frank

3

Python'dan bahsettiğinizden bu soru tamamen tip-teorik değildir. Bu yüzden tipler hakkında daha geniş bir perspektif vermeye çalışıyorum. Türler farklı insanlar için farklı şeylerdir. En az 5 farklı (ancak ilgili) tür kavramı topladım:

  1. Tip sistemleri mantıksal sistemler ve küme teorileridir.

  2. Bir tür sistemi, bir türü hesaplanan her bir değerle ilişkilendirir. Bu değerlerin akışını inceleyerek, bir tür sistemi herhangi bir tür hatasının oluşmayacağını kanıtlamaya veya sağlamaya çalışır.

  3. Tür, o değer için olası değerleri belirleyen gerçek değerli, tamsayı veya Boole gibi çeşitli veri türlerinden birini tanımlayan bir sınıflandırmadır; bu tür değerler üzerinde yapılabilecek işlemler; verinin anlamı; ve bu türdeki değerlerin depolanma şekli

  4. Soyut veri türleri, üst düzey dillerde veri soyutlamaya olanak tanır. ADT'ler genellikle modül olarak uygulanır: modülün arayüzü ADT işlemlerine karşılık gelen prosedürleri bildirir. Bu bilgi gizleme stratejisi, modülün uygulanmasının istemci programlarını bozmadan değiştirilmesine izin verir.

  5. Programlama dili uygulamaları, değerlerin ihtiyaç duyduğu depolamayı seçmek için değer türlerini ve değerler üzerindeki işlemler için algoritmaları kullanır.

Alıntılar Wikipedia'dan geliyor, ancak bir ihtiyaç ortaya çıktığında daha iyi referanslar sağlayabilirim.

Tip-1, Russel'in çalışmasından doğdu, ancak bugün sadece paradokslardan korunmuyorlar: homotopi tip teorisinin yazılan dili, matematiği resmi, makine tarafından anlaşılabilir bir dilde kodlamanın yeni bir yoludur ve insanların temelleri anlaması için yeni bir yoldur Matematik ("Eski" yol aksiyomatik bir set teorisi kullanarak kodlama).

Tip 2-5, çeşitli ihtiyaçlardan programlamada ortaya çıktı: hatalardan kaçınmak, veri yazılımı tasarımcıları ve programcılarının birlikte çalıştığı sınıflandırmak, büyük sistemler tasarlamak ve programlama dillerini verimli bir şekilde uygulamak.

C / C ++, Ada, Java, Python'daki tip sistemleri Russel'in çalışmasından ya da hatalardan kaçınma arzusundan ortaya çıkmadı. Orada farklı veri türlerini tanımlama (örneğin, "soyadı bir sayı değil bir karakter dizgisidir"), yazılım tasarımını modüler hale getirme ve veriler için en düşük düzeyli sunumları en iyi şekilde seçme ihtiyaçları ortaya çıktı. Bu dillerde tip-1 veya tip-2 yoktur. Java, tür sistemi kullanarak program doğruluğunu kanıtlamakla değil, dikkatli bir dil tasarımı (işaretçi aritmetiği yok) ve çalışma zamanı sistemi (sanal makine, bayt kodu doğrulaması) ile hatalardan göreceli güvenlik sağlar. Java'daki yazım sistemi ne mantıksal bir sistem ne de küme kuramıdır.

Bununla birlikte, Agda programlama dilinde tip sistemi Russel'in tip sisteminin modern bir çeşididir (daha sonraki çalışmalara veya Per Martin-Lof ve diğer matematikçilere dayanmaktadır). Agda'daki tip sistemi, programın matematiksel özelliklerini ve bu özelliklerin ispatlarını ifade etmek için tasarlanmıştır, mantıklı bir sistem ve bir küme teorisidir.

Burada siyah-beyaz bir ayrım yoktur: birçok dil arasında uyum sağlar. Örneğin, Haskell dilinin tip sisteminin Russel'in çalışmasında kökleri vardır, basitleştirilmiş bir Agda'nın sistemi olarak görülebilir, ancak matematiksel açıdan, mantıksal bir sistem veya küme teorisi olarak bakıldığında tutarsızdır (kendi kendine çelişkilidir).

Bununla birlikte, Haskell programlarını hatalardan korumak için teorik bir araç olarak oldukça iyi çalışıyor. Belirli özellikleri ve bunların kanıtlarını kodlamak için türleri bile kullanabilirsiniz, ancak tüm özellikler kodlanamaz ve programcı cesareti kırılmış hack'ler kullanıyorsa kanıtlanmış özellikleri yine de ihlal edebilir.

Scala'nın tip sistemi Russel'in çalışmasından ve Agda'nın mükemmel kanıt dilinden daha da uzaktır, ancak Russel'in çalışmasında hala kökleri vardır.

Tip sistemleri bunun için tasarlanmamış sanayi dillerinin özelliklerinin kanıtlanmasına gelince, birçok yaklaşım ve sistem vardır.

İlginç ama farklı yaklaşımlar için bkz. Coq ve Microsoft Boogie araştırma projesi. Coq, Coq programlarından zorunlu programlar oluşturmak için tip teorisine dayanır. Boogie, zorunlu programların özelliklerle açıklanmasına ve bu özelliklerin Coq.

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.