12

, dass Sie ein λ-Kalkül Programm finden wollen, T, dass die folgenden Gleichungen erfüllt:Was sind die neuesten Methoden zur Lösung von Funktionsgleichungen? Angenommen

(T (λ f x . x))   = (λ a t . a) 
(T (λ f x . (f x)))  = (λ a t . (t a)) 
(T (λ f x . (f (f x)))) = (λ a b t . (t a b)) 
(T (λ f x . (f (f (f x)))) = (λ a b c t . (t a b c)) 

Auf diesem Fall habe ich festgestellt manuell diese Lösung:

T = (λ t . (t (λ b c d . (b (λ e . (c e d)))) (λ b . b) (λ b . b))) 

Gibt es irgendeine Strategie, um solche λ-Kalkül-Gleichungen automatisch zu lösen? Wie ist der Stand der Kunst zu diesem Thema?

+3

Welchen Begriff der Gleichheit verwenden Sie hier? – dfeuer

+1

[Rechengleichheit] (http://ncatlab.org/nlab/show/equality) *. Bitte lesen Sie "a = b", da sich 'a' Beta auf" b "reduziert, in starker Normalform. – MaiaVictor

+2

Während ich Ihre Frage interessant finde, denke ich nicht, dass dies eine gute Lösung für Stack Overflow ist. Wenn Sie nach Algorithmen fragen, sollten Sie nach [Informatik.SE] fragen. So wie es aussieht, scheint Ihre Frage nicht nach Programmierung, sondern nach Algorithmusentwurf zu liegen und zu breit, um auf SO beantwortet zu werden (eine definitive Antwort auf Ihre Frage wäre ein Buch/eine Reihe von Büchern). – Bakuriu

Antwort

3

Im Allgemeinen ist higher order unification unentscheidbar, so dass Sie nicht auf ein allgemeines Verfahren zur Suche nach Lösungen für diese Art von Gleichungen hoffen können.

Es gab eine Menge Arbeit an der Suche nach Lösungen für solche Probleme, aber ich kenne keine, die die Antwort auf Ihr spezielles Problem gibt. Einige gute Referenzen sind in dieser Antwort zusammengefasst: Higher-order unification

9

Ich bin nicht sicher über den Stand der Technik, aber William E Byrd Arbeit an relationalen Interpreter (wie this paper) ermöglicht Programm-Synthese dieser Art.

Siehe auch seine PolyConf talk für einige nette Sachen auf der Suche nach Programmbegriffen. Ihre Beispiele scheinen so zu sein, als wären sie ziemlich einfach auszudrücken.