Skip to content

Commit 5780d52

Browse files
committed
Базовая версия производных для регулярных выражений.
1 parent 30a2945 commit 5780d52

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

tex/RegularLanguages.tex

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,8 +376,36 @@ \section{Производные для регулярных языков}
376376
\end{align*}
377377
\end{example}
378378

379-
Принадлежность строки языку через производные.
379+
Одной из прикладных задач, которую можно решить с помощью производных, является принадлежность строки языку, задаваемому регулярным выражением\sidenote{Что важно, без преобразований регулярного выражения в конечный автомат, как было показано выше.}.
380+
Пусть дано регулярное выражение $R$ и нужно проверить, принадлежит ли строка $w=t_0 \ldots \ t_{n_1}$ языку, задаваемому этим выражением.
381+
Для этого необходимо вычислить следующее выражение:
382+
\[
383+
\emph{IsNull}(\partial_{t_{n-1}}(\ldots(\partial_{t_0}(R))\ldots)).
384+
\]
385+
Если его значение \emph{true}, то строка принадлежит языку.
386+
Иначе не принадлежит.
380387

388+
\begin{example}
389+
Пусть дано регулярное выражение $a(a \mid (b \ b))^*$ и строка \texttt{abb}.
390+
Принадлежит ли она языку, задаваемому данным выражением?
391+
Для ответа на этот вопрос вычислим следующее выражение:
392+
\[
393+
\emph{IsNull}(\partial_b(\partial_b(\partial_a(a^*(a \mid (b \ b))^*)))).
394+
\]
395+
Для начала вычислим производные.
396+
\begin{align*}
397+
\partial_a(a^*(a \mid (b \ b))^*) &= \partial_a(a) (a \mid (b \ b))^* \mid \mathcal{V}(a)(\partial_a(a \mid (b \ b))^*) \\
398+
&= \varepsilon (a \mid (b \ b))^* \mid \varnothing (\partial_a(a \mid (b \ b))^*) \\
399+
&= (a \mid (b \ b))^* \mid \varnothing \\
400+
&= (a \mid (b \ b))^*\\
401+
\partial_b((a \mid (b \ b))^*) &= \partial_b((a \mid (b \ b))) (a \mid (b \ b))^* \\
402+
&= (\varnothing \mid b) (a \mid (b \ b))^* \\
403+
&= b (a \mid (b \ b))^* \\
404+
\partial_b(b (a \mid (b \ b))^*) &= (a \mid (b \ b))^*
405+
\end{align*}
406+
$\emph{IsNull}((a \mid (b \ b))^*) = \emph{true}$ по определению.
407+
Таким образом, цепочка \texttt{abb} принадлежит языку, задаваемому регулярным выражением $a(a \mid (b \ b))^*$.
408+
\end{example}
381409

382410
\section{Построение конечного автомата по регулярному выражению}
383411

0 commit comments

Comments
 (0)