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}
2023-06-09 17:05:14 +02:00
%\usefonttheme[onlymath]{serif}
2023-06-09 15:40:08 +02:00
\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}
2023-06-09 17:05:14 +02:00
\subtitle { \texorpdfstring { Übung 07 - Der einfach getypte $ \lambda $ -Kalkül} { Übung 05 - Der einfach getypte Lambda-Kalkül} }
2023-06-09 15:40:08 +02:00
\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,
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
}
2023-06-09 17:05:14 +02:00
\usepackage { mathpartir}
\usepackage { enumerate}
2023-06-09 15:40:08 +02:00
% 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}
}
2023-06-09 17:05:14 +02:00
\newcommand { \typing } {
\begin { block} { Typisierung}
Wir lesen $ \Gamma \vdash t : \alpha $ als „im Kontext $ \Gamma $ hat der Term $ t $ den Typ $ \alpha $ “ und definieren diese Relation wie folgt:
\[
\begin { array} { c c}
\infer * [left=\text { (Ax)} , right=\text { ($ x : \alpha \in \Gamma $ )} ]{ \; } { \Gamma \vdash x : \alpha } & \infer * [left=\text { ($ \rightarrow _ i $ )} ] { \Gamma [x\mapsto \alpha] \vdash t : \beta } { \Gamma \vdash \lambda x.t : \alpha \rightarrow \beta } \\
\\
\multicolumn { 2} { c} {
\infer * [left=\text { ($ \rightarrow _ e $ )} ] { \Gamma \vdash t : \alpha \rightarrow \beta \\ \Gamma \vdash s : \alpha } { \Gamma \vdash t\; s : \beta }
}
\end { array}
\]
\end { block}
}
\newcommand { \inversionlemma } {
\begin { block} { Inversionslemma}
\begin { enumerate}
\item Wenn $ \Gamma \vdash x : \alpha $ , dann $ x : \alpha \in \Gamma $
\item Wenn $ \Gamma \vdash t \; s : \beta $ , dann existiert $ \alpha $ mit $ \Gamma \vdash t : \alpha \rightarrow \beta $ und $ \Gamma \vdash s : \alpha $
\item Wenn $ \Gamma \vdash \lambda x.t : \gamma $ , dann hat $ \gamma $ die Form $ \gamma = \alpha \rightarrow \beta $ und $ \Gamma [ x \mapsto \alpha ] \vdash t : \beta $
\end { enumerate}
\end { block}
}
\newcommand { \algorithmw } {
\begin { block} { Algorithmus W nach Hindley/Milner}
Wir definieren rekursiv eine Menge $ PT ( \Gamma ;t; \alpha ) $ von Typgleichungen, so dass der mgu $ \sigma = \mathbf { mgu } ( PT ( \Gamma ;t; \alpha ) ) $ die allgemeinste Lösung von $ \Gamma \vdash t : \alpha $ liefert (wenn eine Lösung existiert).
\begin { enumerate}
\item $ PT ( \Gamma ; \; x; \; \alpha ) = \{ \alpha \unif \beta \; \vert \; x : \beta \in \Gamma \} $
\item $ PT ( \Gamma ; \; \lambda x.t; \; \alpha ) = PT ( ( \Gamma [ x \mapsto a ] ) ; \; t; \; b ) \cup \{ a \rightarrow b \unif \alpha \} $ , mit $ a, b $ frisch
\item $ PT ( \Gamma ; \; t \; s; \; \alpha ) = PT ( \Gamma ; \; t; \; a \rightarrow \alpha ) \cup PT ( \Gamma ; \; s; \; a ) $ , mit $ a $ frisch
\end { enumerate}
\end { block}
}
\newcommand { \unif } { \overset { .} { =} }
2023-06-09 15:40:08 +02:00
\AtBeginSection { }
% Introduction
2023-06-09 17:05:14 +02:00
\section { Der einfach getypte Lambda-Kalkül}
\begin { frame} [t, fragile]{ Der einfach getypte $ \lambda $ -Kalkül $ ( \lambda \rightarrow ) $ } { Definitionen}
\begin { block} { Typen}
Sei $ \mathbf { V } $ eine Menge von \textit { Typvariablen} $ a,b, $ etc. und $ \mathbf { B } $ eine Menge von Basistypen, etwa $ \mathbf { Bool, Int } $ . Die Grammatik für Typen $ \alpha , \beta , \ldots $ ist dann
$$ \alpha , \beta :: = a \; \vert \; \mathbf { b } \; \vert \; \alpha \rightarrow \beta \qquad ( \mathbf { b } \in \mathbf { B } , a \in \mathbf { V } ) $$
\end { block}
\begin { block} { Notation}
Im Gegensatz zur Applikation von $ \lambda $ -Termen, welche links-assoziativ ist (also $ add \; 5 \; 3 = ( add \; 5 ) \; 3 $ ),
ist der Funktionspfeil rechts-assoziativ, also $ \alpha \rightarrow \beta \rightarrow \gamma = \alpha \rightarrow ( \beta \rightarrow \gamma ) $
\end { block}
\begin { block} { Kontext}
Ein \textit { (Typ-)Kontext} ist eine Menge
$$ \Gamma = \{ x _ 1 : \alpha _ 1 ; \ldots ; x _ n : \alpha _ n \} $$
\end { block}
\end { frame}
\begin { frame} [t, fragile]{ Der einfach getypte $ \lambda $ -Kalkül $ ( \lambda \rightarrow ) $ } { Definitionen}
\typing
\inversionlemma
\end { frame}
\section { Aufgabe 1 - Typprüfung einfach getypter Terme}
\begin { frame} [t, fragile]{ Aufgabe 1} { Typprüfung einfach getypter Terme}
Zeigen Sie, dass die folgenden Aussagen zutreffen, indem Sie jeweils eine korrekte Typherleitung angeben.
2023-06-09 15:40:08 +02:00
\begin { enumerate}
2023-06-09 17:05:14 +02:00
\item $ x : \texttt { int } , add : \texttt { int } \rightarrow \texttt { int } \rightarrow \texttt { int } \vdash \lambda y.add \; x \; ( add \; x \; y ) : \texttt { int } \rightarrow \texttt { int } $
\item $ \vdash \lambda xy.x : \alpha \rightarrow \beta \rightarrow \alpha $ , für alle Typen $ \alpha , \beta $
2023-06-09 15:40:08 +02:00
\end { enumerate}
2023-06-09 17:05:14 +02:00
\vfill
\typing
2023-06-09 15:40:08 +02:00
\end { frame}
2023-06-09 17:05:14 +02:00
\section { Prinzipaltyp}
\begin { frame} [t, fragile]{ Algorithmus W nach Hindley/Milner}
\begin { block} { Prinzipaltyp}
Es sei $ t $ ein $ \lambda $ -Term und $ \Gamma $ ein Kontext; wir sagen, dass $ \alpha $ der \textit { Prinzipaltyp} (engl. \textit { principal type} ) von $ t $ ist,
wenn
\begin { enumerate}
\item $ \Gamma \vdash t : \alpha $
\item $ \alpha $ allgemeiner ist als jeder Typ $ \beta $ mit $ \Gamma \vdash t : \beta $
\end { enumerate}
d.h. wenn jedes solche $ \beta $ sich durch Substitution von Typvariablen aus $ \alpha $ erzeugen lässt. Beispielsweise ist $ a \rightarrow b \rightarrow a $ (für Typvariablen $ a $ und $ b $ ) der Prinzipaltyp von $ \lambda xy.x $ .
\end { block}
\algorithmw
\end { frame}
\section { Aufgabe 2 - Inferenz von Prinzipaltypen}
\begin { frame} [t, fragile]{ Aufgabe 2} { Inferenz von Prinzipaltypen}
Leiten Sie den Prinzipaltyp der folgenden $ \lambda $ -Terme in dem jeweils gegebenen Kontext her
\begin { enumerate}
\item $ \Gamma = \emptyset , t = \lambda x y z.x \; ( y \; z ) $
\item $ \Gamma = \{ add : \texttt { int } \rightarrow \texttt { int } \rightarrow \texttt { int } , length : \texttt { string } \rightarrow \texttt { int } \} , t = \lambda x. add \; ( length \; x ) $
\end { enumerate}
\vfill
\algorithmw
2023-06-09 15:40:08 +02:00
\end { frame}
2023-06-09 17:05:14 +02:00
\section { Aufgabe 3 - Type Inhabitation und untypisierbare Terme}
\begin { frame} [t, fragile]{ Aufgabe 3.1} { Type Inhabitation und untypisierbare Terme}
Das zur Typinferenz symmetrische Problem ist das Problem der \foreignlanguage { english} { \textit { type inhabitation} } ,
d.h. das Problem, einen $ \lambda $ -Term eines gegebenen Typs zu finden, falls ein solcher Term existiert.
\\ Im Folgenden bezeichnen $ p $ , $ q $ und $ r $ Typvariablen.
\\ \; \\
Finden Sie für jeden der folgenden Typen $ \alpha $ einen $ \lambda $ -Term $ s $ , sodass $ \vdash s : \alpha $ .
\begin { enumerate} [(a)]
\item $ p \rightarrow p $
\item $ p \rightarrow ( q \rightarrow p ) $
\item $ ( p \rightarrow ( q \rightarrow r ) ) \rightarrow ( p \rightarrow q ) \rightarrow p \rightarrow r $
\item $ ( ( p \rightarrow q ) \rightarrow r ) \rightarrow q \rightarrow r $
\end { enumerate}
\end { frame}
\begin { frame} [t, fragile]{ Aufgabe 3.2} { Type Inhabitation und untypisierbare Terme}
Im Gegenzug dazu gibt es auch Terme, denen man keinen Typ zuordnen kann.
Verwenden Sie das Inversionslemma aus der Vorlesung, um zu zeigen, dass:
\begin { enumerate} [(a)]
\item $ \not \vdash \lambda x.x \; x : \alpha $ , für jeden Typ $ \alpha $ .
\item $ y : \texttt { char } \not \vdash \lambda x.y \; x : \alpha $ , für jeden Typ $ \alpha $ .
\end { enumerate}
\vfill
\inversionlemma
\end { frame}
2023-06-09 15:40:08 +02:00
% input exmple sections
%\input{sections/01_Intro_Landscape}
\end { document}