Hindley-Milner'in hangi kısmını anlamıyorsunuz?


851

Ben yemin bir orada kullanılan tişört ölümsüz sözleri içeren satılık:


Hangi bölümü

Hindley'nin-Milner

Eğer do not anladın mı?


Benim durumumda, cevap ... hepsi olurdu!

Özellikle, Haskell gazetelerinde genellikle böyle bir gösterim görüyorum, ancak bunların ne anlama geldiğine dair hiçbir fikrim yok. Matematiğin hangi dalında olması gerektiği hakkında hiçbir fikrim yok.

Tabii Yunan alfabesinin harflerini ve "∉" gibi sembolleri (genellikle bir şeyin bir kümenin öğesi olmadığı anlamına gelir) tanıyorum.

Öte yandan, daha önce hiç "⊢" görmedim ( Wikipedia bunun "bölüm" anlamına gelebileceğini iddia ediyor ). Ayrıca burada vinculum kullanımını bilmiyorum. (Genellikle, bir kesri belirtir, ancak burada böyle görünmüyor .)

Birisi en azından bana bu sembol denizinin ne anlama geldiğini anlamak için nereden başlayacağımı söyleyebilseydi, bu yararlı olurdu.


8
Eğer varsa edilir algoritmasının iyi bir açıklama, şimdiye kadar buldum iyi seyir için Shriram Krishnamurthi en bölüm 30 olduğunu Programlama Dilleri: Uygulama ve Yorumlama (! Lisanslı CC).
laslowh

2
@laslowh Teşekkürler! Ben okuyorum. Daha yeni sürüm: cs.brown.edu/courses/cs173/2012/book/book.pdf
SnowOnion

Yanıtlar:


652
  • Yatay çubuk "[yukarıdaki] demek olduğunu ima [aşağıdaki]".
  • Varsa birden ifadeler [yukarıda] içinde, daha sonra bunları dikkate anded birlikte; [yukarı] garanti altına almak için [yukarı] yukarıdakilerin tümü doğru olmalıdır.
  • :araçlar türü vardır
  • aracı olup . (Benzer şekilde " içeride değil" anlamına gelir.)
  • Γgenellikle bir çevreye veya bağlama atıfta bulunmak için kullanılır ; bu durumda, bir tanımlayıcıyı türüyle eşleştirerek bir tür ek açıklama kümesi olarak düşünülebilir. Dolayısıyla x : σ ∈ Γçevrenin tipe sahip Γolduğu gerçeği anlamına gelir .xσ
  • kanıtladığı veya belirlediği gibi okunabilir . Γ ⊢ x : σortamın tür Γolduğunu belirlediği anlamına gelir .xσ
  • ,bir yoludur dahil bir ortama özel ek varsayımlar Γ.
    Bu nedenle, Γ, x : τ ⊢ e : τ'bu ortamı demektir Γ, ek, ağır basan varsayımıyla xtürüne sahipτ , kanıtlıyor etürü vardır τ'.

İstendiği gibi: operatör önceliği, en yüksekten en düşüğe:

  • Gibi farklı dil özgü çatı ve çatı ve mixfix operatörleri λ x . e, ∀ α . σve τ → τ', let x = e0 in e1işlevi uygulama için, ve boşluk.
  • :
  • ve
  • , (Sol-birleştirici)
  • birden çok önermeyi ayıran boşluk (çağrışımsal)
  • yatay çubuk

19
Operatörlerin öncelik kuralları nelerdir?
Randomblue

:ve çok benzerler, çünkü bir şeyin başka bir şeyde yer aldığını kastediyorlar - bir küme bir anlamda öğeler içeriyor ve bir tür bir anlamda değerler içeriyor. Kritik fark, x ∈ Sbir kümenin Stam anlamıyla bir eleman içerdiği anlamına xgelirken , içeriğin bağlam içinde yaşamak için çıkarılabileceği Γ ⊢ x : Tanlamına gelir . Bunu göz önünde bulundurarak, Var kuralı şöyledir: »x kelimenin tam anlamıyla bağlamda yer alıyorsa, (önemsiz olarak) bundan çıkarılabilir«. xTΓ
David

@Randomblue Her yere parantez ekleyerek sembollerin önceliğini açıkça belirttim, örneğin (Γ,(x:τ))⊢(x:σ), bkz .
Overleaf.com/read/ddmnkzjtnqbd#/61990222

327

Bu sözdizimi, karmaşık görünse de, aslında oldukça basittir. Temel fikir biçimsel mantıktan gelir: tüm ifade, üst yarısı varsayımlar, alt yarısı sonuçtur. Yani, en iyi ifadelerin doğru olduğunu biliyorsanız, alt ifadelerin de doğru olduğu sonucuna varabilirsiniz.

Semboller

Akılda tutulması gereken başka bir şey, bazı harflerin geleneksel anlamları olduğu; özellikle, you're içinde bulunduğunuz "bağlam" ı temsil eder - yani gördüğünüz diğer şeylerin türü. Yani Γ ⊢ ..., " ...her ifadenin türlerini bildiğinizde ifade" anlamına gelir Γ.

Sembol aslında bir şey kanıtlamak anlamına gelir. Yani Γ ⊢ ..." ...Bağlamda kanıtlayabilirim Γ. Bu ifadelere tip yargısı da denir.

Akılda tutulması gereken başka bir şey: matematikte, tıpkı ML ve Scala gibi , tipin x : σolduğu anlamına gelir . Haskell gibi okuyabilirsiniz .xσx :: σ

Her kuralın anlamı

Bunu biliyoruz eğer: Yani bu bilerek ilk ifadesi anlaşılması kolay hale x : σ ∈ Γ(olduğunu, xbazı türüne sahip σbazı bağlamda Γ, o zaman biz biliyoruz) Γ ⊢ x : σ(içinde olduğunu Γ, xtürü vardır σ). Gerçekten, bu size süper ilginç bir şey söylemiyor; size bağlamınızı nasıl kullanacağınızı anlatır.

Diğer kurallar da basit. Örneğin, alın [App]. Bu kural iki koşul vardır: e₀Bazı türünden bir işlevdir τbazı tipine τ've e₁türünde bir değerdir τ. Şimdi de uygulayarak alacak yazdıklarınıza biliyorum e₀için e₁! Umarım bu bir sürpriz değildir :).

Bir sonraki kuralın daha yeni bir sözdizimi var. Özellikle, Γ, x : τsadece oluşan bağlam Γve yargılama anlamına gelir x : τ. Dolayısıyla, değişkenin xbir türü olduğunu τve ifadenin ebir türü τ'olduğunu bilirsek, alan xve döndüren bir işlevin türünü de biliriz e. Bu bize bir fonksiyonun ne tür olduğunu ve hangi tipte geri döndüğünü anladıysak ne yapacağımızı söyler, bu yüzden de şaşırtıcı olmamalı.

Bir sonrakinde letifadeleri nasıl kullanacağınız anlatılmaktadır . Bazı ifadesi biliyorsanız e₁bir türü olan τuzun olduğunca xbir türü olan σ, daha sonra letlokal olarak bağlandığı ifade xtüründe bir değere σyapacak e₁bir türü var τ. Gerçekten, bu size bir let ifadesinin aslında bağlamı yeni bir bağlama ile genişletmenize izin verdiğini söyler - ki tam olarak ne letyapar!

[Inst]Kural alt yazarak ilgilenir. Bir değer türüne sahipseniz σ've bunun bir alt türü σ( kısmi bir sıralama ilişkisini temsil eder) ise, o ifadenin de tür olduğunu söyler σ.

Son kural genelleme türleri ile ilgilidir. Hızlı bir kenara: serbest değişken, bir ifade içine bir deyim veya lambda tarafından sokulmayan bir değişkendir; Bu ifade artık bazı değişken varsa söylüyor onun context.The kuraldan serbest değişkenin değerine bağlıdır αolduğu değil senin bağlamda hiçbir şeye "özgür", o zaman kimin herhangi ifadesi biliyor tip söylemek güvenlidir herhangi bir değeri e : σiçin bu tür olacaktır .α

Kurallar nasıl kullanılır?

Peki, şimdi sembolleri anladığınıza göre, bu kurallarla ne yaparsınız? Farklı değerlerin türünü bulmak için bu kuralları kullanabilirsiniz. Bunu yapmak için ifadenize bakın (deyin f x y) ve ifadenizle eşleşen bir sonuca (alt kısım) sahip bir kural bulun. "Hedefinizi" bulmaya çalıştığınız şeyi diyelim. Bu durumda, biten kurala bakarsınız e₀ e₁. Bunu bulduğunuzda, şimdi bu kuralın çizgisinin üzerindeki her şeyi kanıtlayan kurallar bulmalısınız. Bunlar genellikle alt ifadelerin türlerine karşılık gelir, bu yüzden aslında ifadenin bazı kısımlarında yinelenirsiniz. Bunu sadece kanıt ağacınızı bitirene kadar yaparsınız, bu da ifadenizin türünün bir kanıtıdır.

Yani tüm bu kurallar tam olarak - ve her zamanki matematiksel olarak bilgiçliksel ayrıntıda: P - ifade türlerinin nasıl belirleneceği.

Şimdi, Prolog'u kullandıysanız, bu tanıdık gelmelidir - aslında prova ağacını bir insan Prolog yorumlayıcısı gibi hesaplıyorsunuz. Prolog'un "mantık programlama" olarak adlandırılmasının bir nedeni var! HM çıkarsama algoritmasına tanıtıldığım ilk yolun Prolog'da uygulanmasıyla da bu önemlidir. Bu aslında şaşırtıcı derecede basittir ve olanları netleştirir. Kesinlikle denemelisin.

Not: Muhtemelen bu açıklamada bazı hatalar yaptım ve birisi onları işaret ederse çok seveceğim. Aslında bunu birkaç hafta içinde sınıfta ele alacağım, o zaman kendinden daha emin olacağım: P.


5
\ alpha, normal olmayan bir değişken değil, serbest olmayan bir tür değişkenidir. Bu yüzden genelleme kuralını açıklamak için çok daha fazla şey açıklanmalıdır.
nponeccop

2
@ nponeccop: Hmm, iyi bir nokta. Aslında o kuralı daha önce görmedim. Düzgün açıklamama yardım eder misiniz?
Tikhon Jelvis

8
@TikhonJelvis: Oldukça basit aslında, bu (varsayarak genellemek sağlar Γ = {x : τ}) λy.x : σ → τiçin ∀ σ. σ → τdeğil, hiç ∀ τ. σ → τ, çünkü τserbest değişkendir Γ. HM hakkındaki Wikipedia makalesi bunu gayet güzel açıklıyor.
Vitus

7
Cevabın ilgili kısmının [Inst]biraz yanlış olduğuna inanıyorum . Bu şimdiye kadar sadece benim anlayışım, ama [Inst]ve [Gen]kurallarındaki sigmalar tiplere değil, tip şemalarına atıfta bulunuyor . Dolayısıyla operatör, OO dillerinden bildiğimiz gibi alt yazmayla ilgili olmayan kısmi bir sıralamadır. Gibi polimorfik değerlerle ilgilidir id = λx. x. Böyle bir işlev için tam söz dizimi olacaktır id = ∀x. λx. x. Şimdi, açıkça, kullanılmayan bir id2 = ∀xy. λx. xyere sahip olabiliriz y. Sonra kuralın söylediği id2 ⊑ idşey budur [Inst].
Ionuț G. Stan

71

eğer birisi en azından bana bu sembol denizin ne anlama geldiğini anlamak için nereden başlayacağımı söyleyebilseydi

Yargılama ve türetmeler yoluyla mantık tarzı hakkında " Programlama Dillerinin Pratik Temelleri ", bölüm 2 ve 3'e bakınız. Kitabın tamamı artık Amazon'da.

Bölüm 2

Endüktif Tanımlar

Tümevarımlı tanımlar, programlama dillerinin çalışılmasında vazgeçilmez bir araçtır. Bu bölümde tümevarımsal tanımların temel çerçevesini geliştirecek ve kullanımlarına bazı örnekler vereceğiz. Tümevarımlı bir tanım, çeşitli biçimlerdeki yargıları veya iddiaları türetmek için bir dizi kuraldan oluşur. Kararlar, belirli bir türde bir veya daha fazla sözdizimsel nesne hakkında ifadelerdir. Kurallar, bir yargının geçerliliği için gerekli ve yeterli koşulları belirtir ve dolayısıyla anlamını tam olarak belirler.

2.1 Kararlar

Sözdizimsel bir nesne hakkında bir yargı ya da iddia kavramı ile başlarız . Aşağıdakiler gibi örnekler de dahil olmak üzere birçok yargı biçiminden yararlanacağız:

  • n nat - n doğal bir sayıdır
  • n = n1 + n2 - n , n1 ve n2'nin toplamıdır
  • τ türü - τ bir tür
  • e : τ - e ifadesi τ türünde
  • ev - e ifadesi v değerine sahiptir

Bir karar, bir veya daha fazla sözdizimsel nesnenin bir özelliğe sahip olduğunu veya birbiriyle ilişkili olduğunu belirtir. Mülk veya ilişkinin kendisine bir yargı formu denir ve bir nesnenin veya nesnelerin bu özelliğe sahip olduğu ya da bu ilişkide yer aldığı yargısının o yargı formunun bir örneği olduğu söylenir . Yargı biçimine yüklem de denir ve bir örneği oluşturan nesneler onun öznesidir . Biz yazma bir J ileri sürerek karar için J ait tutan bir . Yargı konusunu vurgulamak önemli olmadığında, (metin burada kesilir)


53

Hindley-Milner kurallarını nasıl anlayabilirim?

Hindley-Milner, bir programın (en genel) türünü, açık tür bildirimleri olmadan programın yapımından çıkarabileceğimizi gösteren sıralı hesap (doğal kesinti değil) biçiminde bir dizi kuraldır .

Semboller ve gösterim

İlk olarak, sembolleri açıklayalım ve operatör önceliğini tartışalım

  • 𝑥 bir tanımlayıcıdır (gayri resmi olarak bir değişken adı).
  • : anlamına gelir bir tür (gayri resmi olarak veya "is-a" örneği).
  • sig (sigma), değişken veya işlev olan bir ifadedir.
  • böylece 𝑥: 𝜎 okunur " 𝑥 is-a 𝜎 "
  • ∈ "öğesinin"
  • 𝚪 (Gamma) bir ortamdır.
  • (onaylama işareti) ileri sürmek anlamına gelir (veya kanıtlar, ancak bağlamsal olarak "ileri sürür " daha iyi okur.)
  • ⊦ Γ 𝑥 : σ böylece okunur "Γ, o 𝑥 iddia is-a σ "
  • 𝑒 , 𝜎 türünde gerçek bir örnektir (öğe) .
  • 𝜏 (tau) bir türdür: temel, değişken ( 𝛼 ), işlevsel 𝜏 → 𝜏 ' veya ürün 𝜏 × 𝜏' (ürün burada kullanılmaz)
  • 𝜏 → 𝜏 ' , 𝜏 ve 𝜏' nin potansiyel olarak farklı türler olduğu işlevsel bir türdür .
  • λ𝑥.𝑒 anlamına λ (lambda) bir bağımsız değişken alır anonim fonksiyonudur 𝑥 , ve bir ifade döner 𝑒 .

  • izin 𝑥 = 𝑒₀ içinde 𝑒₁ ekspresyonu araçlarının 𝑒₁ , ikame 𝑒₀ yerde 𝑥 görüntülenir.

  • , önceki elemanın, ikinci elemanın bir alt türü (gayri resmi olarak alt sınıf) olduğu anlamına gelir.

  • 𝛼 bir tür değişkenidir.
  • α.σ (tüm) tip, ∀ bağımsız değişken değişkenleri, bir α dönen σ ifade
  • serbest (𝚪) , dış bağlamda tanımlanan serbest tip değişkenlerinin element öğesi değildir. (Bağlı değişkenler ikame edilebilir.)

Çizginin üzerindeki her şey öncül, aşağıdaki her şey sonuçtur ( Per Martin-Löf )

Öncelik, örnek olarak

Kurallardan daha karmaşık örneklerden bazılarını aldım ve önceliği gösteren gereksiz parantezler ekledim:

  • 𝑥: 𝜎 ∈ 𝚪 yazılabilir (𝑥: 𝜎) ∈ 𝚪
  • 𝚪 ⊦ 𝑥 : 𝜎 yazılabilir 𝚪 ⊦ ( 𝑥 : 𝜎 )

  • 𝚪 ⊦ let 𝑥 = 𝑒₀ in 𝑒₁ : 𝜏 eşit olarak 𝚪 ⊦ (( let ( 𝑥 = 𝑒₀ ) in 𝑒₁ ): 𝜏 )

  • 𝚪 ⊦ 𝜆𝑥.𝑒 : 𝜏 → 𝜏 ' eşit olarak 𝚪 ⊦ (( 𝜆𝑥.𝑒 ): ( 𝜏 → 𝜏' ))

Daha sonra, beyan ifadelerini ve diğer önkoşulları ayıran geniş alanlar, bu tür bir önkoşullar kümesini gösterir ve son olarak önceliği sonuçtan ayıran yatay çizgi, öncelik sırasının sonunu getirir.

Kurallar

Bunu takip eden kuralların her biri gevşek bir yeniden ifade ve bir açıklama ile İngilizce yorumlardır.

Değişken

VAR Mantık Şeması

Verilen 𝑥 bir tür 𝜎 (sigma), 𝚪 (Gamma) 'nın bir elementidir, 𝚪
varsayımları 𝑥 bir 𝜎 sonucudur.

Başka bir deyişle, in'de 𝑥 türünün 𝜎 olduğunu biliyoruz çünkü 𝑥 𝜎 türünde.

Bu temel olarak bir totolojidir. Tanımlayıcı adı bir değişken veya işlevdir.

Fonksiyon Uygulaması

APP Mantık Şeması

Verilen 𝚪 varsayımlar 𝑒₀ fonksiyonel bir tiptir ve 𝚪 varsayımlar 𝑒₁ bir 𝑒₁
sonuç 𝚪 𝑒₀ ila 𝑒₁ fonksiyonunun uygulandığını ileri sürmektedir 𝑒₁ '

Kuralı yeniden ifade etmek için işlev uygulamasının 𝜏 'türünü döndürdüğünü biliyoruz, çünkü işlev 𝜏 → 𝜏' türüne sahiptir ve 𝜏 türünde bir argüman alır.

Bu, bir işlevin bir tür döndürdüğünü bilirsek ve bunu bir bağımsız değişkene uygularsak, sonucun döndürdüğünü bildiğimiz türün bir örneği olacağı anlamına gelir.

İşlev Soyutlama

ABS Mantık Şeması

Erts varsayımları 𝚪 ve 𝑥 verilen bir tür, 𝜏 '
sonuç 𝚪 anonim bir işlev, 𝑥 geri dönen ifade 𝑒, 𝑒 𝜏 → 𝜏 türündedir.

Yine, 𝑥 alan ve bir ifade 𝑒 döndüren bir fonksiyon gördüğümüzde, bunun 𝜏 → 𝜏 'tipinde olduğunu biliyoruz çünkü 𝑥 (a 𝜏) 𝑒' nin 𝜏 'olduğunu söyler.

𝑥 türünün 𝜏 olduğunu ve dolayısıyla 𝑒 ifadesinin 𝜏 'türünde olduğunu bilirsek, 𝑥 ifadesini döndüren 𝑒 işlevi 𝜏 → 𝜏 türündedir.

Değişken bildirimine izin ver

LET Mantık Şeması

𝚪 türünde 𝚪, of türünde ve 𝚪 ve ​​𝑥 türlerinde, 𝜏 türünde erts türünü verir
let türünde in𝑒₁ sonucunu verir, 𝜏 türünde 𝚪 ekler 𝑥 = 𝑒₀ 𝑒₁

Gevşek 𝑥, 𝑒₀ in 𝑒₁'ye (a 𝜏) bağlıdır, çünkü 𝑒₀ bir 𝜎'dir ve 𝑥, 𝑒₁'nin 𝜏 olduğunu iddia eden bir 𝜎'dir.

Bu, 𝜎 (değişken veya işlev olan) bir 𝑒₀ ifademiz ve bazı ad, 𝑥, ayrıca 𝜎 ve type türündeki bir 𝑒₁ ifademiz varsa, 𝑒₀ yerine 𝑥 yerine göründüğü her yerde 𝑒₁.

Destekleme

INST Mantık Şeması

𝚪 've 𝜎' türlerinin 𝚪 varsayımları göz önüne alındığında, lude
sonuç 𝚪 türlerinin 𝜎 türünün bir alt türüdür.

𝑒 ifadesi type üst türünde, çünkü 𝑒 ifadesi 𝜎 'alt türünde ve 𝜎 ise parent' üst türünde.

Bir örnek, başka bir türün alt türü olan bir türdeyse, aynı zamanda o süper türün (daha genel tür) bir örneğidir.

genelleme

GEN Mantık Şeması

Verilen 𝚪 varsayımları a bir 𝜎 ve 𝚪, free serbest değişkenlerinin bir elemanı değildir,
𝚪 ekler 𝑒 sonucunu verin, arg ifadesini döndüren tüm argüman ifadeleri için yazın

Bu nedenle, genel olarak, return döndüren tüm argüman değişkenleri (𝛼) için 𝜎 yazılır, çünkü 𝑒 'nin 𝜎 olduğunu ve a' nin serbest bir değişken olmadığını biliyoruz.

Bu, bir programı, kapsayıcı kapsamda (yerel olmayan değişkenler) zaten bağlı olmayan argümanlar için tüm türleri kabul edecek şekilde genelleştirebileceğimiz anlamına gelir. Bu bağlı değişkenler ikame edilebilir.

Hepsini bir araya koy

Belirli varsayımlar (serbest / tanımsız değişkenler, bilinen bir ortam gibi) göz önüne alındığında, aşağıdakilerin türlerini biliyoruz:

  • Programlarımızın atom elementleri (Değişken),
  • fonksiyonlar tarafından döndürülen değerler (Fonksiyon Uygulaması),
  • fonksiyonel yapılar (Fonksiyon Soyutlama),
  • izin bağlamaları (Değişken Bildirimlerine İzin Ver),
  • üst örnek türleri (Örnekleme) ve
  • tüm ifadeler (Genelleme).

Sonuç

Bu kurallar bir araya getirildiğinde, tür ek açıklamalarına gerek kalmadan, iddia edilen bir programın en genel türünü kanıtlamamıza izin verilir.


1
Böyle iyi bir özet Aaron!
Mart'ta bhurlow 22:37

48

İşaret, doğal indirimden gelir .

⊢ sembolüne turnike denir .

6 kural çok kolaydır.

Var kural oldukça önemsiz bir kuraldır - tanımlayıcı türü tür ortamınızda zaten mevcutsa, türü yalnızca ortamdan olduğu gibi çıkarmanız gerekir.

Appkuralı, iki tanımlayıcıya sahipseniz e0ve e1türlerini çıkartabilirse, uygulama türünü çıkartabileceğinizi söyler e0 e1. Eğer e0 :: t0 -> t1ve e1 :: t0(aynı t0!) 'I biliyorsanız kural bu şekilde okunur , ardından uygulama iyi yazılır ve türt1 .

Abs ve Let lambda soyutlama ve izin verme türlerini çıkarmanın kurallarıdır.

Inst kuralı bir türü daha az genel olanla değiştirebileceğinizi söylüyor.


4
Bu ardışık analizdir, doğal kesinti değildir.
Roman Cheplyaka

12
@RomanCheplyaka iyi, gösterim aynı. Vikipedi makalesi iki tekniğin ilginç bir karşılaştırmasına sahiptir: en.wikipedia.org/wiki/Natural_deduction#Sequent_calculus . Sıralı matematik doğal çıkarımın başarısızlıklarına doğrudan yanıt olarak doğmuştur, bu yüzden soru "bu gösterim nereden geldi" ise, o zaman "doğal çıkarım" teknik olarak daha doğru bir cevaptır.
Dan Burton

2
@RomanCheplyaka Diğer bir husus, sıralı hesabın tamamen sözdizimsel olması (bu yüzden bu kadar çok yapısal kural vardır), ancak bu gösterim yoktur. İlk kural, bağlamın bir küme olduğunu varsayarken, sıralı hesaplamada daha basit bir sözdizimsel yapıdır.
nponeccop

@Cheplyaka aslında, hayır, "sıralı" gibi görünen bir şey var ama sıralı hesap değil. Haper, bunu "yüksek dereceli bir yargı" olarak ders kitabında bir anlayış geliştirir. Bu gerçekten doğal bir kesinti.
Philip JF

15

E: σ'yi düşünmenin iki yolu vardır. Birincisi "e ifadesi σ tipine sahiptir, diğeri" sıralı e ifadesi çifti ve σ tipidir ".

Γ ifade ve tür çiftleri kümesi olarak uygulanan ifade türleri hakkında bilgi olarak, e: σ.

Turnike ⊢, soldaki bilgiden, sağdaki şeyi çıkarabileceğimiz anlamına gelir.

İlk kural [Var] böylece okunabilir:
Eğer bilgimiz Γ e: σ çiftini içeriyorsa, Γ 'den e' nin σ tipine sahip olduğunu belirleyebiliriz.

İkinci kural [App] okunabilir:
from 'den e_0' ın ​​τ → τ 'türüne sahip olduğunu ve Γ' dan e_1 'in τ türünü belirleyebilirsek, Γ' den e_0 e_1 'in τ 'yazın.

Γ ∪ {e: σ} yerine Γ, e: σ yazmak yaygındır.

Üçüncü kural [Abs] şu şekilde okunabilir:
Eğer x'den x ile genişletilirsek: τ, e'nin τ 'türüne sahip olduğunu belirleyebilirsek, Γ' den λx.e 'nin τ → τ' türüne sahip olduğunu belirleyebiliriz.

Dördüncü kural [Let] bir alıştırma olarak bırakılmıştır. :-)

Beşinci kural [Inst] okunabilir:
Eğer from 'den biz e' nin σ 'tipine sahip olduğunu ve σ' σ 'nin bir alt tipini belirleyebilirsek, Γ' den e 'nin σ tipine sahip olduğunu belirleyebiliriz.

Altıncı ve son kural [Gen] okunabilir:
Eğer from 'den biz e' nin σ tipine sahip olduğunu ve α 'nın types' türlerinden herhangi birinde bir serbest tip değişkeni olmadığını belirleyebilirsek, Γ 'den Α σ.

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.