Neden iki nokta üst üste bir değerin bir türe ait olduğunu belirtmek için?


19

Pierce (2002) sayfa 92'deki yazma ilişkisini şu şekilde tanıtır :

"T: T" yazılan aritmetik ifadeler için yazma ilişkisi, terimlere tür atayan bir dizi çıkarsama kuralıyla tanımlanır

ve dipnotta sembolü genellikle: yerine kullanılır. Sorum basitçe tip kuramcılarının neden kullanmayı tercih ettikleri: over ? Bir tür olursa değerlerinin bütünüdür o zaman yazma çok mantıklı , ihtiyaç duyulan yeni gösterimde.TtT

Bu, bazı cs yazarlarının gösterimi kötüye kullandığını ve yazması gerektiğini düşündüğü gibi tercih etmesine benzer mi?3n2=O(n2)3n2O(n2)


7
Üyelik yüklemi doğru veya yanlış olabilirken, yazım beyanı genellikle doğru olarak bildirilen olgusal bir ifade olarak yorumlanır veya gerçeği tamamen sözdizimsel yollarla türetilebilir . Bunu, sözdizimsel bir üyelik yönteminin yeterli olmadığı asal bir sayı olmakla karşılaştırın. xX x:X
Musa Al-hassy

4
@ MusaAl-hassy: Olanların yanlış bir şekilde temsil edilmesi. Bu doğru olarak ilan edilmemiştir , çünkü bu , örneğin, " false: int" : " beyan" edebileceğim anlamına gelir . Yargının zorunlu olarak “tamamen sözdizimsel yollarla” türetilmesi gerekmemektedir, örneğin ailelerle bir kategorinin iç tip teorisi söz konusu olduğunda.
Andrej Bauer


2
@ MusaAl-hassy'nin yorumuna eklemek için , Bob Constable'ın hesaplama tipi teorisinde Stuart Allen, Bob Harper ve diğerleri, bir üyelik yüklemine daha yakın olduğu için kararları yazmak için rutin olarak kullanılır (bkz. Bu konuşma, slayt 25 , Örneğin).
xrq

3
Elbette de gösterimin kötüye kullanılmasıdır ve gerçekten λ n .3 n 2O ( λ n . N 2 ) yazılmalıdır ? (Matematikçiler n 3 n 2O ( n n 2 ) 'yi tercih edebilirler .)3n2O(n2)λn.3n2O(λn.n2)n3n2O(nn2)
Oscar Cunningham

Yanıtlar:


12

Çünkü kolonun sağında olan bir küme olmak zorunda değildir ve kolonun solunda bulunanlar mutlaka bu kümenin bir üyesi değildir.

Tip teorisi 20. yüzyılın başlarında matematiğin temeline bir yaklaşım olarak başladı . Bertrand Russel , saf küme teorisinde bir paradoks keşfetti ve bu (ve diğer) paradokslardan kaçınmak için küme teorisinin ifade gücünü sınırlamanın bir yolu olarak tip teorisi üzerinde çalıştı. Yıllar boyunca Russel ve diğerleri birçok tür teorisi tanımladılar. Bazı tür teorilerinde, türler belirli özelliklere sahip kümelerdir, ancak diğerlerinde farklı bir canavar türüdür.

Özellikle, birçok tip teorisi sözdizimsel bir formülasyona sahiptir. Bir şeyin türüne sahip olmasına neden olan kurallar vardır. Yazma kuralları bir teori için temel olarak kullanıldığında, yazım kurallarının söylediklerini, ek dış bilgiler uygulayarak çıkarımdan ayırt etmek önemlidir. Yazma kuralları bir kanıt teorisi için bir temel oluşturduysa bu özellikle önemlidir: klasik mantık ile küme teorisine dayanan teoremler ve seçim aksiyomu yapıcı bir mantıkta olabilir veya olmayabilir. Bu alandaki seminal kağıtları biri Kilise'nin 'ın Türlerinin Basit Teorisi A Formülasyon (1940)

Belki de türler ve kümeler arasındaki ayrımın en belirgin olduğu, kümeler için en temel kuralın, yani iki kümenin aynı elemanlara eşit olması durumunda eşit olması, genellikle türler için geçerli olmamasıdır. Bkz burada Andrej Bauer'in cevabı ve ilgili soru üzerine onun cevabını Bazı örnekler için. Bu ikinci konu okumaya değer başka cevaplar da var.

Tipik bir analizde, türlerin küme olduğunu söylemek aslında türlere bir anlambilim kazandırmaktır. Bir analize tip-teorik anlambilim vermek önemsiz değildir. Örneğin, işlevleri olan bir dil tanımladığınızı varsayalım. Ne tür bir fonksiyon tipidir? Toplam fonksiyonlar, set teorisi 101'de öğretildiğimiz gibi grafikleri ile belirlenir. Peki ya kısmi fonksiyonlar? Sonlandırmayan tüm işlevlere aynı anlambilimi vermek istiyor musunuz? Bu soruyu cevaplayana kadar türleri özyinelemeli işlevlere izin veren bir hesap için kümeler olarak yorumlayamazsınız. Programlama dillerine veya hesaplamalara anlamsal bir anlambilim vermek 1970'lerin başında zor bir sorundu. Burada seminal kağıdıdır bilgisayar dilleri için bir matematiksel semantik doğru (1971) tarafındanDana Scott ve Christopher Strachey . Haskell Vikikitap'taki kitaplar konunun iyi bir sunum var.

Yukarıda yazdığım gibi, cevabın ikinci kısmı, türlere set-teorik bir anlam vermeyi başarabilseniz bile, kolonun solundaki şey her zaman setin bir unsuru değildir. Değerlerin türleri vardır, ancak ifadeler ve değişkenler gibi başka şeyler de vardır . Örneğin, yazılan bir programlama dilindeki bir ifade, sonlandırılmasa bile bir türe sahiptir. Sen birbiri ile karıştırmak için istekli olabilir integerve Z , ancak (x := 0; while true; do x := x + 1; x)unsuru değildir Z .

Tipler için kolon gösteriminin ne zaman ortaya çıktığını bilmiyorum. Artık anlambilimde standarttır ve programlama dillerinde yaygındır, ancak ne Russel ne de Church bunu kullanmamıştır. Algol kullanmadı, ama Algol'dan ilham alan yoğun bir dil olan Pascal 1971'de kullandı. Şüphesiz, ilk değildi, çünkü 1970'lerin başlarındaki birçok teori makalesi gösterimi kullanıyor, ama bilmiyorum erken kullanım. İlginç bir şekilde, bu, programlama ve mantıktan türlerin kavramlarının birleştirilmesinden kısa bir süre sonraydı - Simon Martini, Programlama Dillerindeki Çeşitli Türlerde gösterdiği gibi , 1960'lara kadar programlama dillerinde “tip” olarak adlandırılan dil yerelden geldi sözcüğün kullanımı, tür teorisinden değil.


37

Temel nedeni kolon notasyonu tercih t:T üyelik ilişkisi için tT çünkü üyelik ilişkisi yanıltıcı olabilir yani türleri (sadece) koleksiyonları değildir .

[ Ek: Ben tarihsel teori yazın unutmamalıdır edilmiştir kullanılarak yazılmıştır . Tip Martin-LOF anlayışı yapıcı yakalama setleri gerekiyordu ve zaten Russel ve Whitehead kullanılan ϵ sınıf memebrship için. Şu anın izini sürmek ilginç olurdu : den daha yaygın hale geldi .]

Bir tür, belirli bir yapı türünü, yani belirli bir yapıya sahip nesnelerin nasıl yapılacağını, bunların nasıl kullanılacağını ve bunlarla ilgili denklemlerin neler olduğunu açıklar.

Örneğin, A×B ürün tipi , sipariş edilen çiftlerin nasıl yapılacağını açıklayan giriş kurallarına ve A×B herhangi bir öğesinden birinci ve ikinci bileşenleri yansıtabileceğimizi açıklayan eleme kurallarına sahiptir . Tanımı A×B gelmez değil "... bütün toplanması" kelimeleri ile başlar ve ne de "tüm unsurları gibi herhangi bir yerinde bir şey söylemek yapar A×B çiftleri vardır" (ama şu tanımından o her eleman A×B olduğu önermebir çifttir). Constrast, set-teorik tanımı X×Y bir "tüm sıralı çiftlerinin grubu ..." olarak belirtilmiştir.

Gösterimde t:T gerçeğini belirtir t tarafından açıklanan yapıya sahiptir T .

A tipi T onun ile karıştırılmamalıdır değildir uzantısı türü tüm nesnelerin topluluğudur, T . A tipi olan olmayan bir grup, bir taşıyıcı ile belirlenen değildir gibi, kendisine ait uzantı ile belirlenir. Ayrıca, iki türün aynı uzantıya sahip olduğu, ancak farklı olduğu görülebilir:

  1. İkiden büyük tüm çiftlerin türü: Σ(n:N).isprime(n)×iseven(n)×(n>2) .
  2. İkiden küçük tüm tek primerlerin türü: Σ(n:N).isprime(n)×isodd(n)×(n<2) .

Her ikisinin uzantısı boştur, ancak aynı tür değildir.

Tip-teorik : ve set-teorik arasında daha fazla fark vardır . Bir nesne a dizi teoride bağımsız ait olduğu ayarlar ne var ve birkaç setleri ait olabilir. Bunun aksine, en fazla türü teori yazma teklik tatmin: eğer t:T ve t:U sonra TU . Ya da farklı bir şekilde ifade etmek gerekirse, bir tür teorik yapı t tam olarak bir T tipine sahiptir ve aslında t (sadece belirli bir şekilde belirlenmiş) türü olmadan sadece bir nesneye sahip olmanın hiçbir yolu yoktur .

Diğer bir farklılık küme kuramı biz olmasıdır inkar gerçeği olduğunu aA yazarak ¬(aA) veya aA . Bu, tip teorisinde mümkün değildir, çünkü t:T , tip teorisi kuralları kullanılarak türetilebilen bir yargıdır , ancak tip teorisinde bir şeyin türetilmediğini belirtmemize izin verecek hiçbir şey yoktur. Bir çocuk LEGO bloklarından bir şey yaptığında, inşaatı göstermek için ebeveynlerine gururla koşarlar, ancak yapmadıklarını göstermek için asla ebeveynlerine koşmazlar.


1
Andrej, harika cevap. Kolon notasyonunun tarihi kökenini biliyor musunuz?
Andreas Rossberg

Ne yazık ki bilmiyorum. Kilise'nin tip teorisi indisler, yani kullanılan tipi bir değişken için a'dan . Russell ve Whitehead , bir sınıfa ait olma ilişkisinde ϵ kullandılar . Algol 68 türleri değişken adlarının önüne koyar. 1972 Martin-Löf tipi teorisi kullanımları ve yapar 1984 versiyonu , ancak [1994 versiyonu] bir kolon kullanılmaktadır. xααϵ
Andrej Bauer

1
Yani argümanınız bir türün bir grup gibi mi olduğudur? Bu mantıklıdır, ancak gösterimi soyut cebirde yaygındır. gG
Björn Lindqvist

2
@ BjörnLindqvist: Bu cevabın tam hikaye olduğunu sanmıyorum. Hatta "kullanmak standart matematik " olduğunu göstermek için f bir fonksiyondur S için T . Neden " f ( S T ) " gibi bir şey kullanmadık? Sadece yapmadık. Tabii ki, belirli tip teorilerin bir sunumunda " " nin kullanılmasından kaçınmak için iyi bir neden var, çünkü ZFC tarafından öğretilen insanların bunun ZFC setleri gibi olduğunu düşünmelerini istemiyoruz. durum. Ancak bu, kolonun daha önce olmadığı anlamına gelmez.f:STfSTf(ST)tip teorisi popüler olmadan çok önce yaygın olarak kullanılmaktadır.
user21820

1
@ user21820 "Neden ?" Sadece tahmin etmek: çünkü matematikçiler asla S T'yi bir set olarak düşünmemişlerdir . Bu gösterimin tarihi için buraya bakınız . F : S T'den gelen kolonun tip teorisyenleri için ilham kaynağı olduğundan şüpheliyim . Daha olası tip teorisyenler kolonunun bir ASCII karakteri olmadığı gerçeği ile ilgilidir . f(ST)STf:ST
Michael

5

Björn,

Muhtemelen daha erken bir referans var, ancak bir kere, kolon Pascal programlama dilinde kullanıldı:

Pascal için ilk Google hit


2
Daha önce kullanılan herhangi bir programlama dili yok :muydu?
Andrej Bauer

@AndrejBauer, bu muhtemel gerçeğe karşı korunmak için "Muhtemelen daha erken bir referans var ama ..." yazdım.
Bjørn Kjos-Hanssen

@AndrejBauer Algol yoktu. Oldu :1970'lerden önce teori kağıtları kullanılan?
Gilles 'SO- şeytan olmayı bırak'

1
Fortran var REAL :: xama bunun Pascal'dan önce gelip gelmediğini bilmiyorum.
Michael

1
@Michael Fortran, Pascal'dan daha erken geldi (yaklaşık 1955'e karşı 1970), ancak bence bu özel sözdizimi yalnızca Fortran 90'da tanıtıldı, bu yüzden Pascal'dan çok daha geç. Örneğin buraya bakın fortranwiki.org/fortran/show/Modernizing+Old+Fortran
Federico Poloni
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.