summaryrefslogtreecommitdiff
path: root/edit-lens/src/Control/FST
diff options
context:
space:
mode:
Diffstat (limited to 'edit-lens/src/Control/FST')
-rw-r--r--edit-lens/src/Control/FST/Lens.tex29
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 @@
1Es 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
3Eine natürlich Erweiterung von \texttt{DFSTAction} wäre:
4\begin{lstlisting}[language=Haskell]
5data FSTAction state input output = FSTAction
6 { runFSTAction :: state -> Map state [Seq output]
7 , fstaConsumes :: Seq input
8 }
9\end{lstlisting}
10wobei 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).
15Um 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.
16Quellen von Serien unendlich vieler output-Strings sind notwendigerweise Zykel im betrachteten FST.
17Wir könnten nun für jeden Zykel im betrachteten FST eine Kante arbiträr wählen und dem Folgen jener Kante Kosten zuweisen.
18Wenn 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
20Das 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).
21Diese Asymmetrie ergibt sich ausschließlich aus der Wahl des Komplements.
22
23Wählen wir stattdessen ein Komplement, dass Eingabe und Ausgabe symmetrisch behandelt:
24\begin{lstlisting}[language=Haskell]
25newtype FSTAction' state input output = FSTAction'
26 { runFSTAction' :: state -> Map state [Seq input, Seq output]
27 }
28\end{lstlisting}
29So lassen sich $\Rrightarrow^\prime$ und $\Lleftarrow^\prime$ ebenfalls symmetrisch, analog zu $\Lleftarrow$, konstruieren.