diff --git a/Braindump.tex b/Braindump.tex index f9e69dac1924abb8459600860f4ce0875dfb6202..e6a375ca3d3943b62a98052d324de0da476c11b4 100644 --- a/Braindump.tex +++ b/Braindump.tex @@ -62,24 +62,56 @@ Wir erinnern an einige im $\lambda$-Kalkül definierte Funktionen: \end{enumerate} \section*{Aufgabe 3} - +Wir betrachten den Datentyp der Listen~$List\;a$: +\begin{align*} + &\text{data} \; List\;a \; \text{where} \\ + &\hspace{10pt}nil :\; ()\; \rightarrow\; List\;a \\ + &\hspace{10pt}cons :\; a\; \rightarrow\; List\;a\rightarrow\; List\;a. +\end{align*} % XXX: Defintionen von Funktionen über Listen - -Zeigen Sie mittels struktureller Induktion, dass +Zusätzlich seien die folgenden Funktionen auf Listen definiert: \begin{align*} - flatten (map \; (map \; f) \; xss) = map \; f \; (flatten \; xss) % XXX: Richtige Frage? + &concat:\; List\;a\rightarrow\;List\;a\rightarrow\;List\;a\; \text{where}\\ + &\hspace{10pt}concat \;nil\; ys = ys\\ + &\hspace{10pt}concat\; (cons\; x\; xs) \;ys = cons\;x\; (concat\; xs\; ys)\\[15pt] + &flatten:\; List\;(List\;a)\rightarrow\;List\;a\; \text{where}\\ + &\hspace{10pt}flatten\; nil = nil\\ + &\hspace{10pt}flatten\; (cons\; xs\; xss) = concat\; xs\; (flatten\; xss)\\[15pt] + &map:\; (a \rightarrow b) \rightarrow List\;a\rightarrow\;List\;b\; \text{where}\\ + &\hspace{10pt}map\; f \;nil\; = nil\\ + &\hspace{10pt}map\; f \; (cons\; x\; xs) \; = cons\; (f\;x) (map\; f \; xs) \end{align*} -für alle $f$, $xss$ gilt. + +\begin{enumerate} + \item Zeigen Sie mittels struktureller Induktion, dass + \begin{align*} + flatten (map \; (map \; f) \; xss) = map \; f \; (flatten \; xss) % XXX: Richtige Frage? + \end{align*} + für alle $f$, $xss$ gilt. + \item Eine Liste natürlicher Zahlen $s:\;List\; Int\;$ ist \emph{steep}, wenn der jeweils nächste + $Int$ größer ist als der vorherige, d.h. die Liste der natürlichen Zahlen ist aufsteigend sortiert.\\ + %\begin{align*} + %(head \; s) < head (tail \; s). + %\end{align*} % XXX: Defintion okay? + Schreiben Sie eine Funktion $steep' s$, die $True$ zurückgibt, + wenn $s$ \emph{steep} ist. Hierfür ist folgendes Gerüst zu verwenden: + \begin{align*} + steep' &= snd. \; fold \; c \; g \; \text{where} \\ + c &= &:: (Nat, Bool) \\ + g &= &:: Nat \rightarrow (Nat, \; Bool) \rightarrow (Nat, \; Bool) \\ + \end{align*} +\end{enumerate} + +\newpage \section*{Aufgabe 4} Wir betrachten den Kodatentyp~$IntStream$: \begin{align*} - \text{codata} \; IntStream \; \text{where} \\ - head (Cons \; x \; xs) &= x \\ - tail (Cons \; x \; xs) &= xs + &\text{codata} \; IntStream \; \text{where} \\ + &\hspace{10pt}head :\; IntStream\; \rightarrow\; Int \\ + &\hspace{10pt}tail :\; IntStream \; \rightarrow \; IntStream. \end{align*} -mit $x \in Int$ und $x \in IntStream$. Gegeben sind weiterhin folgende auf $IntStream$ definierte Funktionen: \begin{align*} @@ -87,25 +119,24 @@ Gegeben sind weiterhin folgende auf $IntStream$ definierte Funktionen: tail (alt \; a \; b) &= alt \; b \; a \\ head (const \; i) &= i \\ tail (const \; i) &= const \; i \\ - head (s \boxplus t) &= (head \; s) \boxplus (head \; t) \\ + head (s \boxplus t) &= (head \; s) + (head \; t) \\ tail (s \boxplus t) &= (tail \; s) \boxplus (tail \; t) \\ - head (psum \; s) &= s \\ % XXX: Schwer lesbar in den Aufzeichnungen + head (psum \; s) &= head s \\ % XXX: Schwer lesbar in den Aufzeichnungen tail (psum \; s) &= (const (head \; s)) \boxplus (psum (tail \; s)) \end{align*} \begin{enumerate} - \item Ein $IntStream \; s$ ist \emph{steep}, wenn der jeweils nächste - $Int$ größer ist als der vorherige, d.h. - \begin{align*} - (head \; s) < head (tail \; s). - \end{align*} % XXX: Defintion okay? - Schreiben Sie eine Funktion $steep' s$, die $True$ zurückgibt, - wenn $s$ \emph{steep} ist. Hierfür ist folgendes Gerüst zu verwenden: - \begin{align*} - steep' &= snd. \; fold \; c \; g \; \text{where} \\ - c &= &:: (Nat, Bool) \\ - g &= &:: (Nat \rightarrow (Nat, \; Bool) \rightarrow (Nat, \; Bool) \\ - \end{align*} - \item Irgendetwas mit Koinduktion zeigen % XXX: TODO + \item Definieren Sie den Begriff $Bisimulation$ über dem Typ $IntStream$. + \item Zeigen Sie mittels Koinduktion: + \begin{align*} + psum\; (alt\; 1\; (-1)) &= alt\; 1\; 0 + \end{align*} + \textit{Hinweis: Sie dürfen ohne Beweis verwenden, dass gilt + \begin{align*} + (const\; a) \boxplus (const\; b) &= const (a+b)\\ + r \boxplus (s \boxplus t) &= (r \boxplus s) \boxplus t\\ + (r \boxplus s) \boxplus t &= r \boxplus (s \boxplus t)\\ + \end{align*} + } \end{enumerate} \section*{Aufgabe 5} @@ -122,3 +153,4 @@ an und erläutern Sie, warum dieser $L$ definiert. Andernfalls zeigen Sie mittels des Pumping-Lemma, dass $L$ nicht regulär ist. \end{document} + diff --git a/meta.tex b/meta.tex index dbff18a6e8cba1f09b7f3fb33665083079198f38..748eb96e7d8186e4cfc195c7c052e986f5c83140 100644 --- a/meta.tex +++ b/meta.tex @@ -11,7 +11,10 @@ % Math and special characters \usepackage{amsfonts} \usepackage{amssymb} -\usepackage{mathtools} +\usepackage{amsthm} +\usepackage{amsmath} +\usepackage{listings} +%\usepackage{mathtools} % Links \usepackage{hyperref}