511 lines
17 KiB
TeX
511 lines
17 KiB
TeX
|
% ..............................................................................
|
||
|
% Demo of the fau-beamer template.
|
||
|
%
|
||
|
% Copyright 2022 by Tim Roith <tim.roith@fau.de>
|
||
|
%
|
||
|
% This program can be redistributed and/or modified under the terms
|
||
|
% of the GNU Public License, version 2.
|
||
|
%
|
||
|
% ------------------------------------------------------------------------------
|
||
|
\documentclass[final]{beamer}
|
||
|
|
||
|
% ========================================================================================
|
||
|
% Theme: inner, outer, font and colors
|
||
|
% ----------------------------------------------------------------------------------------
|
||
|
\usepackage[institute=Tech,
|
||
|
%SecondLogo = template-art/FAUWortmarkeBlau.pdf,
|
||
|
%ThirdLogo = template-art/FAUWortmarkeBlau.pdf,
|
||
|
%WordMark=None,
|
||
|
aspectratio=169,
|
||
|
fontsize=11,
|
||
|
fontbaselineskip=13,
|
||
|
scale=1.
|
||
|
]{styles/beamerthemefau}
|
||
|
|
||
|
|
||
|
% ----------------------------------------------------------------------------------------
|
||
|
% Input and output encoding
|
||
|
\usepackage[T1]{fontenc}
|
||
|
\usepackage[utf8]{inputenc}
|
||
|
% ----------------------------------------------------------------------------------------
|
||
|
% Language settings
|
||
|
\usepackage[german]{babel}
|
||
|
|
||
|
% ========================================================================================
|
||
|
% Fonts
|
||
|
% - Helvet is loaded by styles/beamerfonts
|
||
|
% - We use serif for math environements
|
||
|
% - isomath is used for upGreek letters
|
||
|
% ----------------------------------------------------------------------------------------
|
||
|
\usepackage{isomath}
|
||
|
%\usefonttheme[onlymath]{serif}
|
||
|
\usepackage{mathpartir}
|
||
|
\usepackage{exscale}
|
||
|
\usepackage{anyfontsize}
|
||
|
\setbeamercolor{alerted text}{fg=BaseColor}
|
||
|
% ----------------------------------------------------------------------------------------
|
||
|
% custom commands for symbols
|
||
|
\usepackage{styles/symbols}
|
||
|
|
||
|
\usepackage{tikz-cd}
|
||
|
\usetikzlibrary{cd, babel}
|
||
|
|
||
|
% ========================================================================================
|
||
|
% Setup for Titlepage
|
||
|
% ----------------------------------------------------------------------------------------
|
||
|
\title[fau-beamer]{Theorie der Programmierung}
|
||
|
\subtitle{\texorpdfstring{Übung 06 - der (ungetypte) $\lambda$-Kalkül II}{Übung 06 - der (ungetypte) Lambda-Kalkül II}}
|
||
|
\author[L. Vatthauer]{
|
||
|
Leon Vatthauer}
|
||
|
%
|
||
|
|
||
|
% Instead of \institute you can also use the \thanks command
|
||
|
% ------------------------------------------------
|
||
|
%\author[T. Roith]{
|
||
|
%Tim Roith\thanks{Friedrich-Alexander Universität Erlangen-Nürnberg, Department Mathematik}\and%
|
||
|
%Second Author\thanks{Second Insitute}\and%
|
||
|
%Third Author\thanks{Third Insitute}%
|
||
|
%}
|
||
|
|
||
|
\date{\today}
|
||
|
|
||
|
|
||
|
% ================================================
|
||
|
% Bibliography
|
||
|
% ------------------------------------------------
|
||
|
\usepackage{csquotes}
|
||
|
\usepackage[style=alphabetic, %alternatively: numeric, numeric-comp, and other from biblatex
|
||
|
defernumbers=true,
|
||
|
useprefix=true,%
|
||
|
giveninits=true,%
|
||
|
hyperref=true,%
|
||
|
autocite=inline,%
|
||
|
maxcitenames=5,%
|
||
|
maxbibnames=20,%
|
||
|
uniquename=init,%
|
||
|
sortcites=true,% sort citations when multiple entries are passed to one cite command
|
||
|
doi=true,%
|
||
|
isbn=false,%
|
||
|
url=false,%
|
||
|
eprint=false,%
|
||
|
backend=biber%
|
||
|
]{biblatex}
|
||
|
\addbibresource{bibliography.bib}
|
||
|
\setbeamertemplate{bibliography item}[text]
|
||
|
\babeltags{en=english}
|
||
|
|
||
|
% ================================================
|
||
|
% Hyperref and setup
|
||
|
% ------------------------------------------------
|
||
|
\usepackage{hyperref}
|
||
|
\hypersetup{
|
||
|
colorlinks = true,
|
||
|
final=true,
|
||
|
plainpages=false,
|
||
|
pdfstartview=FitV,
|
||
|
pdftoolbar=true,
|
||
|
pdfmenubar=true,
|
||
|
pdfencoding=auto,
|
||
|
psdextra,
|
||
|
bookmarksopen=true,
|
||
|
bookmarksnumbered=true,
|
||
|
breaklinks=true,
|
||
|
linktocpage=true,
|
||
|
urlcolor=BaseColor,
|
||
|
citecolor=BaseColor,
|
||
|
linkcolor=BaseColor,
|
||
|
unicode = true
|
||
|
}
|
||
|
|
||
|
% ================================================
|
||
|
% Additional packages
|
||
|
% ------------------------------------------------
|
||
|
\usepackage{listings}
|
||
|
\usepackage{lstautogobble} % Fix relative indenting
|
||
|
\usepackage{color} % Code coloring
|
||
|
\usepackage{zi4} % Nice font
|
||
|
|
||
|
\definecolor{bluekeywords}{rgb}{0.13, 0.13, 1}
|
||
|
\definecolor{greencomments}{rgb}{0, 0.5, 0}
|
||
|
\definecolor{redstrings}{rgb}{0.9, 0, 0}
|
||
|
\definecolor{graynumbers}{rgb}{0.5, 0.5, 0.5}
|
||
|
\lstset{
|
||
|
autogobble=true,
|
||
|
columns=fullflexible,
|
||
|
showspaces=false,
|
||
|
showtabs=false,
|
||
|
breaklines=true,
|
||
|
showstringspaces=false,
|
||
|
breakatwhitespace=true,
|
||
|
escapeinside={(*@}{@*)},
|
||
|
commentstyle=\color{greencomments},
|
||
|
keywordstyle=\color{bluekeywords},
|
||
|
stringstyle=\color{redstrings},
|
||
|
numberstyle=\color{graynumbers},
|
||
|
basicstyle=\ttfamily\normalsize,
|
||
|
mathescape=true,
|
||
|
%frame=l,
|
||
|
framesep=12pt,
|
||
|
xleftmargin=.1\textwidth,%12pt,
|
||
|
tabsize=4,
|
||
|
captionpos=b
|
||
|
}
|
||
|
% end of listings setup
|
||
|
|
||
|
% ================================================
|
||
|
% Various custom commands
|
||
|
% ------------------------------------------------
|
||
|
%\setbeameroption{show notes on second screen}
|
||
|
\begingroup\expandafter\expandafter\expandafter\endgroup
|
||
|
\expandafter\ifx\csname pdfsuppresswarningpagegroup\endcsname\relax
|
||
|
\else
|
||
|
\pdfsuppresswarningpagegroup=1\relax
|
||
|
\fi
|
||
|
% Change color for cite locally
|
||
|
\newcommand{\colorcite}[3]{{\hypersetup{citecolor=#1}{\cite[#2]{#3}}}}
|
||
|
% ------------------------------------------------
|
||
|
% ================================================
|
||
|
% The main document
|
||
|
% ------------------------------------------------
|
||
|
\begin{document}
|
||
|
% Title page
|
||
|
\begin{frame}[t,titleimage]{-}
|
||
|
\titlepage%
|
||
|
\end{frame}
|
||
|
|
||
|
\newcommand{\isaeq}{=_\alpha^?}
|
||
|
\newcommand{\isbr}{\rightarrow_\beta^?}
|
||
|
|
||
|
\newcommand{\betared}{\rightarrow_\beta}
|
||
|
\newcommand{\alphaeq}{=_\alpha}
|
||
|
\newcommand{\deltared}{\rightarrow_\delta}
|
||
|
\newcommand{\etared}{\rightarrow_\eta}
|
||
|
\newcommand{\betadeltared}{\rightarrow_{\beta\delta}^*}
|
||
|
|
||
|
\newcommand{\ceil}[1]{\lceil {#1} \rceil}
|
||
|
|
||
|
\newcommand{\definitionAlphaEq}{
|
||
|
\begin{block}{$\alpha$-Äquivalenz}
|
||
|
Zwei Terme $t_1, t_2$ heißen $\alpha$-Äquivalent, wenn sie durch Umbenennung gebundener Variablen auseinander hervorgehen. Formal:
|
||
|
$$\lambda x.t \alphaeq \lambda y.t[y / x]\quad\text{wenn } y \not\in FV(t)$$
|
||
|
\end{block}
|
||
|
}
|
||
|
|
||
|
\newcommand{\definitionBetaReduction}{
|
||
|
\begin{block}{$\beta$-Reduktion}
|
||
|
Die $\beta$-Reduktion modelliert das Ausrechnen einer Funktionsanwendung, z.B: $(\lambda x.3 + x)\, 5 \betared 3 + 5$
|
||
|
|
||
|
Die Einschrittreduktion $\betared$ ist:
|
||
|
$$C((\lambda x.t)\,s) \rightarrow_\beta C(t[s / x])$$
|
||
|
\end{block}
|
||
|
}
|
||
|
\newcommand{\churchnumerals}{
|
||
|
\begin{block}{Church-Numerale}
|
||
|
\begin{equation*}\ceil{n} := \lambda f\,a.\underbrace{f(f(f(\ldots f}_n\, a)))\tag{1}\end{equation*}
|
||
|
\noindent
|
||
|
\begin{minipage}{0.45\textwidth}
|
||
|
\begin{align*}
|
||
|
&zero = \lambda f\,a.a\\
|
||
|
&succ\,n = \lambda f\,a.f\,(n\,f\,a)
|
||
|
\end{align*}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{0.45\textwidth}
|
||
|
\begin{alignat*}{2}
|
||
|
&one &&= succ\,zero\\
|
||
|
&two &&= succ\,one\\
|
||
|
&three &&= succ\,two\\
|
||
|
&four &&= succ\,three
|
||
|
\end{alignat*}
|
||
|
\end{minipage}
|
||
|
\end{block}
|
||
|
}
|
||
|
|
||
|
\AtBeginSection{}
|
||
|
\lstset{
|
||
|
morekeywords={if, then, else}
|
||
|
}
|
||
|
% Introduction
|
||
|
\section{Church-Numerale}
|
||
|
\begin{frame}[t, fragile]{Church-Numerale}
|
||
|
Wir betrachten erneut die Church-Kodierung natürlicher Zahlen vom vorigen Übungsblatt:
|
||
|
$$\ceil{n} := \lambda f\,a.\,\underbrace{f(f(f(\ldots f}_{n}\,a)))$$
|
||
|
mit einheitlicher Kodierung
|
||
|
|
||
|
\noindent
|
||
|
\begin{minipage}{.45\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
zero = $\lambda$ f a. a
|
||
|
succ n = $\lambda$ f a. f (n f a)
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{.45\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
one = succ zero
|
||
|
two = succ one
|
||
|
three = succ two
|
||
|
four = succ three
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
|
||
|
sowie den Operationen \texttt{add} und \texttt{mult} mit der entsprechenden Semantik.
|
||
|
\\\;\\
|
||
|
\textbf{Notation: } Von nun an schreiben wir \texttt{s + t} und \texttt{s * t} anstelle von \texttt{add s t} und \texttt{mult s t} und verwenden die $\beta\delta$-Regeln
|
||
|
\[
|
||
|
\ceil{n} + \ceil{m} \betadeltared \ceil{n + m} \qquad\qquad\qquad \ceil{n} * \ceil{m} \betadeltared \ceil{n \cdot m}
|
||
|
\]
|
||
|
\end{frame}
|
||
|
|
||
|
\section{Aufgabe 1 - Church-Kodierung von Booleans}
|
||
|
|
||
|
\begin{frame}[t]{Aufgabe 1.1}{Church-Kodierung von Booleans}
|
||
|
Boolesche Wahrheitswerte werden als $\lambda$-Terme wie folgt definiert:
|
||
|
\begin{alignat*}{2}
|
||
|
&true &&= \lambda x\,y.\,x\\
|
||
|
&false &&= \lambda x\,y.\,y\\
|
||
|
&ite &&= \lambda b\,x\,y.\,b\,x\,y
|
||
|
\end{alignat*}
|
||
|
\,\\
|
||
|
Zeigen Sie, das für alle $\lambda$-Terme $s$ und $t$ gilt:
|
||
|
|
||
|
\centering
|
||
|
$$ite\,true\,s\,t \betadeltared s\quad\quad\quad\quad\quad\quad ite\,false\,s\,t \betadeltared t$$
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
\begin{frame}[t]{Aufgabe 1.2}{Church-Kodierung von Booleans}
|
||
|
Boolesche Wahrheitswerte werden als $\lambda$-Terme wie folgt definiert:
|
||
|
\begin{alignat*}{2}
|
||
|
&true &&= \lambda x\,y.\,x\\
|
||
|
&false &&= \lambda x\,y.\,y\\
|
||
|
&ite &&= \lambda b\,x\,y.\,b\,x\,y
|
||
|
\end{alignat*}
|
||
|
\,\\
|
||
|
Vervollständigen Sie die folgenden Funktionsdefinitionen so, dass sie (unter normaler Reduktion) boolesche Negation, exklusives Oder und Implikation berechnen:
|
||
|
\begin{alignat*}{2}
|
||
|
¬\,b &&= \ldots\\
|
||
|
&xor\,b1\,b2 &&= \ldots\\
|
||
|
&imp\,b1\,b2 &&= \ldots
|
||
|
\end{alignat*}
|
||
|
\,\\
|
||
|
\textbf{Notation: } Von nun an schreiben wir „\textbf{if} $s$ \textbf{then} $t$ \textbf{else} $u$“ anstelle von „$ite\; s\; t\; u$“
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
\section{Aufgabe 2 - Rekursive Definitionen}
|
||
|
\begin{frame}[t]{Aufgabe 2}{Rekursive Definitionen}
|
||
|
|
||
|
In den meisten funktionalen Programmiersprachen sind \textit{rekursive} Funktionsdefinitionen zulässig, das heißt, die definierte Funktion darf auf der rechten Seite einer solchen Funktionsdefinition vorkommen.
|
||
|
Rekursive Funktionsdefinitionen entsprechen - wie in Übung 2, Blatt 5 - $\delta$-Reduktionen.
|
||
|
\\\,\\
|
||
|
\textbf{Hinweis.}\quad Nehmen Sie an, dass die Subtraktion von natürlichen Zahlen (in Form von Church-Numeralen) im $\lambda$-Kalkül darstellbar ist, d.h. für $n \geq 1$ gilt $\ceil{n} - \ceil{1} \betadeltared \ceil{n - 1}$,
|
||
|
und dass ebenso die üblichen Vergleichsoperationen möglich sind, d.h. $\ceil{n} \leq \ceil{1} \leftrightarrow_{\beta\delta}^* true$, wenn $n \leq 1$ usw. Siehe dazu Aufgabe 4.
|
||
|
\end{frame}
|
||
|
|
||
|
\newcommand{\hintone}{
|
||
|
\begin{block}{Hinweis}
|
||
|
\centering
|
||
|
$\ceil{n} - \ceil{1} \betadeltared \ceil{n - 1}$ für $n \geq 1$
|
||
|
\[
|
||
|
\ceil{n} \leq \ceil{m} \leftrightarrow_{\beta\delta}^*
|
||
|
\begin{cases}
|
||
|
true & \text{falls } n \leq m\\
|
||
|
false & \text{sonst}
|
||
|
\end{cases}
|
||
|
\]
|
||
|
\[
|
||
|
\ceil{n} == \ceil{m} \leftrightarrow_{\beta\delta}^*
|
||
|
\begin{cases}
|
||
|
true & \text{falls } n = m\\
|
||
|
false & \text{sonst}
|
||
|
\end{cases}
|
||
|
\]
|
||
|
\end{block}
|
||
|
}
|
||
|
|
||
|
\begin{frame}[t, fragile]{Aufgabe 2.1}{Rekursive Definitionen}
|
||
|
|
||
|
Wir betrachten die folgende rekursive Funktion:
|
||
|
\begin{lstlisting}
|
||
|
fact n = if n $\leq$ $\ceil{1}$ then $\ceil{1}$ else n * (fact (n - $\ceil{1}$))
|
||
|
\end{lstlisting}
|
||
|
\,\\
|
||
|
Zeigen Sie, dass $fact \ceil{3} \betadeltared \ceil{6}$.
|
||
|
\\\vfill
|
||
|
\hintone
|
||
|
\end{frame}
|
||
|
|
||
|
\begin{frame}[t, fragile]{Aufgabe 2.2}{Rekursive Definitionen}
|
||
|
|
||
|
Schreiben Sie eine rekursive Funktion $odd$, sodass:
|
||
|
\[
|
||
|
odd\,\ceil{n} = \begin{cases}
|
||
|
true & \text{falls } n \text{ gerade}\\
|
||
|
false & \text{sonst}
|
||
|
\end{cases}
|
||
|
\]
|
||
|
\hintone
|
||
|
\end{frame}
|
||
|
|
||
|
\begin{frame}[t, fragile]{Aufgabe 2.3}{Rekursive Definitionen}
|
||
|
|
||
|
Schreiben Sie eine rekursive Funktion $halve$, sodass:
|
||
|
\begin{lstlisting}[]
|
||
|
($\ceil{2}$ * halve $\ceil{n}$) + (if odd $\ceil{n}$ then $\ceil{1}$ else $\ceil{0}$) $\betadeltared$ $\ceil{n}$
|
||
|
\end{lstlisting}
|
||
|
\hintone
|
||
|
\end{frame}
|
||
|
|
||
|
\newcommand{\reductionstrats}{
|
||
|
\noindent\centering
|
||
|
\begin{minipage}{.48\textwidth}
|
||
|
\begin{block}{Applikative Reduktion $\rightarrow_a$}
|
||
|
\begin{itemize}
|
||
|
\item $(\lambda x.t)\,s \rightarrow_a t[s/x]$, wenn $t$ und $s$ normal
|
||
|
\item $\lambda x.t \rightarrow_a \lambda x.t'$, wenn $t \rightarrow_a t'$
|
||
|
\item $t\,s \rightarrow_a t'\,s$, wenn $t \rightarrow_a t'$\\\,\\
|
||
|
\item $t\,s \rightarrow_a t\,s'$, wenn $s \rightarrow_a s'$ und $t$ normal\\\,\\
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{.48\textwidth}
|
||
|
\begin{block}{Normale Reduktion $\rightarrow_n$}
|
||
|
\begin{itemize}
|
||
|
\item $(\lambda x.t)\,s \rightarrow_n t[s/x]$
|
||
|
\item $\lambda x.t \rightarrow_n \lambda x.t'$, wenn $t \rightarrow_n t'$
|
||
|
\item $t\,s \rightarrow_n t'\,s$, wenn $t \rightarrow_n t'$ und $t$ keine $\lambda$-Abstraktion
|
||
|
\item $t\,s \rightarrow_n t\,s'$, wenn $s \rightarrow_n s'$ und $t$ normal und keine $\lambda$-Abstraktion
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
\end{minipage}
|
||
|
}
|
||
|
|
||
|
\section{Aufgabe 3 - Auswertungsstrategien}
|
||
|
|
||
|
\begin{frame}[t]{Aufgabe 3}{Auswertungsstrategien}
|
||
|
|
||
|
In der Vorlesung haben Sie verschiedene Reduktionsstrategien für den ungetypten $\lambda$-Kalkül kennengelernt.
|
||
|
Diese unterscheiden sich hauptsächlich in den Zeitpunkten, zu denen $\beta$-Redexe \textit{kontrahiert} werden, also wann in einem Term die $\beta$-Regel angewandt wird.
|
||
|
\vfill
|
||
|
\reductionstrats
|
||
|
\end{frame}
|
||
|
|
||
|
|
||
|
\begin{frame}[t]{Aufgabe 3.1}{Auswertungsstrategien}
|
||
|
|
||
|
Welcher Redex im $\lambda$-Term
|
||
|
\begin{enumerate}
|
||
|
\item[(a)] $(\lambda x.\lambda y.\,y\,(\lambda z.\,x))\,(u\, u)\,(\lambda v.\,v\,((\lambda w.\,w)\,(\lambda w.\,w)))$
|
||
|
\item[(b)] $(\lambda u.\,u\,(\lambda y.\,z))\,(\lambda x.\,x\,((\lambda v.\,v)\,w))$
|
||
|
\end{enumerate}
|
||
|
muss nicht kontrahiert werden, um die Normalform zu erreichen? Reduzieren Sie den Term durch $\beta\delta$-Reduktion zur Normalform, ohne diesen Redex zu kontrahieren.
|
||
|
\vfill
|
||
|
\reductionstrats
|
||
|
\end{frame}
|
||
|
|
||
|
\begin{frame}[t]{Aufgabe 3.2}{Auswertungsstrategien}
|
||
|
|
||
|
Wir schreiben wie aus der Vorlesung bekannt $I = (\lambda x.\,x)$ und $\Omega = (\lambda x.\,x\,x)$.
|
||
|
|
||
|
Reduzieren Sie den Term $\lambda f.\,f\,I\,(\Omega\,\Omega)(\lambda x\,y.\,x\,x)$ mittels
|
||
|
\begin{enumerate}
|
||
|
\item[(a)] applikativer Reduktion,
|
||
|
\item[(b)] normaler Reduktion.
|
||
|
\end{enumerate}
|
||
|
Unterstreichen Sie in jedem Schritt den zu reduzierenden Redex. Betrachten Sie in dieser Aufgabe $\delta$-Reduktion als explizite Schritte!
|
||
|
\vfill
|
||
|
\reductionstrats
|
||
|
\end{frame}
|
||
|
|
||
|
\begin{frame}[t, fragile]{Aufgabe 3.3 a)}{Auswertungsstrategien}
|
||
|
|
||
|
Man erinnere sich an folgende auf Church-Kodierungen definierten Funktionen:
|
||
|
|
||
|
\lstset{
|
||
|
morecomment=[f][\color{greencomments}][0]{--}
|
||
|
}
|
||
|
\begin{minipage}{.2\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
-- Allgemein
|
||
|
twice = $\lambda$f x. f (f x)
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{.25\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
-- Church-Booleans
|
||
|
true = $\lambda$ x y. x
|
||
|
false = $\lambda$ x y. y
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{.45\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
-- Church-Paare
|
||
|
pair = $\lambda$ a b select. select a b
|
||
|
fst = $\lambda$ p. p ($\lambda$ x y. x)
|
||
|
snd = $\lambda$ p. p ($\lambda$ x y. y)
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
|
||
|
Geben Sie die ersten fünf $\beta\delta$-Reduktionsschritte des Terms
|
||
|
\begin{lstlisting}
|
||
|
twice fst (pair (pair true false) true)
|
||
|
\end{lstlisting}
|
||
|
unter \textbf{a) normaler} und b) applikativer Reduktion an. Markieren Sie (durch Unterstreichen) in jedem Schritt den zu reduzierenden Redex.
|
||
|
|
||
|
\begin{block}{Normale Reduktion $\rightarrow_n$}
|
||
|
\begin{itemize}
|
||
|
\item $(\lambda x.t)\,s \rightarrow_n t[s/x]$
|
||
|
\item $\lambda x.t \rightarrow_n \lambda x.t'$, wenn $t \rightarrow_n t'$
|
||
|
\item $t\,s \rightarrow_n t'\,s$, wenn $t \rightarrow_n t'$ und $t$ keine $\lambda$-Abstraktion
|
||
|
\item $t\,s \rightarrow_n t\,s'$, wenn $s \rightarrow_n s'$ und $t$ normal und keine $\lambda$-Abstraktion
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
\end{frame}
|
||
|
|
||
|
\begin{frame}[t, fragile]{Aufgabe 3.3 b)}{Auswertungsstrategien}
|
||
|
|
||
|
Man erinnere sich an folgende auf Church-Kodierungen definierten Funktionen:
|
||
|
|
||
|
\lstset{
|
||
|
morecomment=[f][\color{greencomments}][0]{--}
|
||
|
}
|
||
|
\begin{minipage}{.2\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
-- Allgemein
|
||
|
twice = $\lambda$f x. f (f x)
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{.25\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
-- Church-Booleans
|
||
|
true = $\lambda$ x y. x
|
||
|
false = $\lambda$ x y. y
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
\begin{minipage}{.45\textwidth}
|
||
|
\begin{lstlisting}
|
||
|
-- Church-Paare
|
||
|
pair = $\lambda$ a b select. select a b
|
||
|
fst = $\lambda$ p. p ($\lambda$ x y. x)
|
||
|
snd = $\lambda$ p. p ($\lambda$ x y. y)
|
||
|
\end{lstlisting}
|
||
|
\end{minipage}
|
||
|
|
||
|
Geben Sie die ersten fünf $\beta\delta$-Reduktionsschritte des Terms
|
||
|
\begin{lstlisting}
|
||
|
twice fst (pair (pair true false) true)
|
||
|
\end{lstlisting}
|
||
|
unter a) normaler und \textbf{b) applikativer} Reduktion an. Markieren Sie (durch Unterstreichen) in jedem Schritt den zu reduzierenden Redex.
|
||
|
|
||
|
\begin{block}{Applikative Reduktion $\rightarrow_a$}
|
||
|
\begin{itemize}
|
||
|
\item $(\lambda x.t)\,s \rightarrow_a t[s/x]$, wenn $t$ und $s$ normal
|
||
|
\item $\lambda x.t \rightarrow_a \lambda x.t'$, wenn $t \rightarrow_a t'$
|
||
|
\item $t\,s \rightarrow_a t'\,s$, wenn $t \rightarrow_a t'$
|
||
|
\item $t\,s \rightarrow_a t\,s'$, wenn $s \rightarrow_a s'$ und $t$ normal
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
\end{frame}
|
||
|
|
||
|
% input exmple sections
|
||
|
%\input{sections/01_Intro_Landscape}
|
||
|
\end{document}
|