diff options
Diffstat (limited to 'edit-lens/src/Control/DFST')
| -rw-r--r-- | edit-lens/src/Control/DFST/Lens.lhs | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/edit-lens/src/Control/DFST/Lens.lhs b/edit-lens/src/Control/DFST/Lens.lhs index ec81113..56f37a0 100644 --- a/edit-lens/src/Control/DFST/Lens.lhs +++ b/edit-lens/src/Control/DFST/Lens.lhs | |||
| @@ -278,7 +278,7 @@ bfs outgoing predicate | |||
| 278 | w^\prime = w = 0\, 1\, \ldots\, 80\, \text{\textbackslash n}\, 81\, \ldots\, 98 | 278 | w^\prime = w = 0\, 1\, \ldots\, 80\, \text{\textbackslash n}\, 81\, \ldots\, 98 |
| 279 | \end{equation*} | 279 | \end{equation*} |
| 280 | 280 | ||
| 281 | Das von $e$ betroffene Intervall von $w^\prime$ ist $(80, 80)$. | 281 | Das von $e^\prime$ betroffene Intervall in $w^\prime$ ist $(80, 80)$. |
| 282 | 282 | ||
| 283 | Das Komplement nach Anwendung des DFST auf $w$ ist, wie in Beispiel \ref{eg:linebreakonw100} dargelegt: | 283 | Das Komplement nach Anwendung des DFST auf $w$ ist, wie in Beispiel \ref{eg:linebreakonw100} dargelegt: |
| 284 | 284 | ||
| @@ -286,21 +286,66 @@ bfs outgoing predicate | |||
| 286 | \text{act} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ | 286 | \text{act} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ |
| 287 | 0 & \mapsto (0\, 1\, \ldots\, 80\, \text{\tt \textbackslash n}\, 81\, \ldots\, 98, 19) \\ | 287 | 0 & \mapsto (0\, 1\, \ldots\, 80\, \text{\tt \textbackslash n}\, 81\, \ldots\, 98, 19) \\ |
| 288 | 1 & \mapsto (0\, 1\, \ldots\, 79\, \text{\tt \textbackslash n}\, 80\, \ldots\, 98, 18) \\ | 288 | 1 & \mapsto (0\, 1\, \ldots\, 79\, \text{\tt \textbackslash n}\, 80\, \ldots\, 98, 18) \\ |
| 289 | & \vdots | 289 | & \vdots |
| 290 | \end{align*} | 290 | \end{align*} |
| 291 | 291 | ||
| 292 | Wir unterteilen $\text{act}$ an $(80, 80)$ in $\text{act}_\text{R} \circ \text{act}_e \circ \text{act}_\text{L}$: | 292 | Wir unterteilen $\text{act}$ an $(80, 80)$ in $\text{act}_\text{R} \circ \text{act}_{e^\prime} \circ \text{act}_\text{L}$: |
| 293 | 293 | ||
| 294 | \begin{align*} | 294 | \begin{align*} |
| 295 | \text{act}_\text{R} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ | 295 | \text{act}_\text{R} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ |
| 296 | n & \mapsto (81\, \ldots\, 98, \min ( 80, n + 19 ) ) \\ | 296 | n & \mapsto (81\, \ldots\, 98, \min ( 80, n + 19 ) ) \\ |
| 297 | & \\ | 297 | & \\ |
| 298 | \text{act}_e & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ | 298 | \text{act}_{e^\prime} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ |
| 299 | n & \mapsto ( \text{\tt \textbackslash n}, 0 ) \\ | 299 | n & \mapsto ( \text{\tt \textbackslash n}, 0 ) \\ |
| 300 | & \\ | 300 | & \\ |
| 301 | \text{act}_\text{L} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ | 301 | \text{act}_\text{L} & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ |
| 302 | \text{other} & \mapsto (\epsilon, \bot) | 302 | n & \mapsto (0\, 1\, \ldots\, 80, 80) \\ |
| 303 | \end{align*} | 303 | \end{align*} |
| 304 | 304 | ||
| 305 | % TODO | 305 | Wir bestimmen die Zustände des vorherigen Laufs an den Grenzen des von $e^\prime$ betroffenen Intervalls: |
| 306 | |||
| 307 | \begin{align*} | ||
| 308 | Q_\text{L} &= 80 \\ | ||
| 309 | Q_\text{R} &= 0 | ||
| 310 | \end{align*} | ||
| 311 | |||
| 312 | Wir wenden $e^\prime = \rho_{80}$ an auf $\restr{w^\prime}{\text{act}_{e^\prime}} \coloneqq \pi_1 \left ( \text{act}_{e^\prime}(Q_\text{L}) \right ) = \text{\tt \textbackslash n}$, das Teilwort erzeugt vom Komplement-Stück $\text{act}_{e^\prime}$: | ||
| 313 | |||
| 314 | \begin{equation*} | ||
| 315 | \restr{w^\prime}{\text{act}_{e^\prime}} \cdot \rho_{80} = \epsilon | ||
| 316 | \end{equation*} | ||
| 317 | |||
| 318 | Da der DFST aus Beispiel \ref{eg:linebreak} keine Transitionen mit mehr als einem Ausgabe-Zeichen enthält ist in diesem Fall keine explizite Umwandlung in einen FST notwendig. | ||
| 319 | Der Einfachheit wegen lassen wir sie aus. | ||
| 320 | |||
| 321 | Der Wort-FST für das leere Wort hat genau einen Zustand und keine Transitionen. | ||
| 322 | Es hat daher auch das Produkt mit dem DFST aus Beispiel \ref{eg:linebreak} keine Transitionen und nur Zustände der Form $(0, n)$ mit $n \in \{ 0, \ldots, 80 \}$. | ||
| 323 | Wie auch im ursprünglichen DFST sind alle Zustände akzeptierend. | ||
| 324 | |||
| 325 | Wir müssen nun bestimmen welche Zustände, unter $\text{act}_\text{R}$, zu einem akzeptierenden Zustand führen. | ||
| 326 | Da alle Zustände akzeptieren ist hier jeder Zustand geeignet. | ||
| 327 | |||
| 328 | Wir müssen nun (vermöge Breitensuche) den kürzesten Pfad im Produkt-FST zwischen $Q_\text{L}$ und einem der Zustände finden, der unter $\text{act}_\text{R}$ zu einem akzeptierenden Zustand im ursprünglichen transducer führt. | ||
| 329 | Der leere Pfad ist geeignet. | ||
| 330 | |||
| 331 | Die DFST-Wirkung (also das Komplement) des leeren Strings (die Eingabe des leeren Pfads) ist: | ||
| 332 | \begin{align*} | ||
| 333 | \text{act}_0 & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ | ||
| 334 | n & \mapsto ( \epsilon, n ) | ||
| 335 | \end{align*} | ||
| 336 | |||
| 337 | Mithilfe des Unix Standard-Diff-Algorithmus bestimmen wir $e$ als den minimalen edit, sodass gilt: | ||
| 338 | \begin{equation*} | ||
| 339 | \text{\tt \textbackslash n} \cdot e = \epsilon | ||
| 340 | \end{equation*} | ||
| 341 | Man beachte das $\text{\tt \textbackslash n}$ und $\epsilon$ hierbei die \emph{Eingaben} von $\text{act}_{e^\prime}$ bzw. $\text{act}_0$ sind. | ||
| 342 | Nach Behandlung der Indices ergibt sich $e = \rho_{80}$. | ||
| 343 | |||
| 344 | Als neues Komplement erhalten wir: | ||
| 345 | |||
| 346 | \begin{align*} | ||
| 347 | \text{act}^\prime & \colon Q \to \Delta^\star \times \{ \bot \} \cup Q \\ | ||
| 348 | \text{act}^\prime & = \text{act}_R \circ \text{act}_0 \circ \text{act}_L \\ | ||
| 349 | n & \mapsto (0\, 1\, \ldots\, 80\, 81\, \ldots\, 98, 80) | ||
| 350 | \end{align*} | ||
| 306 | \end{eg} | 351 | \end{eg} |
