diff options
Diffstat (limited to 'edit-lens/src/Control/FST/Lens.tex')
-rw-r--r-- | edit-lens/src/Control/FST/Lens.tex | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/edit-lens/src/Control/FST/Lens.tex b/edit-lens/src/Control/FST/Lens.tex new file mode 100644 index 0000000..dc44e10 --- /dev/null +++ b/edit-lens/src/Control/FST/Lens.tex | |||
@@ -0,0 +1,29 @@ | |||
1 | Es stellt sich die Frage, ob das obig beschriebene Verfahren zur Konstruktion einer edit-lens sich auch auf nondeterminische finite state transducers anwenden lässt. | ||
2 | |||
3 | Eine natürlich Erweiterung von \texttt{DFSTAction} wäre: | ||
4 | \begin{lstlisting}[language=Haskell] | ||
5 | data FSTAction state input output = FSTAction | ||
6 | { runFSTAction :: state -> Map state [Seq output] | ||
7 | , fstaConsumes :: Seq input | ||
8 | } | ||
9 | \end{lstlisting} | ||
10 | wobei die Liste aller möglichen output-Strings in der rechten Seite von \texttt{runFSTAction} in aller Regel unendlich ist. | ||
11 | |||
12 | $\Rrightarrow$ würde sich notwendigerweise arbiträr auf einen der möglichen output-Strings festlegen aber ansonsten wohl identisch zum DFST-Fall implementieren lassen. | ||
13 | |||
14 | $\Lleftarrow$ basiert fundamental darauf im Komplement anhand der erzeugten output-Strings zu suchen (um das betroffene Intervall im output-String auf das Komplement zu übertragen). | ||
15 | Um sicher zu stellen, dass jene Suche immer terminiert, müsste die Aufzählung der i.A. unendlich vielen zulässigen output-Strings in \texttt{FSTAction} geschickt gewählt sein. | ||
16 | Quellen von Serien unendlich vieler output-Strings sind notwendigerweise Zykel im betrachteten FST. | ||
17 | Wir könnten nun für jeden Zykel im betrachteten FST eine Kante arbiträr wählen und dem Folgen jener Kante Kosten zuweisen. | ||
18 | Wenn wir nun sicherstellen, dass output-Strings in Reihenfolge aufsteigender Kosten aufgezählt werden, lässt sich jeder endliche output-String in endlicher Zeit finden. | ||
19 | |||
20 | Das obig beschriebene Verfahren weißt eine Asymmetrie auf, die im unterliegenden FST nicht vorhanden ist (sowohl Eingabe- als auch Ausgabe-Symbole sind Annotationen vom gleichen Typ an die Transitionen des FST). | ||
21 | Diese Asymmetrie ergibt sich ausschließlich aus der Wahl des Komplements. | ||
22 | |||
23 | Wählen wir stattdessen ein Komplement, dass Eingabe und Ausgabe symmetrisch behandelt: | ||
24 | \begin{lstlisting}[language=Haskell] | ||
25 | newtype FSTAction' state input output = FSTAction' | ||
26 | { runFSTAction' :: state -> Map state [Seq input, Seq output] | ||
27 | } | ||
28 | \end{lstlisting} | ||
29 | So lassen sich $\Rrightarrow^\prime$ und $\Lleftarrow^\prime$ ebenfalls symmetrisch, analog zu $\Lleftarrow$, konstruieren. | ||