summaryrefslogtreecommitdiff
path: root/presentation.tex
diff options
context:
space:
mode:
Diffstat (limited to 'presentation.tex')
-rw-r--r--presentation.tex351
1 files changed, 351 insertions, 0 deletions
diff --git a/presentation.tex b/presentation.tex
new file mode 100644
index 0000000..3eddd70
--- /dev/null
+++ b/presentation.tex
@@ -0,0 +1,351 @@
1\section{Einführung}
2
3\begin{frame}
4 \frametitle{Tl;dr}
5
6 \begin{itemize}
7 \item Inkrementelle Parser agieren auf \emph{edits} von Ein- und Ausgaben
8 \item Edit-Lenses sind algebraische Struktur für deartige Programme
9 \item DFSTs sind spezielle Parser, schwach genug um immer auch inkrementell zu sein
10 \item Darstellung von DFSTs als edit-lenses als Proof of Concept
11 \end{itemize}
12\end{frame}
13
14\begin{frame}
15 \frametitle{Struktur}
16 \begin{enumerate}
17 \item Begriffe/Definitionen
18 \begin{itemize}
19 \item Parser, Inkrementelle Parser
20 \item Funktionale Linsen, edit-lenses
21 \end{itemize}
22 \item Motivation
23 \item Inhalt der Arbeit
24 \begin{itemize}
25 \item Inkrementelle Parser als edit-lenses für DFSTs
26 \end{itemize}
27 \item Demonstration
28 \begin{itemize}
29 \item Interaktiver Editor unter einer edit-lens
30 \end{itemize}
31 \item Skizze des Verfahrens aus der Arbeit
32 \begin{itemize}
33 \item Komplement-Konstruktion für DFSTs
34 \item $\Rrightarrow$ und $\Lleftarrow$
35 \end{itemize}
36 \item Weiterführendes
37 \end{enumerate}
38\end{frame}
39
40\begin{frame}
41 \frametitle{Inkrementelle Parser}
42
43 \begin{defn}[Parser]
44 Jedes Programm vom Typ $\Sigma^\star \to a$
45 \note[item]{Programme, die Strings analysieren und eine Struktur produzieren}
46 \end{defn}
47
48 \begin{defn}[Inkrementelle Parser]
49 Vermeiden komplette Re-analyse bekannter Eingabe-Texte
50
51 Für unsere Zwecke\footnote{Mit $\delta(x)$ immer einer geeigneten Sprache von edits über $x$}:
52 \[
53 \delta ( \Sigma^\star ) \to \delta ( a )
54 \]
55 \end{defn}
56\end{frame}
57
58\begin{frame}
59 \begin{defn}[Funktionale Linsen]
60 Eine Linse auf ein $a$ \emph{innerhalb} eines größeren $s$:
61 \begin{align*}
62 G & \colon s \to a \\
63 P & \colon (a \to a) \to (s \to s)
64 \end{align*}
65 \note[item]{Zum Verständnis: nimm $s$ als Klasse/Struct und $a$ als Attribut davon}
66 \begin{itemize}
67 \item Bidirektional
68 \item \emph{fokussiert} Teil der großen Struktur $s$
69 \item Projektion und Update-Propagator
70 \item $P$ und $G$ sind \emph{well-behaved}
71 \end{itemize}
72 \end{defn}
73\end{frame}
74
75\begin{frame}
76 \begin{defn}[edit-lenses]
77 \begin{align*}
78 \Rrightarrow & \colon \delta(s) \times C \to \delta(a) \times C \\
79 \Lleftarrow & \colon \delta(a) \times C \to \delta(s) \times C
80 \end{align*}
81 Mit $C$ dem \emph{Komplement}\footnote{\emph{View-Update-Problem} für DBS}, die zusätzlich zu den Edits $\delta(s)$, bzw. $\delta(a)$ notwendige Information um neues $a$ bzw. $s$ zu konstruieren
82 \begin{itemize}
83 \item Bidirektional
84 \item Edit-Propagatoren in beide Richtungen
85 \item Edits haben \emph{Algebraische Struktur}
86 \item $\Rrightarrow$ und $\Lleftarrow$ sind \emph{well-behaved}
87 \end{itemize}
88 \note[item]{$\delta(s)$ ist Speziallfall von $s \to s$}
89 \end{defn}
90\end{frame}
91
92\begin{frame}[fragile]
93
94 \frametitle{Edit-Konversationen}
95 \framesubtitle{Vereinfacht, ohne Komplement}
96
97 \begin{figure}
98 \centering
99 \pinclude{presentation/editconv.tex}
100 \end{figure}
101
102\end{frame}
103
104\begin{frame}
105 \frametitle{FSTs}
106
107 \begin{defn}[Finite state transducer]
108 Endliche Automaten mit Ausgabe-Symbolen an Zustansübergängen annotiert.
109 \note[item]{\emph{Determinismus} analog zu DFAs}
110 \end{defn}
111
112%% \begin{eg}
113%% \centering
114%% \begin{tikzpicture}[->,auto,node distance=2.5cm]
115%% \node[initial,state] (0) {$A$};
116%% \node[state,accepting] (1) [right of=0] {$B$};
117%% \node[state,initial,accepting,initial where=right] (2) [right of=1] {$C$};
118
119%% \path (0) edge [loop above] node {$(a, x)$} (0)
120%% (0) edge node {$(a, y)$} (1)
121%% (1) edge [bend left=20] node [above] {$(a, z)$} (2)
122%% (1) edge [bend right=20] node [below] {$(b, z)$} (2)
123%% (2) edge [loop above] node {$(\epsilon, z)$} (2);
124%% \end{tikzpicture}
125%% \note[item]{Beispiel ist \emph{nicht} deterministisch}
126%% \note[item]{Beispiel hat zwei initiale Zustände}
127%% \note[item]{Beispiel hat zwei akzeptierende Zustände}
128%% \note[item]{$a^{+}(a \mid b)^{?} \to x^{n}(yz^{+})^{?} \mid z^\star$}
129%% %% \begin{tikzpicture}[->,auto,node distance=2.5cm]
130%% %% \node[initial,state] (0) {$A$};
131%% %% \node[state,accepting] (1) [right of=0] {$B$};
132%% %% \node[state,accepting] (2) [right of=1] {$C$};
133
134%% %% \path (0) edge node {$(a, y)$} (1)
135%% %% (1) edge [bend left=20] node [above] {$(a, z)$} (2)
136%% %% (1) edge [bend right=20] node [below] {$(b, z)$} (2);
137%% %% \end{tikzpicture}
138%% \end{eg}
139%% \end{frame}
140
141%% \begin{frame}
142%% \frametitle{Beispiel-DFST}
143
144 \begin{figure}
145 \centering
146 \pinclude{presentation/switchdfst.tex}
147 \end{figure}
148\end{frame}
149
150\section{Motivation}
151
152\begin{frame}
153 \frametitle{Motivation}
154
155 \begin{itemize}
156 \item edit-lenses (und unterliegende edits) haben umfangreiche algebraische Struktur
157 \item Inkrementelle Parser haben praktische Vorteile, wo anwendbar
158 \item Darstellung von inkrementellen Parsern als edit-lenses erlaubt Kompositions-basierte Konstruktion von Parsern
159 \end{itemize}
160
161 \begin{eg}
162 \begin{itemize}
163 \item Interaktive Programmierumgebung kann \emph{sofort} Feedback geben (Semantisches autocomplete, syntax highlighting, ...)
164 \item Grafische Konfigurations-Ansichten für unterliegende Konfigurationsdateien können Formatierung (z.B. Kommentare) erhalten
165 \end{itemize}
166 \end{eg}
167\end{frame}
168
169\section{Inhalt der Arbeit}
170
171\begin{frame}
172 \frametitle{Inhalt}
173
174 \begin{itemize}
175 \item edits, edit-lenses, und FSTs in Haskell
176 \item Verfahren zum automatischen Ableiten von edit-lenses aus DFSTs
177 \item Interaktiver editor für beliebige edit-lenses zwischen Strings
178 \end{itemize}
179\end{frame}
180
181\section{Demonstration}
182
183\begin{frame}
184 \frametitle{JSON-Normalisierer}
185 \framesubtitle{Demonstration}
186
187 \begin{itemize}
188 \item JSON-Normalisierung ausgedrückt als DFST
189 \item edit-lens aus DFST abgeleitet
190 \item Interaktiver editor akzeptiert edits auf einer Seite und propagiert in Gegenrichtung
191 \end{itemize}
192\end{frame}
193
194\section{Edit-lenses für DFSTs}
195
196\begin{frame}
197 \frametitle{Ansatz}
198
199 Als \emph{Komplement} genug Information um für jedes Intervall im Eingabe-String berechnen zu können:
200
201 \begin{itemize}
202 \item Gegeben einen Zustand auf der linken Seite des Intervalls, welche Ausgabe wird produziert und welcher Zustand wird auf der rechten Seite erreicht?
203
204 \[ \text{state} \to \text{outChar}^\star \times (\text{state} \cup \{ \bot \}) \]
205
206 \emph{Ausgabe-Wirkung} des FST
207 \item Welche Eingabe wurde im Intervall konsumiert?
208 \end{itemize}
209
210 Gegeben einen edit:
211
212 \begin{enumerate}
213 \item Intervall in Ausgabe/Eingabe bestimmen, die von edit betroffen ist
214 \item Betroffenes Teilstück des Komplements austauschen
215 \item Übertragenen edit Anhand von Differenz der Komplement-Stücke bestimmen
216 \end{enumerate}
217\end{frame}
218
219\begin{frame}
220 \frametitle{Composition-Trees}
221 \framesubtitle{Effiziente Berechnung von Wirkungen beliebiger Eingabe-Intervalle}
222
223 \begin{columns}[c]
224 \column{.5\textwidth}
225 \begin{center}
226 \scalebox{1}{\pinclude{presentation/switchdfst.tex}}
227 \end{center}
228 \column{.5\textwidth}
229 \begin{center}
230 \scalebox{0.65}{\pinclude{presentation/comptree.tex}}
231 \end{center}
232 \end{columns}
233\end{frame}
234
235\begin{frame}
236 \frametitle{$\Rrightarrow$}
237
238 \begin{align*}
239 \Rrightarrow & \colon \delta ( \text{inChar}^\star ) \times C \to \delta ( \text{outChar}^\star ) \times C \\
240 C & \colon \left ( \text{outChar}^\star \times (\text{state} \cup \{ \bot \}), \text{inChar}^\star \right )
241 \end{align*}
242
243 \begin{enumerate}
244 \item Bestimme Intervall in $\text{inChar}^\star$ betroffen von edit und asoziiertes Stück $c \subseteq C$
245 \item Lese in $C$ betroffenes Intervall in $\text{outChar}^\star$ ab
246 \item Berechne neues Stück $c^\prime$ durch Auswertung des DFST
247 \item Bestimme $\delta (\text{outChar}^\star)$ mit Standard-Diff auf $\text{inChar}^\star$-Komponenten von $c$ und $c^\prime$
248 \item Ersetze $c$ in $C$ mit $c^\prime$
249 \end{enumerate}
250\end{frame}
251
252\begin{frame}
253 \frametitle{$\Rrightarrow$}
254 \framesubtitle{Beispiel}
255
256 \begin{columns}[c]
257 \column{.33\textwidth}
258 \begin{enumerate}
259 \item Intervall im Eingabetext
260 \item Ausgabe-Stück aus Komplement
261 \item Neues Komplement-Stück durch Auswertung
262 \item Komplement-Stück ersetzen
263 \item Ausgabe-Differenz aus Komplement-Stücken
264 \end{enumerate}
265 \column{.33\textwidth}
266 \begin{center}
267 \scalebox{1}{\pinclude{presentation/switchdfst.tex}}
268 \end{center}
269 \column{.33\textwidth}
270 \begin{center}
271 \scalebox{0.6}{\pinclude{presentation/comptree.tex}}
272 \end{center}
273 \end{columns}
274\end{frame}
275
276\begin{frame}
277 \frametitle{$\Lleftarrow$}
278
279 \begin{align*}
280 \Lleftarrow & \colon \delta ( \text{outChar}^\star ) \times C \to \delta ( \text{inChar}^\star ) \times C \\
281 C & \colon \left ( \text{outChar}^\star \times (\text{state} \cup \{ \bot \}), \text{inChar}^\star \right )
282 \end{align*}
283
284 \begin{enumerate}
285 \item Bestimme Intervall in $\text{outChar}^\star$ betroffen von edit und asoziiertes Stück $c \subseteq C$
286 \item Bestimme neue Ausgabe durch Anwenden von $\delta ( \text{outChar}^\star )$
287 \item Finde, durch Breitensuche, Lauf in DFST mit passender Ausgabe und selben Grenzen wie $c$
288 \item Lese $c^\prime$ aus neuem Lauf ab
289 \item Bestimme $\delta ( \text{inChar}^\star )$ mit Standard-Diff
290 \item Ersetze $c$ in $C$ mit $c^\prime$
291 \end{enumerate}
292\end{frame}
293
294\begin{frame}
295 \frametitle{$\Lleftarrow$}
296 \framesubtitle{Beispiel}
297
298 \begin{columns}[c]
299 \column{.33\textwidth}
300 \begin{enumerate}
301 \item Intervall im Ausgabetext
302 \item Neue Ausgabe für Intervall
303 \item Breitensuche nach neuem Lauf-Stück
304 \item Neues Komplement-Stück
305 \item Komplement-Stück ersetzen
306 \item Eingabe-Differenz aus Komplement-Stücken
307 \end{enumerate}
308 \column{.33\textwidth}
309 \begin{center}
310 \scalebox{1}{\pinclude{presentation/switchdfst.tex}}
311 \end{center}
312 \column{.33\textwidth}
313 \begin{center}
314 \scalebox{0.6}{\pinclude{presentation/comptree.tex}}
315 \end{center}
316 \end{columns}
317\end{frame}
318
319\section{Resultate}
320
321\begin{frame}
322 \frametitle{Ergebnisse}
323
324 \begin{itemize}
325 \item Verfahren zum automatischen Ableiten von inkrementellen Parsern zu DFSTs
326 \item Inkl. Darstellung als edit-lens
327 \item Interaktive Demonstration von edit-lenses
328 \end{itemize}
329\end{frame}
330
331\begin{frame}
332 \frametitle{Implementierung}
333 \begin{itemize}
334 \item Diverse erfolglose Ansätze zur Implementierung von $\Lleftarrow$
335 \item Erfolgreiche Implementierung dann mit algebraischen FST-Transformationen und als Komposition kleiner Typ-gesteuerter und generischer Teile
336 \note[item]{Demonstriert Erfolg von algebraischer Programmierung: nicht optimale, aber ähnliche, Komplexitätsklasse und dafür leichter verständlich}
337 \item Demonstriert Kodierung von algorithmischen Voraussetzungen in Typen (z.B. Determinismus von FST)
338 \note[item]{Korrekte Kodierung in Typen erlaubt auslassen von wenig interessanten Spezialfällen}
339 \end{itemize}
340\end{frame}
341
342\begin{frame}
343 \frametitle{Weiterführendes}
344 \begin{itemize}
345 \item Analoges Verfahren für FSTs auch möglich; $\Lleftarrow$ und $\Rrightarrow$ dann symmetrisch und analog zum DFST-Fall von $\Lleftarrow$
346 \item Edit-Lenses sind nicht kompatibel mit bestehenden Lens-Frameworks (in Haskell), da kodierung der Update-Propagatoren nicht kompatibel mit algebraischer Struktur der Edits
347 \item Linsen bilden große Familie von funktionalen, bidirektionalen Programmen z.B.
348 Imperative accessors für rein-funktionale Datenstrukturen und nützliche Verallgemeinerungen
349 \item Inkrementelle Parser und assoziierte Algorithmen (gewöhnlich basierend auf formalen Grammatiken) sind bekannt seit den 70er-Jahren; neue Darstellungen mit algebraischer Struktur fassen besser die \emph{mostly-incremental}-Struktur der meisten Programmiersprachen
350 \end{itemize}
351\end{frame}