summaryrefslogtreecommitdiff
path: root/edit-lens/src
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2018-05-13 10:35:29 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2018-05-13 10:35:29 +0200
commiteb599b2394e62842423cc0bbee2432a9cae95f4b (patch)
tree117cb06ac3a46b8c6ccc0429fed7fa4ec58ea022 /edit-lens/src
parent72c95738e126186fbd46279c9c89d791d7092b08 (diff)
downloadincremental-dfsts-eb599b2394e62842423cc0bbee2432a9cae95f4b.tar
incremental-dfsts-eb599b2394e62842423cc0bbee2432a9cae95f4b.tar.gz
incremental-dfsts-eb599b2394e62842423cc0bbee2432a9cae95f4b.tar.bz2
incremental-dfsts-eb599b2394e62842423cc0bbee2432a9cae95f4b.tar.xz
incremental-dfsts-eb599b2394e62842423cc0bbee2432a9cae95f4b.zip
Think about propL
Diffstat (limited to 'edit-lens/src')
-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)