lambda.tex 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. %!TEX root = Programmierparadigmen.tex
  2. \chapter{$\lambda$-Kalkül}
  3. Der Lambda-Kalkül ist eine formale Sprache.
  4. In diesem Kalkül gibt es drei Arten von Termen $T$:
  5. \begin{itemize}
  6. \item Variablen: $x$
  7. \item Applikationen: $(T T)$
  8. \item Lambda: $\lambda x. T$
  9. \end{itemize}
  10. Es ist zu beachten, dass Funktionsapplikation linksassoziativ ist. Es gilt also:
  11. \[a~b~c~d = ((a~b)~c)~d\]
  12. \begin{definition}[Freie Variable]
  13. TODO
  14. \end{definition}
  15. \begin{definition}[Gebundene Variable]
  16. Eine Variable heißt gebunden, wenn sie nicht frei ist.
  17. \end{definition}
  18. \section{Reduktionen}
  19. \begin{definition}[$\alpha$-Äquivalenz]
  20. Zwei Terme $T_1, T_2$ heißen $\alpha$-Äquivalent, wenn $T_1$ durch
  21. konsistente Umbenennung in $T_2$ überführt werden kann.
  22. Man schreibt dann: $T_1 \overset{\alpha}{=} T_2$.
  23. \end{definition}
  24. \begin{beispiel}[$\alpha$-Äquivalenz]
  25. \begin{align*}
  26. \lambda x.x &\overset{\alpha}{=} \lambda y. y\\
  27. \lambda x. x x &\overset{\alpha}{=} \lambda y. y y\\
  28. \lambda x. (\lambda y. z (\lambda x. z y) y) &\overset{\alpha}{=}
  29. \lambda a. (\lambda x. z (\lambda c. z x) x)
  30. \end{align*}
  31. \end{beispiel}
  32. \begin{definition}[$\beta$-Äquivalenz]
  33. TODO
  34. \end{definition}
  35. \begin{beispiel}[$\beta$-Äquivalenz]
  36. TODO
  37. \end{beispiel}
  38. \begin{definition}[$\eta$-Äquivalenz]
  39. Zwei Terme $\lambda x. f~x$ und $f$ heißen $\eta$-Äquivalent, wenn
  40. $x$ nicht freie Variable von $f$ ist.
  41. \end{definition}
  42. \begin{beispiel}[$\eta$-Äquivalenz]
  43. TODO
  44. \end{beispiel}
  45. \section{Auswertungsstrategien}
  46. \begin{definition}[Normalenreihenfolge]\xindex{Normalenreihenfolge}%
  47. In der Normalenreihenfolge-Auswertungsstrategie wird der linkeste äußerste
  48. Redex ausgewertet.
  49. \end{definition}
  50. \begin{definition}[Call-By-Name]\xindex{Call-By-Name}%
  51. In der Call-By-Name Auswertungsreihenfolge wird der linkeste äußerste Redex
  52. reduziert, der nicht von einem $\lambda$ umgeben ist.
  53. \end{definition}
  54. Die Call-By-Name Auswertung wird in Funktionen verwendet.
  55. \begin{definition}[Call-By-Value]\xindex{Call-By-Value}%
  56. In der Call-By-Value Auswertung wird der linkeste Redex reduziert, der
  57. nicht von einem $\lambda$ umgeben ist und dessen Argument ein Wert ist.
  58. \end{definition}
  59. Die Call-By-Value Auswertungsreihenfolge wird in C und Java verwendet.
  60. Auch in Haskell werden arithmetische Ausdrücke in der Call-By-Name Auswertungsreihenfolge
  61. reduziert.
  62. \section{Church-Zahlen}
  63. TODO
  64. \section{Weiteres}
  65. \begin{satz}[Satz von Curch-Rosser]
  66. Wenn zwei unterschiedliche Terme $a$ und $b$ äquivalent sind, d.h. mit Reduktionsschritten beliebiger Richtung ineinander transformiert werden können, dann gibt es einen weiteren Term $c$, zu dem sowohl $a$ als auch $b$ reduziert werden können.
  67. \end{satz}