\documentclass{article} \usepackage{amsmath} \usepackage{nccmath} %\usepackage{bussproofs} %dieses Paket koennte man fuer die typherleitung verwenden wenn man wollte \DeclareMathSizes{10}{10}{10}{10} \setlength{\parindent}{0pt} \title{System F und Reduktionsreihenfolge} \date{ } \begin{document} \section{Generelles} \subsection{Normale-/Lazy-Reduktion} - pre-order durch Baum ("von unten nach oben auswerten") \\ - leftmost-outermost\\ - Argumente zum Schluss auswerten \begin{align*} pow(a,pow(c,b))\:\: & mit\;linkem\;pow\;anfangen\\ & dann\;a\\ & dann\;rechtes\;pow\\ & dann\;c\\ & dann\;d \end{align*} \subsection{Applikative Reduktion:} - post-order durch Baum ("von oben nach unten")\\ - leftmost-innermost\\ - als erstes die Argumente auswerten \begin{align*} pow(a,pow(c,b))\:\: & mit\;c\;anfangen \enspace\;\;\;\;\;\;\;\;\;\enspace\;\;\;\; \\ & dann\;b\\ & dann\;a\\ & dann\;rechtes\;pow\\ & dann\;linkes\;pow \end{align*} \subsection{How to work with Lambda} - Buchstabe hinter $\lambda $ wegnehmen\\ - Term von der respektiven Stelle hinten entfernen\\ - alle Vorkommen des Buchstabens mit dem Term ersetzen\\ - idealerweise bei mehreren $\lambda$ in einem Term \textbf{immer} verschiedene Buchstaben verwenden\\ - wenn nicht genug Terme zum Aufl\"osen von $\lambda$ vorhanden sind, nicht damit anfangen, also z.B. bei $pred\;\lambda\,f\,a\,.\,fa\;one$ nicht one f\"ur f einsetzen sondern $pred$ aufl\"osen \section{SS15Probeklausur Beispielaufgabe} \subsection*{1) Reduktion} \subsubsection*{a) Normal/Lazy} \begin{align*} pow2\;three\; &=\; three\;(mult\;two)\;one\\ &=\; \lambda f\,a\, .\,f\,(\,f\,(\,f\;a\,)(\,mult\;two)\;one\\ &=\; \lambda a\, .\, (mult\;two)\,((mult\;two)\,((mult\;two)\;a\,)\;one\\ &=\; (mult\;two)\,((mult\;two)\,((mult\;two)\;one\,) \end{align*} \subsubsection*{b) Aplikativer Reihenfolge} \begin{align*} pow2\;three\; &=\; pow2\; (\, \lambda f\,a\, .\,f\,(\,f\,(\,f\;a\,) \,)\\ &=\; (\, \lambda f\,a\, .\,f\,(\,f\,(\,f\;a\,) \,)(mult\;two)\;one\\ &=\; (\, \lambda f\,a\, .\,f\,(\,f\,(\,f\;a\,) \,)(mult\;\lambda g\,b\, .\,g\,(\,g\;b\,))\;one\\ &=\; (\, \lambda f\,a\, .\,f\,(\,f\,(\,f\;a\,) \,)(mult\;\lambda g\,b\, .\,g\,(\,g\;b\,))\;(\lambda h\,c\, .\,h\;c) \end{align*} kleine Anmerkung hierzu noch: \[ \underbrace{(\, \lambda f\,a\, .\,f\,(\,f\,(\,f\;a\,) \,)}_{oberste\;Funktion} \underbrace{(mult\;\lambda g\,b\, .\,g\,(\,g\;b\,))}_{erstes\;Argument} \; \underbrace{(\lambda h\,c\, .\,h\;c)}_{zweites\;argument} \] d.h. wir w\"urden hier beim ersten Argument weitermachen und "mult" aufl\"osen (beim zweiten g\"abe es gerade auch gar nichts mehr zu machen) \subsection*{2) Typherleitung} \textbf{Typherleitung f\"ur:} \[ \{ \,mult\;:\; \mathrm{N}\rightarrow\mathrm{N}\rightarrow\mathrm{N},\; one\; : \; \mathrm{N},\,two\;\mathrm{N}\, \vdash \; \lambda n.\,n\,(\, mult \; two\,)\;one\,:\mathrm{N}\rightarrow \mathrm{N} \} \] \textbf{mit Sonderhinweis, dass die Chruch-Numerale in System F den folgenden Typ besitzen:} \[ \mathrm{N}\; := \; \forall a.(a\,\rightarrow \, a)\, \rightarrow \, a \, \rightarrow \,a \] \textbf{Herleitung:}\\ %Zeile 5 \underline{ $(5)\; \Gamma \;\cup \{\,n:\mathrm{N}\,\} \vdash \overbrace{ n\,:\,\forall a\,.\,(\,a\,\rightarrow\,a\,)\rightarrow (\,a\,\rightarrow \,a\,) }^{per\;Definition\; =\;\mathrm{N}} \hspace{8mm} \overbrace{ mult:\;\mathrm{N}\rightarrow \mathrm{N}\rightarrow \mathrm{N} }^{Ax} \hspace{5mm} \overbrace{ two:\;\mathrm{N} }^{Ax} $ }\\ %Zeile 4 \underline{ $(4)\; \Gamma \;\cup \{\,n:\mathrm{N}\,\} \vdash n\,:\,(\,\mathrm{N}\rightarrow \mathrm{N}\,) \rightarrow (\,\mathrm{N}\rightarrow \mathrm{N}\,) \hspace{25mm} mult\;two\;\mathrm{N}\rightarrow \mathrm{N} $ }\\ %Zeile 3 \underline{ $ (3)\; \Gamma \; \cup \{\,n:\mathrm{N}\,\}\, \vdash \, n\,(\,mult\;two\,)\,: \mathrm{N}\rightarrow\,\mathrm{N} \hspace{6cm} \;one\; : \mathrm{N} $ }\\ %Zeile 2 \underline{ $(2)\; \Gamma \; \cup \{\,n:\mathrm{N}\,\}\, \vdash \, n\,(\,mult\;two\,)\;one\; : \mathrm{N} $\hspace{48mm}} \\ %Zeile 1 $ (1)\; \{ \underbrace{ \,mult\;:\; \mathrm{N}\rightarrow\mathrm{N}\rightarrow\mathrm{N},\; one\; : \; \mathrm{N},\,two\;\mathrm{N}\, }_{:=\Gamma} \vdash \; \lambda n.\,n\,(\, mult \; two\,)\;one\,:\mathrm{N}\rightarrow\mathrm{N} $ \\ \textbf{Erkl\"arungen:}\\ (1) $\rightarrow_{i}$\\ (2)(3) $\rightarrow_e$\\ (3)(rechts)$[\,one:\mathrm{N}\,]$ mit Ax fertig\\ (4) $\forall _e$ (wir wissen, dass N : $(a->a)->a->a$ ist, und dass \{n : N ist\}; damit n hinten also mit dem Kontex aufgeht muss es von der Form $(a->a)->a->a$ sein)\\ (4)(links) $\forall_{e}$ (rechts) $\rightarrow_e$\\\\ \textbf{Eine \"Ubersicht der Regeln findet sich in den \"Ubungsfolien oder dem SS14 Spickzettel!} \end{document}