2023-06-09 15:40:08 +02:00
% ..............................................................................
% 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}%
%}
2023-06-16 13:56:30 +02:00
\usepackage [useregional] { datetime2}
2023-06-09 15:40:08 +02:00
2023-06-16 13:56:30 +02:00
\date { \DTMdisplaydate { 2023} { 6} { 5} { -1} }
2023-06-09 15:40:08 +02:00
% ================================================
% 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}
& not\, 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}
2023-06-16 13:56:30 +02:00
true & \text { falls } n \text { ungerade} \\
2023-06-09 15:40:08 +02:00
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 ) $ .
2023-06-16 13:56:30 +02:00
Reduzieren Sie den Term $ ( \lambda f. \, f \, I \, ( \Omega \, \Omega ) ) ( \lambda x \, y. \, x \, x ) $ mittels
2023-06-09 15:40:08 +02:00
\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}