diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2019-02-19 11:39:51 +0100 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2019-02-19 11:39:51 +0100 |
| commit | 8afbe1f7df24034dd16fdf2e89b0665b2318ae2a (patch) | |
| tree | 095be830c34c4aa9682a7047f4b0e412178ab24b /edit-lens/src/Control/FST | |
| parent | 46ae60eaca841b554ba20c6a2b7a15b43c12b4df (diff) | |
| download | incremental-dfsts-8afbe1f7df24034dd16fdf2e89b0665b2318ae2a.tar incremental-dfsts-8afbe1f7df24034dd16fdf2e89b0665b2318ae2a.tar.gz incremental-dfsts-8afbe1f7df24034dd16fdf2e89b0665b2318ae2a.tar.bz2 incremental-dfsts-8afbe1f7df24034dd16fdf2e89b0665b2318ae2a.tar.xz incremental-dfsts-8afbe1f7df24034dd16fdf2e89b0665b2318ae2a.zip | |
Stuff...
Diffstat (limited to 'edit-lens/src/Control/FST')
| -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. | ||
