summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--edit-lens/src/Data/String/DFST/Lens.lhs13
1 files changed, 11 insertions, 2 deletions
diff --git a/edit-lens/src/Data/String/DFST/Lens.lhs b/edit-lens/src/Data/String/DFST/Lens.lhs
index 8fd748a..bf06f53 100644
--- a/edit-lens/src/Data/String/DFST/Lens.lhs
+++ b/edit-lens/src/Data/String/DFST/Lens.lhs
@@ -108,11 +108,20 @@ Da wir wissen welche Stelle im input-String von einem gegebenen edit betroffen i
108Die Wirkung ab der betroffenen Stelle im input-String können wir also Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen. 108Die Wirkung ab der betroffenen Stelle im input-String können wir also Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen.
109Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung Bestimmten zu bestimmen. 109Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung Bestimmten zu bestimmen.
110 110
111% TODO propL 111
112% Für die Rückrichtung bietet es sich an eine Art primitive Invertierung des DFSTs zu berechnen.
113% Gegeben den aktuellen DFST $A$ möchten wir einen anderen $A^{-1}$ finden, sodass gilt:
114
115% \begin{itemize}
116% \item $A^{-1}$ akzeptiert einen String $s^{-1}$ (endet seinen Lauf in einem finalen Zustand) gdw. es einen String $s$ gibt, der unter $A$ die Ausgabe $s^{-1}$ produziert.
117% \item Wenn $A^{-1}$ einen String $s^{-1}$ akzeptiert so produziert die resultierende Ausgabe $s$ unter $A$ die Ausgabe $s^{-1}$.
118% \end{itemize}
119
120% Kann nicht funktionieren, denn $A^{-1}$ ist notwendigerweise nondeterministisch. Wird $A^{-1}$ dann zu einem DFST forciert (durch arbiträre Wahl einer Transition pro Zustand) gehen Informationen verloren—$A^{-1}$ produziert nicht den minimale edit auf dem input string (in der Tat beliebig schlecht) für einen gegeben edit auf dem output string.
112 121
113\begin{code} 122\begin{code}
114 123
115data DFSTAction state = DFSTAction { runDFSTAction :: state -> (state, String -> String)} 124data DFSTAction state = DFSTAction { runDFSTAction :: state -> (state, String -> String) }
116 125
117instance Monoid (DFSTAction state) where 126instance Monoid (DFSTAction state) where
118 mempty = DFSTAction $ \x -> (x, id) 127 mempty = DFSTAction $ \x -> (x, id)