Lambda hesabı: bağlamlar ve değerlendirme bağlamları arasındaki fark


12

Öncelikle, aşağıdaki metnimin hata içerebileceğini söylemek istiyorum, bu yüzden soruyu formülasyonumdaki hataları belirtmekten çekinmeyin.

Bu sözdizimi ile terimleri verilen booleans ve if-ifadeleri ile türlenmemiş bir lambda hesabı düşünün:

 t ::= v | t t | if t t t | x
 v ::= \x.t | #t | #f

Bu durumda C içeriği bu sözdizimine göre verilecektir:

C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C 

Ek olarak, değerlendirme bağlamlarını E bu diğer sözdizimine göre tanımlayabiliriz:

E ::= [-] | \x. E | v E | E t | if E t t 

Sorumu ele almak istediğim üç alt noktaya ayırdım.

  1. İki kavram ne zaman kullanılır? Örneğin, değerlendirme bağlamlarının analizin anlambilimini tanımlamak için kullanıldığını biliyorum, ancak bağlamların kullanımı hala bir şekilde elimden geliyor. Ayrıca burada bilgimin onaylanmasını istiyorum.
  2. Biri diğerine ne zaman tercih edilir ve neden?
  3. Bu sorunu çözmeme yardımcı olabilecek ilgili makalelere işaret edebilir misiniz?

Yanıtlar:


15

Bağlam birçok amaç için kullanılır, ancak genellikle programlardaki uyumu tanımlamak için kullanılır. Değerlendirme bağlamları, bağlamların bir alt kümesidir. Bunlar tipik olarak indirgeme ilişkilerini tanımlamak için kullanılır. Her birine bir örnek vereyim.

Program eşitliği tanımlamanın bir biçimsel yolu iki program demek ki ve N olan içeriksel eşit onlar davranış değişikliği olmadan her bağlamda birbirlerini yerini alabilir. Bunu şu şekilde tanımlayabiliriz: M ve N içeriğe dayalı tüm kapatma bağlamlarda ile eşit [ ] için E ve K : C [ M ] t , ancak ve ancak, eğer C [ N ] t . M , N için bir bağlamın kapandığını söylüyoruzMN-MNC[]MNC[M]tC[N]tM,N veya C [ N ] 'nin serbest değişkenleri yoksa . Sentezleme M t programı bu araçlar M değeri için adımlar sonlu sayıda azalır t . (Bir kenara, bağlamsal eşdeğerlik tanımının, zengin hesaplama kavramları, örneğin eşzamanlı süreçler için daha ilgili olduğunu unutmayın.)C[M]C[N]MtMt

Buna karşılık, değerlendirme bağlamları, değerlendirmeyi engellemeyen bağlamlardır. Daha kesin olarak, bir değerlendirme bağlamı, bir sonraki atomik indirgeme adımının gerçekleşmesi gereken noktada (veya deterministik olmayan hesaplama için gerçekleşebilir) bir deliğe sahip bir terimdir. Dolayısıyla, değerlendirme bağlamında aşağıdaki kural geçerli olmalıdır: değerlendirme bağlamları kullanarak bir örnek olarak, çağrı bazında değer azaltma kurallarını dikkateλ-calculus, biz altında azaltmak değildirÂ. Bu yüzdenMNolsa bile, birλxazaltmamız yoktur. Mλx. N. Bu,λ-ifadeleriniihmal eden değerlendirme bağlamları için bir dilbilgisi ile birlikte yukarıdaki genel bağlam kuralı ile kolayca ifade edilebilir. Değerlendirme bağlamları ilk olarak

MNE[M]E[N]
λλMNλx.Mλx.NλFelleisen ve Hieb tarafından Sıralı Kontrol ve Durum Sözdizimsel Teorileri Üzerine Gözden Geçirilmiş Rapor .

14

Bağlam sözdizimsel bir kavramdır. Bağlam, içinde bir delik bulunan bir terimdir. (Bazen çok delikli bağlamlar vardır, bu durumda tanım açıkça verilecektir.) Bağlamların sözdizimi, terimlerin sözdizimi alınarak ve bir alt terimin bir terim yerine bir delik olmasına izin vererek tanımlanır . BNF (I Boolean olmayan ve örnek için her getirmez tablolar halinde, örnek olarak lambda taşı kullanılmaktadır.): C : : = [ ] | x | t[]

C:: =[]|x|tC|Ct|λx.C

Bir bağlamın tanımı ile birlikte, bir terimi bir bağlama koymanın tanımı gelir. Eğer bağlam ve T bir terimdir ve ardından [ t ] konulması ile elde edilen bir terimdir t deliği burada söz dizimi ağacında [ ] olduğu C [ t ] . Bu temelde değişkenin tam olarak bir kez meydana geleceği garanti edilen bir ikamedir (ancak ikame edilen “değişken” in lambda hesabı veya terimlerin başka bir dilinde bir değişken değil , meta seviyesinde [ ]] bir değişken olduğunu unutmayın. t ).C[]tC[t]t[]C[t][]t

Anlambilimde çeşitli tanımları formüle etmek için bağlamlar kullanılır. Yaygın bir örnek, çoğu değerlendirme kavramının, değerlendirmenin yapılabileceği bağlamların tanımlanmasını içermesidir. Örneğin, lambda hesabını düşünün. Temel değerlendirme kavramı beta azaltma kuralı ile verilir: burada M { x N } , M'ye uygulanan x N'nin ikamesidir.

(λx.M)N-βM{xN-}
M{xN-}xN-M

tMN-xt=(λx.M)N-tt't'=(λx.M)N-tCMN-xt=C[(λx.M)N-]C[M{xN-}]

(λx.M)N-βM{xN-}(β)MβN-C[M]βC[N-](γ)
(λx.M)N-βM{xN-}(β)MβN-λx.Mβλx.N-(Cλ)MβN-MPβN-P(C@<)MβN-PMβPN-(C@>)

D:: =[]|x|tD|Dt
(λx.M)N-npM{xN-}MnpN-D[M]npD[N-]
(λx.M)N-npM{xN-}(β)MnpN-MPnpN-P(C@<)MnpN-PMnpPN-(C@>)
D

V

V:: =xV1...Vn|λx.M
E:: =[]|ME|EV
D
(λx.M)VcbvbirM{xV}(βcbvbir)MβN-E[M]cbvbirE[N-](γcbvbir)

1
İkinci değerlendirme bağlamı tanımınız orijinal Felleisen ve Hieb kavramına daha yakındır. Bir kalkülüs terimlerinin değerlendirme sırasını ifade etmeye yardımcı olan sözdizimsel bir araçtır. Bir değerlendirme bağlamı , bir terimi bir bağlama ve bir redex'e (mümkünse) benzersiz bir şekilde çarpanlarına ayırmayı mümkün kılan, böylece bir sonraki indirgeme adımının nerede olması gerektiğini belirleyici bir şekilde belirten özel bir tür bağlamdır.
Dave Clarke

@DaveClarke Bir yana, değerlendirme bağlamında ve redex'te benzersiz bir ayrıştırma yapmadığınız belirleyici olmayan hesaplama kavramları için değerlendirmeyi tanımlamak için değerlendirme bağlamlarını da kullanabilirsiniz.
Martin Berger

@MartinBerger: Gerçekten.
Dave Clarke

@DaveClarke Şunu mu demek istediniz: “ deterministik bir değerlendirme bağlamı özel bir bağlam türüdür”? Rasgele bir bağlam kümesi alabilir ve buna dayalı bir değerlendirme stratejisi tanımlayabilirim.
Gilles 'SO- kötü olmayı bırak'

@Gilles: Değerlendirme bağlamları deterministik bir azaltma stratejisi tanımlayabilir. "Deterministik değerlendirme bağlamı" ifadesini gördüğümü sanmıyorum. Bunlar elbette özel bir tür bağlam. Yorumunuza katılıyorum; asıl mesele, cevabınızın, değerlendirme bağlamlarının tarihsel önemini gözden kaçırmasıdır; bu da belirleyici bir indirgeme kavramını tanımlamaktı.
Dave Clarke
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.