forked from MartinThoma/LaTeX-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c181e1f
commit 8b909ca
Showing
7 changed files
with
115 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
%!TEX root = Programmierparadigmen.tex | ||
\chapter{Typinferenz} | ||
\begin{definition}[Datentyp]\index{Typ|see{Datentyp}}\xindex{Datentyp}% | ||
Ein \textit{Datentyp} oder kurz \textit{Typ} ist eine Menge von Werten, mit | ||
denen eine Bedeutung verbunden ist. | ||
\end{definition} | ||
|
||
\begin{beispiel}[Datentypen] | ||
\begin{itemize} | ||
\item $\text{\texttt{bool}} = \Set{\text{True}, \text{False}}$ | ||
\item $\text{\texttt{char}} = \text{vgl. \cpageref{sec:ascii-tabelle}}$ | ||
\item $\text{\texttt{int}}_{\text{Haskell}} = [-2^{29}, 2^{29}-1] \cap \mathbb{N}$ | ||
\item $\text{\texttt{int}}_{\text{C90}} = [-2^{15}-1, 2^{15}-1] \cap \mathbb{N}$\footnote{siehe ISO/IEC 9899:TC2, Kapitel 7.10: Sizes of integer types <limits.h>} | ||
\item \texttt{float} = siehe IEEE 754 | ||
\item Funktionstypen, z.~B. $\text{\texttt{int}} \rightarrow \text{\texttt{int}}$ oder | ||
$\text{\texttt{char}} \rightarrow \text{\texttt{int}}$ | ||
\end{itemize} | ||
\end{beispiel} | ||
|
||
\underline{Hinweis:} Typen sind unabhängig von ihrer Repräsentation. So kann ein | ||
\texttt{bool} durch ein einzelnes Bit repräsentiert werden oder eine Bitfolge | ||
zugrunde liegen. | ||
|
||
Auf Typen sind Operationen definiert. So kann man auf numerischen Typen eine | ||
Addition (+), eine Subtraktion (-), eine Multiplikation (*) und eine Division (/) | ||
definieren.\\ | ||
Ich schreibe hier bewusst \enquote{eine} Multiplikation und nicht \enquote{die} | ||
Multiplikation, da es verschiedene Möglichkeiten gibt auf Gleitpunktzahlen | ||
Multiplikationen zu definieren. So kann man beispielsweise die Assoziativität | ||
unterschiedlich wählen. | ||
|
||
\begin{beispiel}[Multiplikation ist nicht assoziativ] | ||
In Python 3 ist die Multiplikation linksassoziativ. Also: | ||
\inputminted[numbersep=5pt, tabsize=4]{python}{scripts/python/multiplikation.py} | ||
\end{beispiel} | ||
|
||
\begin{definition}[Typvariable]\xindex{Typvariable}% | ||
Eine Typvariable repräsentiert einen Typen. | ||
\end{definition} | ||
|
||
\underline{Hinweis:} Üblicherweise werden kleine griechische Buchstaben ($\alpha, \beta, \tau_1, \tau_2, \dots$) als Typvariablen gewählt. | ||
|
||
Genau wie Typen bestimmte Operationen haben, die auf ihnen definiert sind, | ||
kann man sagen, dass Operationen bestimmte Typen, auf die diese Anwendbar sind. So ist | ||
\[\alpha+\beta\] | ||
für numerische $\alpha$ und $\beta$ wohldefiniert, auch wenn $\alpha$ und $\beta$ boolesch sind | ||
oder beides Strings sind könnte das Sinn machen. Es macht jedoch z.~B. keinen Sinn, | ||
wenn $\alpha$ ein String ist und $\beta$ boolesch. | ||
|
||
Die Menge aller Operationen, die auf die Variablen angewendet werden, nennt man | ||
\textbf{Typkontext}\xindex{Typkontext}. Dieser wird üblicherweise mit $\Gamma$ | ||
bezeichnet. | ||
|
||
Das Ableiten einer Typisierung für einen Ausdruck nennt man \textbf{Typinferenz}\xindex{Typinferenz}. | ||
Man schreibt: $\vdash(\lambda x.2): \alpha \rightarrow \text{int}$. | ||
|
||
Bei solchen Ableitungen sind häufig viele Typen möglich. So kann der Ausdruck | ||
\[\lambda x.2\] | ||
Mit folgenderweise typisiert werden: | ||
\begin{itemize} | ||
\item $\vdash(\lambda x.2): \text{bool} \rightarrow int$ | ||
\item $\vdash(\lambda x.2): \text{int} \rightarrow int$ | ||
\item $\vdash(\lambda x.2): \text{Char} \rightarrow int$ | ||
\item $\vdash(\lambda x.2): \alpha \rightarrow int$ | ||
\end{itemize} | ||
|
||
In der letzten Typisierung stellt $\alpha$ einen beliebigen Typen dar. | ||
|
||
Ein Typkontext $\Gamma$ ordnet jeder freien Variable $x$ einen Typ $\Gamma(x)$ | ||
durch folgende Regeln zu: | ||
|
||
\begin{align*} | ||
\text{\texttt{CONST}}:&\frac{c \in \text{Const}}{\Gamma \vdash c: \tau_c}\\ | ||
\text{\texttt{VAR}}: &\frac{\Gamma(x) = \tau}{\Gamma \vdash c: \tau}\\ | ||
\text{\texttt{ABS}}: &\frac{\Gamma, x: \tau_1 \vdash t: \tau_2}{\Gamma \vdash \lambda x. t: \tau_1 \rightarrow \tau_2}\\ | ||
\text{\texttt{APP}}: &\frac{\Gamma \vdash t_1, \tau_2 \tau\;\;\; \Gamma \vdash t_2: \tau_2}{\Gamma \vdash t_1 t_2: \tau} | ||
\end{align*} | ||
|
||
Dabei ist der lange Strich kein Bruchstrich, sondern ein Symbol der Logik das als | ||
\textbf{Schlussstrich}\xindex{Schlussstrich} bezeichnet wird. Dabei ist der | ||
Zähler als Voraussetzung und der Nenner als Schlussfolgerung zu verstehen. | ||
|
||
\begin{definition}[Typsubstituition]\xindex{Typsubstituition}% | ||
Eine \textit{Typsubstituition} ist eine endliche Abbildung von Typvariablen auf | ||
Typen. | ||
\end{definition} | ||
|
||
Für eine Menge von Typsubsitutionen wird überlicherweise $\sigma$ als Symbol | ||
verwendet. Man schreibt also beispielsweise: | ||
\[\sigma = [\alpha_1 \text{\pointer} \text{\texttt{bool}}, \alpha_2 \text{\pointer} \alpha_1 \rightarrow \alpha_1]\] | ||
|
||
\begin{definition}[Lösung eines Typkontextes] | ||
Sei $t$ eine beliebige freie Variable, $\tau = \tau(t)$ ein beliebiger Typ | ||
$\sigma$ eine Menge von Typsubstitutionen und $\Gamma$ ein Typkontext. | ||
|
||
$(\sigma, \tau)$ heißt eine Lösung für $(\Gamma, t)$, falls gilt: | ||
\[\sigma \Gamma \vdash t : \tau\] | ||
\end{definition} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
documents/Programmierparadigmen/scripts/python/multiplikation.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
>>> 0.1*0.1*0.3 | ||
0.0030000000000000005 | ||
>>> (0.1*0.1)*0.3 | ||
0.0030000000000000005 | ||
>>> 0.1*(0.1*0.3) | ||
0.003 |