Lambda hesabında bilinmeyen fonksiyonlar için fonksiyonel denklemlerin çözümü


14

Lambda hesabında bilinmeyen fonksiyonlar için fonksiyonel denklemleri çözmek için herhangi bir teknik var mı?

Varsayalım ki, tanımsal olarak tanımlanmış kimlik fonksiyonuna sahibim:

Ix=x

(o fonksiyonun beklenen davranışı için bir denklemi yazarak vardır) ve şimdi bunu çözmek istiyorum o işlev için intensional formülünü elde etmek için bazı cebirsel dönüşümü yaparak:I

I=λx.x

bu , işlevin beklenen şeyi tam olarak nasıl yaptığını anlatır (yani, lambda hesabında nasıl uygulanacağını).

Elbette kimlik fonksiyonu sadece örnek olarak kullanılmıştır. Bu tür denklemleri çözmenin daha genel yöntemleriyle ilgileniyorum. Özellikle, aşağıdaki gereksinimi karşılayan bir işlev bulmak istiyorum :B

Bf(λx.M)=(λx.fM)

yani, verilen işlevini , muhtemelen onu parçalayıp yeni bir işlev oluşturarak , "bedeni" M'sinden (bazı keyfi lambda ifadesi) önce verilen lambda işlevine ( λ x . M ) "enjekte eder" . f işlevinin uygulandığı bir parametre haline geldi .f(λx.M)Mf

Yanıtlar:


13

Bu, Üst Düzey Birleştirme olarak bilinen bilinen bir sorundur .

Ne yazık ki, bu sorun genel olarak kararlaştırılamaz. Miller'in Desen Parçası olarak bilinen karar verilebilir bir parça var. Diğer şeylerin yanı sıra, meta değişkenler veya kalıp eşleşmesi ile bağımlı olarak yazılan programların yazım denetiminde yaygın olarak kullanılır. Bu fragman, birleştirme değişkenlerinin sadece farklı bağlı program değişkenlerine uygulandığı yerdir.

Bu makale , daha üst düzey birleşmenin nasıl çalıştığına dair harika bir eğitim sunmaktadır ve bunun (nispeten) basit bir uygulamasından geçmektedir.

Ne yazık ki, işleviniz bu desen parçasına düşüyor gibi görünmüyor. Bununla birlikte, gördüğüm şey işlev kompozisyonuna oldukça benzer. Aşağıdaki işlev mülkünüzü tatmin ediyor mu?

B=λf g x .f (g x)

Sahibiz:

  • B f (λx.M)
  • =B f (λy.[y/x]M)α
  • =λx.f ((λy.[y/x]M)x)
  • =λx.f ([x/y][y/x]M)
  • =λx.f M

1
(λx.M)

1
Makalenin bağlantısı için teşekkürler, kontrol edeceğim ve diğer insanlara da bir şans vermek için birkaç gün içinde cevabınızı kabul edeceğim.
BarbaraKwarc

3
Bu üst düzey birleşme mi? Soru, basitçe yazılan lambda hesabı yerine türetilmemiş lambda hesabı ile ilgili görünmektedir.
Peter Taylor

2

Kimlik fonksiyonu ile denklem konusunda kısmi bir cevabım olduğunu düşünüyorum:

Ix=x

I(λp.M)MI

(λp.M)x=x

x

M[p/x]=x

Mpx

I=(λx.x)

tabii ki doğru cevap :)


ω

ωω=ωω

ω(λx.M)M

(λx.M)ω=ωω

M

M[x/ω]=ωω

xMωωωMxx

ω=(λx.xx)

gerçekten durum böyle :)


Yine de, sağ taraf zaten aradığımız formda olduğu için bu kadar kolay olabileceğini hissediyorum.


M[x/ω]=ωωω=(λx.xx)

Bu iki basit durumda - evet, var: ikame işlemini tersine çevir. Ama dediğim gibi, bu vakalar saf "şans" ile işe yarayabilir: sağ taraf zaten gerekli formda. Bazı daha karmaşık örneklerle denediğimde işe yaramadı. Aradığım şey budur: algoritmik bir yol için.
BarbaraKwarc

1
ωω=ωωωω
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.