Lambda hesabında fonksiyonların anonim olması neden önemlidir?


19

Jim Weirich'in ' Fonksiyonel Programlamada Maceralar ' başlıklı dersini izliyordum . Bu derste, esas olarak yüksek dereceli fonksiyonlar için sabit noktayı bulan Y-birleştiriciler kavramını tanıtır.

Motivasyonlarından biri, söylediği gibi, lambda hesabı kullanarak özyinelemeli fonksiyonları ifade edebilmektir, böylece Kilise tarafından teori (etkili bir şekilde hesaplanabilir olan her şey lambda hesabı kullanılarak hesaplanabilir) kalır.

Sorun şu ki, bir fonksiyon kendini böyle çağıramaz, çünkü lambda hesabı adlandırılmış fonksiyonlara izin vermez, yani,

n(x,y)=x+y

' ' adını taşıyamazsa, anonim olarak tanımlanmalıdır:n

(x,y)x+y

Lambda hesabının adlandırılmamış işlevlere sahip olması neden önemlidir? Adlandırılmış işlevler varsa hangi ilke ihlal edilir? Yoksa Jim'in videosunu yanlış mı anladım?


4
Bu hiç de önemli değil. Bir n değişkenine atayabilir ve sonra işleve bir ad vermiş olursunuz. (x,t)x+yn
Yuval Filmus

@YuvalFilmus evet, bir işleve bir ad bağlayabilirsiniz. Sanırım buradaki asıl soru, şaşkınlık, neden (lambda hesabında) bir işlev böyle bir isimle kendini çağıramıyor? Özyinelemeli işlevler yapmak için neden Y operatörü gibi bir tekniğe ihtiyacımız var? Umarım aşağıdaki cevabım yardımcı olur.
Jerry101

1
@ Jerry101 Kendi kendine başvurunun bulunmamasının tarihsel nedeni, hesabının matematiğin temeli olması ve kendi kendine uygulama yeteneğinin böyle bir temeli derhal tutarsız hale getirmesidir. Bu yüzden (şimdi bildiğimiz bildiğimiz) bu açık yetersizlik, λ- hesabının bir tasarım özelliğidir . λλ
Martin Berger

@MartinBerger lütfen daha fazlasını söyleyin. Cevabımın nedeni tutarsız mı? Ya da başka bir nedenden mi?
Jerry101

1
@ Jerry101 Böyle bir matematik temelinde 0 = 1 olduğunu kanıtlayabilme anlamında tutarsız. Kleene ve Rosser saf, türlenmemiş hesabının tutarsızlığını gösterdikten sonra , basit tipli λ -hesabı Y gibi sabit nokta birleştiricilerini tanımlamamıza izin vermeyen bir alternatif olarak geliştirildi . Ancak, basitçe yazılan λ - hesabına özyineleme eklerseniz, yine tutarsız hale gelir, çünkü her tür sonlandırıcı olmayan bir program tarafından yerleşir. λλYλ
Martin Berger

Yanıtlar:


24

Bu konuyla ilgili ana teorem, 16. yüzyılın sonlarından itibaren William Shakespeare adlı İngiliz bir matematikçiden kaynaklanmaktadır . Konuyla ilgili en iyi bilinen makalesi " Romeo ve Juliet " başlıklı 1597'de yayınlandı, ancak araştırma çalışmaları birkaç yıl önce yapıldı, ilham verdi, ancak Arthur Brooke ve William Painter gibi öncüler oldu.

Ana sonucu, II. Sahne II , ünlü teoremdir :

Bir isimde ne var? bir gül dediğimiz
başka bir isimle tatlı gibi kokacaktı;

Bu teorem sezgisel olarak "isimler anlama katkıda bulunmaz" olarak anlaşılabilir.

Makalenin büyük bir kısmı teoremi tamamlayan ve isimler anlam katmasa da sonsuz sorunların kaynağı olduğunu gösteren bir örneğe ayrılmıştır.

Shakespeare'in işaret ettiği gibi, isimler anlam değiştirmeden değiştirilebilir, daha sonra Alonzo Kilisesi ve takipçileri tarafından dönüşüm olarakα adlandırılan bir işlem . Sonuç olarak, bir isimle neyin ifade edildiğini belirlemek her zaman basit değildir. Bu, ad-anlam ilişkilendirmesinin belirtildiği bir ortam kavramı geliştirmek ve bir adla ilişkili anlamı belirlemeye çalıştığınızda mevcut ortamın ne olduğunu bilmek gibi çeşitli sorunları ortaya çıkarır. Bu bilgisayar bilimcilerini bir süre şaşkına çevirerek meşhur Funarg problemi gibi teknik zorluklara yol açtı. Ortamlar bazı popüler programlama dillerinde bir sorun olmaya devam etmektedir, ancak genellikle Shakespeare'in makalesinde çalıştığı örnek kadar ölümcül olduğu için fiziksel olarak daha güvenli olmadığı düşünülmektedir.

Bu sorun yakın çıkardığı sorunlara da biçimsel dil alfabe ve biçimsel sistemler lazım teori, bir eşbiçimlilik kadar tanımlanmış böylece çizgi olarak, alfabelerin semboller soyut varlıklardır , nasıl "Materialise" olarak bağımsız bazı kümesinden öğeleri.

Shakespeare'in bu büyük sonucu, bilimin daha sonra bir varlığın veya bir anlamın gerçek bir isme sahip olabileceği sihir ve dinden ayrıldığını da gösterir .

Tüm bunların sonucu, teorik çalışma için, pratik çalışma ve günlük yaşam için daha kolay hissedilmesine rağmen, isimlerle çarpılmamanın genellikle daha uygun olmasıdır. Ama hatırlayın ki annem denen herkes annen değildir.

Not :
Konu 20. yüzyılda Amerikalı mantıkçı Gertrude Stein tarafından daha yakın bir zamanda ele alındı . Bununla birlikte, matematikçi meslektaşları hala ana teoreminin kesin teknik sonuçlarını düşünüyor :

Gül bir gül, bir gül bir gül.

1913 yılında "Kutsal Emily" başlıklı kısa bir iletişimde yayınlandı.


3
Ek not: Son yıllarda, "gül" (bilgisayar bilimlerinde) yerine, diğerleri kadar iyi bir isim için kanonik örnek olarak "foobar" (ve bunların parçaları) kullanılmıştır. Bu tercih görünüşe göre Amerikalı demiryolu mühendisleri tarafından ortaya atılmıştır.
FrankW

Bununla birlikte, sık kullanılan kavramların kanonik isimleri verimli iletişim için önemlidir.
Raphael

1
@ Raphael Kabul etti, ama bunu günlük yaşam kategorisine koyardım. Ve gerçekten kanonik olanın sınırlarını nasıl biliyoruz? Yine de, öğrencilerin Tanrı tarafından verilen değişmez bir gerçek için tüm terminoloji, gösterim ve tanımları (hatta bazı teoremlerin ifade edildiği şekli) aldıklarını görünce endişeleniyorum. Burada bile, SE'de öğrenciler, notalarını veya sınıfta kullandıkları tanımları bilemeyeceğimizi fark etmeyerek sorular soruyorlar. Gerçek isimlerin büyüsü kolayca ölmez.
babou

10

@Babou ve @YuvalFilmus'tan farklı bir görüş almak istiyorum: Saf λ hesabının anonim işlevlere sahip olması çok önemlidir . Yalnızca adlandırılmış işlevlere sahip olmayla ilgili sorun, kaç isme ihtiyacınız olduğunu önceden bilmeniz gerektiğidir. Ancak saf λ hesabında, kullanılan fonksiyonların sayısına bağlı bir önsezi yoktur (özyineleme hakkında düşünün), bu yüzden ya (1) anonim fonksiyonları kullanırsınız ya da (2) π hesap rotasına gidersiniz ve yeni bir adı combinator ( ν x . P içinde π -calculus) çalışma zamanında taze isimlerin tükenmez bir kaynağı verir.λλπνx.Pπ

Saf λ hesabının özyineleme için açık bir mekanizmaya sahip olmamasının nedeni , saf λ hesabının başlangıçta A. Kilisesi tarafından matematiğin bir temeli olması ve özyineleme böyle bir temeli önemsiz bir şekilde sağlamlaştırmasıdır. Stephen Kleene ve JB Rosser saf λ hesabının matematiğin temeli olarak uygun olmadığını keşfettiklerinde şok oldu ( Kleene-Rosser paradoksu ). Haskell Curry, Kleene-Rosser paradoksunu analiz etti ve özünün şu anda Y-Birleştirici olarak bildiğimiz şey olduğunu fark etti.

letf=MinN(λf.N)Mλ


1
Bence OP isimsiz olanları yasaklamak değil, fonksiyonları isimlendirmek istedi. Bu, anonim fonksiyonların gerekliliği ile ilgili herhangi bir λ-hesabı gereksiniminin Lisp / Scheme veya ML gibi dillerde de gösterileceğini düşündüm. Lisp / Scheme durumunda, değerlendiricilerin meta-daireselliği gerektiğinde yeni isimler yaratmayı mümkün kılmalıdır, ancak resmi bir sistemde bu şekilde isteyeceğime emin değilim. Özyineleme zaten kullanılan adların yerel olarak yeniden kullanılmasına izin verdiğinde, sınırsız sayıda fonksiyonun kullanılması mutlaka bir sorun oluşturmaz.
babou

λλ

Son satır (lambda f. N) M yazmalı mı?
Joe the Person

@JoethePerson Evet, iyi tespit ettim. Sabit. Teşekkürler.
Martin Berger

4

Bence isimler gerekli değil. Ad gerektiriyor gibi görünen her şey anonim işlev olarak yazılabilir.

Lambda hesabını montaj dili gibi düşünebilirsiniz. Meclis üzerine bir derste biri "Meclis dilinde nesne yönelmiş miras ağaçları yok" diyebilir. Daha sonra miras ağaçlarını uygulamanın akıllıca bir yolunu düşünebilirsiniz, ama mesele bu değil. Mesele şu ki, miras ağaçları fiziksel bir bilgisayarın nasıl programlandığının en temel düzeyinde gerekli değildir.

Lambda hesabında önemli olan, bir algoritmayı en temel düzeyde tanımlamak için isimlerin gerekli olmamasıdır.


4

Şimdiye kadar 3 cevabın tadını çıkarıyorum - özellikle @ babou'nun Shakespearen analizi - ama sorunun özü olduğunu düşündüğüm şeye ışık tutmuyorlar.

λ-hesabı, bir işleve her işlev uyguladığınızda adları işlevlere bağlar. Mesele isimlerin olmaması değildir.

"Sorun, bir fonksiyonun ismine bakarak kendisini basitçe çağıramamasıdır."

(Saf Lisp'de, ad -> işlev bağlaması işlevin gövdesi içinde yer almaz. Bir işlevin adını adıyla çağırabilmesi için işlevin işleve başvuran bir ortama başvurması gerekir. Impure Lisp bunu işlevin bahsettiği ortamı değiştirerek yapar.)

@MartinBerger'in de işaret ettiği gibi, λ-hesabının bir işlevi kendi adıyla çağırmasına izin vermemesinin tarihsel nedeni, λ-calculus'u tümdengelimli mantık da dahil olmak üzere matematiğin temeli olarak kullanmaya çalışırken Curry'nin paradoksunu dışlama girişimidir . Y birleştiricisi gibi teknikler öz referans olmadan bile özyinelemeye izin verdiği için bu işe yaramadı.

Wikipedia'dan:

Eğer fonksiyonu tanımlayabilirsek, r = (λ.x x x ⇒ y)o zaman r r = (r r ⇒ y).

Eğer r rdoğruysa, o yzaman doğrudur. Eğer r ryanlışsa, o r r ⇒ yzaman doğrudur, ki bu bir çelişkidir. Bu ydoğrudur ve yherhangi bir ifade gibi, herhangi bir ifade de doğrulanabilir.

r rsona ermeyen bir hesaplamadır. Mantık r r, var olmayan bir değerin ifadesidir.


λ.x xxxxx

@RohanPrabhu λ.x x xLisp diline (lambda (x) (x x))ve JavaScript diline çevirir function (x) {return x(x);}. x⇒yaracı x implies y, yaklaşık olarak aynı (NOT x) OR y. Bkz en.wikipedia.org/wiki/Lambda_calculus
Jerry101

Bu utanç verici çaylak sorusunu cevapladığınız için teşekkür ederiz!
Rohan Prabhu
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.