2015-10-08 11:20:07 +02:00
\documentclass { article}
2015-10-07 21:10:52 +02:00
\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\\
2015-10-08 19:40:07 +02:00
- 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}
2015-10-07 21:10:52 +02:00
\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\\
2015-10-08 19:40:07 +02:00
& =\; (\, \lambda f\, a\, .\, f\, (\, f\, (\, f\; a\, ) \, )(mult\; \lambda g\, b\, .\, g\, (\, g\; b\, ))\; (\lambda h\, c\, .\, h\; c)
2015-10-07 21:10:52 +02:00
\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)
2015-10-07 23:00:28 +02:00
\subsection * { 2) Typherleitung}
2015-10-07 22:40:22 +02:00
\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 {
2015-10-08 19:40:07 +02:00
n\, :\, \forall a\, .\, (\, a\, \rightarrow \, a\, )\rightarrow (\, a\, \rightarrow \, a\, )
2015-10-07 22:40:22 +02:00
} ^ { per\; Definition\; =\; \mathrm { N} }
2015-10-08 12:07:30 +02:00
\hspace { 8mm}
2015-10-07 22:40:22 +02:00
\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} \, )
2015-10-08 12:07:30 +02:00
\hspace { 25mm}
2015-10-07 22:40:22 +02:00
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}
2015-10-07 21:10:52 +02:00
$
2015-10-07 22:40:22 +02:00
} \\
%Zeile 2
\underline {
$ ( 2 ) \;
\Gamma \; \cup \{ \, n:\mathrm { N} \, \} \,
2015-10-08 19:40:07 +02:00
\vdash \, n\, (\, mult\; two\, )\; one\; : \mathrm { N}
2015-10-07 22:40:22 +02:00
$ \hspace { 48 mm } }
2015-10-07 21:10:52 +02:00
\\
%Zeile 1
2015-10-07 22:40:22 +02:00
$ ( 1 ) \;
\{
\underbrace {
\, mult\; :\;
\mathrm { N} \rightarrow \mathrm { N} \rightarrow \mathrm { N} ,\;
one\; : \; \mathrm { N} ,\, two\; \mathrm { N} \,
} _ { :=\Gamma }
2015-10-07 21:10:52 +02:00
\vdash \; \lambda n.\, n\, (\, mult \; two\, )\; one\, :\mathrm { N} \rightarrow \mathrm { N}
2015-10-07 22:40:22 +02:00
$
\\
\textbf { Erkl\" arungen:} \\
2015-10-08 12:07:30 +02:00
(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 $ \\ \\
2015-10-07 23:00:28 +02:00
\textbf { Eine \" Ubersicht der Regeln findet sich in den \" Ubungsfolien oder dem SS14 Spickzettel!}
2015-10-08 12:07:30 +02:00
2015-10-07 21:10:52 +02:00
\end { document}