Wenn Sie davon ausgehen, dass der -calculus ein gutes Modell für funktionale Programmiersprachen ist, könnte man meinen: Der -calculus hat eine scheinbar einfache Vorstellung von Zeitkomplexität: Zählen Sie einfach die Anzahl der -Reduktionsschritte .λλβ(λx.M)N→M[N/x]
Aber ist das ein gutes Maß für die Komplexität?
Um diese Frage zu beantworten, sollten wir zunächst klären, was wir unter Komplexitätsmaß verstehen. Eine gute Antwort liefert die These von Slot und van Emde Boas : Jedes gute Komplexitätsmaß sollte eine polynomielle Beziehung zum kanonischen Begriff der Zeitkomplexität haben, der mit Turing-Maschinen definiert wird. Mit anderen Worten, es sollte ein ‚angemessen‘ kodiert sein von Kalkül Bezug auf Turingmaschinen, wie für ein Polynom , ist es der Fall , dass für jeden Term der Größe: reduziert sich auf einen Wert in -Reduktionsschritten genau dann, wenn sich auf einen Wert in reduzierttr(.)λpM|M|Mp(|M|) βtr(M)p(|tr(M)|) Schritte einer Turingmaschine.
Es war lange unklar, ob dies im λ-Kalkül erreicht werden kann. Die Hauptprobleme sind die folgenden.
- Es gibt Begriffe, die Normalformen (in einer Polynomzahl von Schritten) erzeugen, die exponentiell groß sind. Sogar das Aufschreiben der normalen Formen nimmt exponentielle Zeit in Anspruch.
- Die gewählte Reduktionsstrategie spielt eine wichtige Rolle. Zum Beispiel gibt es eine Familie von Begriffen, die in einer Polynomzahl von parallelen β-Schritten (im Sinne einer optimalen λ-Reduktion ) abnimmt , deren Komplexität jedoch nicht elementar ist (dh schlechter als exponentiell).
Die Veröffentlichung " Beta Reduction is Invariant, Indeed " von B. Accattoli und U. Dal Lago klärt das Problem, indem sie eine "vernünftige" Codierung zeigt, die die Komplexitätsklasse P der polynomialen Zeitfunktionen beibehält , wobei von Kürzungen des äußersten linken Randes der Call-by-Name ausgegangen wird . Die wichtigste Erkenntnis ist, dass das exponentielle Aufblasen nur aus „uninteressanten“ Gründen erfolgen kann, die durch richtiges Teilen besiegt werden können. Mit anderen Worten, die Klasse P ist die gleiche, unabhängig davon, ob Sie sie mit Turing-Maschinenschritten oder mit (ganz links) -Reduktionen definieren.β
Ich bin mir nicht sicher, wie die Situation für andere Bewertungsstrategien ist. Mir ist nicht bekannt, dass ein ähnliches Programm für die Raumkomplexität durchgeführt wurde.